0 專輯概述
etcd 是云原生架構(gòu)中重要的基礎(chǔ)組件鼎俘,由 CNCF 孵化托管款青。etcd 在微服務(wù)和 Kubernates 集群中不僅可以作為服務(wù)注冊與發(fā)現(xiàn)似舵,還可以作為 key-value 存儲的中間件脚猾。
《徹底搞懂 etcd 系列文章》將會從 etcd 的基本功能實踐、API 接口砚哗、實現(xiàn)原理龙助、源碼分析,以及實現(xiàn)中的踩坑經(jīng)驗等幾方面具體展開介紹 etcd蛛芥。預計會有 20 篇左右的文章提鸟,筆者將會每周持續(xù)更新,歡迎關(guān)注常空。
1 etcd 集群部署
在生產(chǎn)環(huán)境中沽一,為了整個集群的高可用,etcd 正常都會集群部署漓糙,避免單點故障铣缠。本節(jié)將會介紹如何進行 etcd 集群部署。引導 etcd 集群的啟動有以下三種機制:
- 靜態(tài)
- etcd 動態(tài)發(fā)現(xiàn)
- DNS 發(fā)現(xiàn)
靜態(tài)啟動 etcd 集群要求每個成員都知道集群中的另一個成員昆禽。 在許多情況下蝗蛙,群集成員的 IP 可能會提前未知。在這些情況下醉鳖,可以在發(fā)現(xiàn)服務(wù)的幫助下引導 etcd 群集捡硅。
下面我們將會分別介紹這幾種方式。
2 靜態(tài)方式啟動 etcd 集群
單機安裝
如果想要在一臺機器上實踐 etcd 集群的搭建盗棵,可以通過 goreman 工具壮韭。
goreman 是一個 Go 語言編寫的多進程管理工具,是對 Ruby 下廣泛使用的 foreman 的重寫(foreman 原作者也實現(xiàn)了一個 Go 版本:forego纹因,不過沒有 goreman 好用)喷屋。
我們需要確認 Go 安裝環(huán)境,然后直接執(zhí)行:
go get github.com/mattn/goreman
編譯后的文件放在 $GOPATH/bin
中瞭恰,$GOPATH/bin
目錄已經(jīng)添加到了系統(tǒng) $PATH
中屯曹,所以我們可以方便執(zhí)行命令 goreman
命令。下面就是編寫 Procfile 腳本,我們啟動三個 etcd恶耽,具體對應(yīng)如下:
HostName | ip | 客戶端交互端口 | peer 通信端口 |
---|---|---|---|
infra1 | 127.0.0.1 | 12379 | 12380 |
infra2 | 127.0.0.1 | 22379 | 22380 |
infra3 | 127.0.0.1 | 32379 | 32380 |
Procfile 腳本如下:
etcd1: etcd --name infra1 --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
etcd2: etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
etcd3: etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
配置項說明:
- --name:etcd集群中的節(jié)點名密任,這里可以隨意,可區(qū)分且不重復就行
- --listen-peer-urls:監(jiān)聽的用于節(jié)點之間通信的url偷俭,可監(jiān)聽多個浪讳,集群內(nèi)部將通過這些url進行數(shù)據(jù)交互(如選舉,數(shù)據(jù)同步等)
- --initial-advertise-peer-urls:建議用于節(jié)點之間通信的url社搅,節(jié)點間將以該值進行通信驻债。
- --listen-client-urls:監(jiān)聽的用于客戶端通信的url,同樣可以監(jiān)聽多個形葬。
- --advertise-client-urls:建議使用的客戶端通信 url,該值用于 etcd 代理或 etcd 成員與 etcd 節(jié)點通信暮的。
- --initial-cluster-token: etcd-cluster-1笙以,節(jié)點的 token 值,設(shè)置該值后集群將生成唯一 id冻辩,并為每個節(jié)點也生成唯一 id猖腕,當使用相同配置文件再啟動一個集群時,只要該 token 值不一樣恨闪,etcd 集群就不會相互影響倘感。
- --initial-cluster:也就是集群中所有的 initial-advertise-peer-urls 的合集。
- --initial-cluster-state:new咙咽,新建集群的標志
注意上面的腳本老玛,etcd 命令執(zhí)行時需要根據(jù)本地實際的安裝地址進行配置。下面我們啟動 etcd 集群钧敞。
goreman -f /opt/procfile start
使用如上的命令啟動啟動 etcd 集群蜡豹,啟動完成之后查看集群內(nèi)的成員。
$ etcdctl --endpoints=http://localhost:22379 member list
8211f1d0f64f3269, started, infra1, http://127.0.0.1:12380, http://127.0.0.1:12379, false
91bc3c398fb3c146, started, infra2, http://127.0.0.1:22380, http://127.0.0.1:22379, false
fd422379fda50e48, started, infra3, http://127.0.0.1:32380, http://127.0.0.1:32379, false
我們在單機搭建的偽集群成功溉苛,需要注意的是在集群啟動時镜廉,我們是通過靜態(tài)的方式指定集群的成員,在實際環(huán)境中愚战,集群成員的 ip 可能不會提前知道娇唯。這時候就需要采用動態(tài)發(fā)現(xiàn)的機制。
docker 啟動集群
etcd 使用 gcr.io/etcd-development/etcd 作為容器的主要加速器寂玲, quay.io/coreos/etcd 作為輔助的加速器塔插。可惜這兩個加速器我們都沒法訪問敢茁,如果下載不了佑淀,可以使用筆者提供的地址:
docker pull bitnami/etcd:3.4.7
然后將拉取的鏡像重新 tag:
docker image tag bitnami/etcd:3.4.7 quay.io/coreos/etcd:3.4.7
鏡像設(shè)置好之后,我們啟動 3 個節(jié)點的 etcd 集群,腳本命令如下:
REGISTRY=quay.io/coreos/etcd
# For each machine
ETCD_VERSION=3.4.7
TOKEN=my-etcd-token
CLUSTER_STATE=new
NAME_1=etcd-node-0
NAME_2=etcd-node-1
NAME_3=etcd-node-2
HOST_1= 192.168.202.128
HOST_2= 192.168.202.129
HOST_3= 192.168.202.130
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd
# For node 1
THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
docker run \
-p 2379:2379 \
-p 2380:2380 \
--volume=${DATA_DIR}:/etcd-data \
--name etcd ${REGISTRY}:${ETCD_VERSION} \
/usr/local/bin/etcd \
--data-dir=/etcd-data --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
# For node 2
THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
docker run \
-p 2379:2379 \
-p 2380:2380 \
--volume=${DATA_DIR}:/etcd-data \
--name etcd ${REGISTRY}:${ETCD_VERSION} \
/usr/local/bin/etcd \
--data-dir=/etcd-data --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
# For node 3
THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
docker run \
-p 2379:2379 \
-p 2380:2380 \
--volume=${DATA_DIR}:/etcd-data \
--name etcd ${REGISTRY}:${ETCD_VERSION} \
/usr/local/bin/etcd \
--data-dir=/etcd-data --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
注意伸刃,上面的腳本是部署在三臺機器上面谎砾,每臺機器執(zhí)行對應(yīng)的腳本即可。在運行時可以指定 API 版本:
docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl put foo bar"
docker 的安裝方式比較簡單捧颅,讀者根據(jù)需要可以定制一些配置景图。
3 動態(tài)發(fā)現(xiàn)啟動 etcd 集群
如前面所述,在實際環(huán)境中碉哑,集群成員的 ip 可能不會提前知道挚币。在這種情況下,需要使用自動發(fā)現(xiàn)來引導 etcd 集群扣典,而不是指定靜態(tài)配置妆毕,這個過程被稱為發(fā)現(xiàn)。我們啟動三個 etcd贮尖,具體對應(yīng)如下:
HostName | ip | 客戶端交互端口 | peer 通信端口 |
---|---|---|---|
etcd1 | 192.168.202.128 | 2379 | 2380 |
etcd2 | 192.168.202.129 | 2379 | 2380 |
etcd3 | 192.168.202.130 | 2379 | 2380 |
協(xié)議的原理
Discovery service protocol 幫助新的 etcd 成員使用共享 URL 在集群引導階段發(fā)現(xiàn)所有其他成員笛粘。
該協(xié)議使用新的發(fā)現(xiàn)令牌來引導一個唯一的 etcd 集群。一個發(fā)現(xiàn)令牌只能代表一個 etcd 集群湿硝。只要此令牌上的發(fā)現(xiàn)協(xié)議啟動薪前,即使它中途失敗,也不能用于引導另一個 etcd 集群关斜。
提示:Discovery service protocol 僅用于集群引導階段示括,不能用于運行時重新配置或集群監(jiān)視。
Discovery protocol 使用內(nèi)部 etcd 集群來協(xié)調(diào)新集群的引導程序痢畜。首先垛膝,所有新成員都與發(fā)現(xiàn)服務(wù)交互,并幫助生成預期的成員列表裁着。之后繁涂,每個新成員使用此列表引導其服務(wù)器,該列表執(zhí)行與 --initial-cluster
標志相同的功能扔罪,即設(shè)置所有集群的成員信息。
獲取 discovery 的 token
生成將標識新集群的唯一令牌桶雀。 在以下步驟中矿酵,它將用作發(fā)現(xiàn)鍵空間中的唯一前綴。 一種簡單的方法是使用uuidgen:
UUID=$(uuidgen)
指定集群的大小
獲取令牌時矗积,必須指定群集大小全肮。 發(fā)現(xiàn)服務(wù)使用該大小來了解何時發(fā)現(xiàn)了最初將組成集群的所有成員。
curl -X PUT http://10.0.10.10:2379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/_config/size -d value=3
我們需要把該 url 地址 http://10.0.10.10:2379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83 作為 --discovery
參數(shù)來啟動 etcd棘捣。
節(jié)點會自動使用 http://10.0.10.10:2379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83 目錄進行 etcd 的注冊和發(fā)現(xiàn)服務(wù)辜腺。
公共發(fā)現(xiàn)服務(wù)
當我們本地沒有可用的 etcd 集群,etcd 官網(wǎng)提供了一個可以公網(wǎng)訪問的 etcd 存儲地址。我們可以通過如下命令得到 etcd 服務(wù)的目錄评疗,并把它作為 --discovery
參數(shù)使用测砂。
公共發(fā)現(xiàn)服務(wù) discovery.etcd.io
以相同的方式工作,但是有一層修飾百匆,可以提取丑陋的 URL砌些,自動生成 UUID,并提供針對過多請求的保護加匈。公共發(fā)現(xiàn)服務(wù)在其上仍然使用 etcd 群集作為數(shù)據(jù)存儲存璃。
$ curl http://discovery.etcd.io/new?size=3
http://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
以動態(tài)發(fā)現(xiàn)方式啟動集群
etcd 發(fā)現(xiàn)模式下,啟動 etcd 的命令如下:
# etcd1 啟動
$ /opt/etcd/bin/etcd --name etcd1 --initial-advertise-peer-urls http://192.168.202.128:2380 \
--listen-peer-urls http://192.168.202.128:2380 \
--data-dir /opt/etcd/data \
--listen-client-urls http://192.168.202.128:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://192.168.202.128:2379 \
--discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
# etcd2 啟動
/opt/etcd/bin/etcd --name etcd2 --initial-advertise-peer-urls http://192.168.202.129:2380 \
--listen-peer-urls http://192.168.202.129:2380 \
--data-dir /opt/etcd/data \
--listen-client-urls http://192.168.202.129:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://192.168.202.129:2379 \
--discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
# etcd3 啟動
/opt/etcd/bin/etcd --name etcd3 --initial-advertise-peer-urls http://192.168.202.130:2380 \
--listen-peer-urls http://192.168.202.130:2380 \
--data-dir /opt/etcd/data \
--listen-client-urls http://192.168.202.130:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://192.168.202.130:2379 \
--discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
需要注意的是雕拼,在我們完成了集群的初始化后纵东,這些信息就失去了作用。當需要增加節(jié)點時啥寇,需要使用 etcdctl 進行操作篮迎。為了安全,每次啟動新 etcd 集群時示姿,都使用新的 discovery token 進行注冊。另外逊笆,如果初始化時啟動的節(jié)點超過了指定的數(shù)量栈戳,多余的節(jié)點會自動轉(zhuǎn)化為 Proxy 模式的 etcd。
結(jié)果驗證
集群啟動好之后难裆,進行驗證子檀,我們看一下集群的成員:
$ /opt/etcd/bin/etcdctl member list
# 結(jié)果如下
40e2ac06ca1674a7, started, etcd3, http://192.168.202.130:2380, http://192.168.202.130:2379, false
c532c5cedfe84d3c, started, etcd1, http://192.168.202.128:2380, http://192.168.202.128:2379, false
db75d3022049742a, started, etcd2, http://192.168.202.129:2380, http://192.168.202.129:2379, false
結(jié)果符合預期,再看下節(jié)點的健康狀態(tài):
$ /opt/etcd/bin/etcdctl --endpoints="http://192.168.202.128:2379,http://192.168.202.129:2379,http://192.168.202.130:2379" endpoint health
# 結(jié)果如下
http://192.168.202.128:2379 is healthy: successfully committed proposal: took = 3.157068ms
http://192.168.202.130:2379 is healthy: successfully committed proposal: took = 3.300984ms
http://192.168.202.129:2379 is healthy: successfully committed proposal: took = 3.263923ms
可以看到乃戈,集群中的三個節(jié)點都是健康的正常狀態(tài)褂痰。以動態(tài)發(fā)現(xiàn)方式啟動集群成功。
4 DNS自發(fā)現(xiàn)模式
etcd 還支持使用 DNS SRV 記錄進行啟動症虑。實際上是利用 DNS 的 SRV 記錄不斷輪訓查詢實現(xiàn)缩歪。DNS SRV 是 DNS 數(shù)據(jù)庫中支持的一種資源記錄的類型,它記錄了計算機與所提供服務(wù)信息的對應(yīng)關(guān)系谍憔。
4.1 Dnsmasq 安裝
這里使用 Dnsmasq 創(chuàng)建 DNS 服務(wù)匪蝙。Dnsmasq 提供 DNS 緩存和 DHCP 服務(wù)、Tftp 服務(wù)功能习贫。作為域名解析服務(wù)器逛球,Dnsmasq 可以通過緩存 DNS 請求來提高對訪問過的網(wǎng)址的連接速度。Dnsmasq 輕量且易配置苫昌,適用于個人用戶或少于 50 臺主機的網(wǎng)絡(luò)颤绕。此外它還自帶了一個 PXE 服務(wù)器。
當接受到一個 DNS 請求時,Dnsmasq 首先會查找 /etc/hosts 這個文件奥务,然后查找 /etc/resolv.conf 中定義的外部 DNS物独。配置 Dnsmasq 為 DNS 緩存服務(wù)器,同時在 /etc/hosts 文件中加入本地內(nèi)網(wǎng)解析汗洒,這樣使得內(nèi)網(wǎng)機器查詢時就會優(yōu)先查詢 hosts 文件议纯,這就等于將 /etc/hosts 共享給全內(nèi)網(wǎng)機器使用,從而解決內(nèi)網(wǎng)機器互相識別的問題溢谤。相比逐臺機器編輯 hosts 文件或者添加 Bind DNS 記錄瞻凤,可以只編輯一個 hosts 文件。
基于筆者使用的 Centos 7 的主機世杀,首先安裝 Dnsmasq:
yum install dnsmasq
安裝好之后阀参,進行配置,所有的配置都在一個文件中完成 /etc/dnsmasq.conf瞻坝。我們也可以在 /etc/dnsmasq.d 中自己寫任意名字的配置文件蛛壳。
配置上游服務(wù)器地址
resolv-file 配置 Dnsmasq 額外的上游的 DNS 服務(wù)器,如果不開啟就使用 Linux 主機默認的 /etc/resolv.conf 里的 nameserver所刀。
$ vim /etc/dnsmasq.conf
# 增加如下的內(nèi)容:
resolv-file=/etc/resolv.dnsmasq.conf
srv-host=_etcd-server._tcp.blueskykong.com,etcd1.blueskykong.com,2380,0,100
srv-host=_etcd-server._tcp.blueskykong.com,etcd2.blueskykong.com,2380,0,100
srv-host=_etcd-server._tcp.blueskykong.com,etcd3.blueskykong.com,2380,0,100
在 dnsmasq.conf 中相應(yīng)的域名記錄衙荐,配置了我們所涉及的三臺服務(wù)器,分別對應(yīng) etcd1浮创,etcd2忧吟,etcd3。
在指定文件中增加轉(zhuǎn)發(fā) DNS 的地址
$ vim /etc/resolv.dnsmasq.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
這兩個免費的 DNS服務(wù)斩披,大家應(yīng)該不陌生溜族。讀者可以根據(jù)本地實際網(wǎng)絡(luò)進行配置。
本地啟用 Dnsmasq 解析
$ vim /etc/resolv.conf
nameserver 127.0.0.1
將 Dnsmasq 解析配置到本地垦沉,這很好理解煌抒。
添加解析記錄
分別為各個域名配置相關(guān)的 A 記錄指向 etcd 核心節(jié)點對應(yīng)的機器 IP。添加解析記錄有三種方式:使用系統(tǒng)默認 hosts厕倍、使用自定義 hosts 文件寡壮、使用自定義 conf。這里我們使用比較簡單的第一種方式绑青。
$ vim /etc/hosts
# 增加如下的內(nèi)容解析
192.168.202.128 etcd1.blueskykong.com
192.168.202.129 etcd2.blueskykong.com
192.168.202.130 etcd3.blueskykong.com
啟動服務(wù)
service dnsmasq start
啟動好之后诬像,我們進行驗證:
-
DNS 服務(wù)器上 SRV 記錄查詢,查詢到的結(jié)果如下:
$ dig @192.168.202.128 +noall +answer SRV _etcd-server._tcp.blueskykong.com _etcd-server._tcp.blueskykong.com. 0 IN SRV 0 100 2380 etcd2.blueskykong.com. _etcd-server._tcp.blueskykong.com. 0 IN SRV 0 100 2380 etcd1.blueskykong.com. _etcd-server._tcp.blueskykong.com. 0 IN SRV 0 100 2380 etcd3.blueskykong.com.
-
使查詢域名解析結(jié)果
$ dig @192.168.202.128 +noall +answer etcd1.blueskykong.com etcd2.blueskykong.com etcd3.blueskykong.com etcd1.blueskykong.com. 0 IN A 192.168.202.128 etcd2.blueskykong.com. 0 IN A 192.168.202.129 etcd3.blueskykong.com. 0 IN A 192.168.202.130
至此闸婴,我們已成功安裝好 Dnsmasq坏挠。下面我們基于 DNS 發(fā)現(xiàn)啟動 etcd 集群。
啟動集群
做好了上述兩步 DNS 的配置邪乍,就可以使用 DNS 啟動 etcd 集群了降狠。需要刪除ETCD_INITIAL_CLUSTER 配置(用于靜態(tài)服務(wù)發(fā)現(xiàn))对竣,并指定 DNS SRV 域名(ETCD_DISCOVERY_SRV)。配置 DNS 解析的 url 參數(shù)為 -discovery-srv
榜配,其中 etcd1 節(jié)點地啟動命令如下:
$ /opt/etcd/bin/etcd --name etcd1 \
--discovery-srv blueskykong.com \
--initial-advertise-peer-urls http://etcd1.blueskykong.com:2380 \
--initial-cluster-token etcd-cluster-1 \
--data-dir /opt/etcd/data \
--initial-cluster-state new \
--advertise-client-urls http://etcd1.blueskykong.com:2379 \
--listen-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380
etcd 群集成員可以使用域名或 IP 地址進行廣播否纬,啟動的過程將解析 DNS 記錄。--initial-advertise-peer-urls 中的解析地址必須與 SRV 目標中的解析地址匹配蛋褥。etcd 成員讀取解析的地址临燃,以查找其是否屬于 SRV 記錄中定義的群集。
我們驗證基于 DNS 發(fā)現(xiàn)啟動集群的正確性烙心,查看集群的成員列表:
$ /opt/etcd/bin/etcdctl member list
# 結(jié)果如下:
40e2ac06ca1674a7, started, etcd3, http://192.168.202.130:2380, http://etcd3.blueskykong.com:2379, false
c532c5cedfe84d3c, started, etcd1, http://192.168.202.128:2380, http://etcd1.blueskykong.com:2379, false
db75d3022049742a, started, etcd2, http://192.168.202.129:2380, http://etcd2.blueskykong.com:2379, false
可以看到膜廊,結(jié)果輸出 etcd 集群有三個成員,符合預期淫茵。下面我們使用 IP 地址的方式爪瓜,繼續(xù)驗證集群節(jié)點的狀態(tài)。
$ /opt/etcd/bin/etcdctl --endpoints="http://192.168.202.128:2379,http://192.168.202.129:2379,http://192.168.202.130:2379" endpoint health
# 結(jié)果如下:
http://192.168.202.129:2379 is healthy: successfully committed proposal: took = 2.933555ms
http://192.168.202.128:2379 is healthy: successfully committed proposal: took = 7.252799ms
http://192.168.202.130:2379 is healthy: successfully committed proposal: took = 7.415843ms
更多的 etcd 集群操作匙瘪,讀者可以自行嘗試铆铆,筆者不在此一一展開。
5 小結(jié)
本文在上一篇文章單機安裝 etcd 的基礎(chǔ)上進行了補充丹喻,主要介紹了 etcd 集群的多種安裝啟動方式:靜態(tài)單體薄货,靜態(tài) docker,動態(tài)發(fā)現(xiàn)以及 DNS 發(fā)現(xiàn)的啟動方式碍论。這么多的安裝姿勢菲驴,都是為了我們實際的使用,下一篇我們將具體進入 etcdctl 的使用講解骑冗。