這裡採用docker compose來部署
部署三個節點組一個叢集
etcd叢集節點數量的相關說明
etcd 是基於 raft演算法的分散式鍵值資料庫,生來就為叢集化而設計的,由於Raft演算法在做決策時需要超半數節點的投票,所以etcd叢集一般推薦奇數節點,如3、5或者7個節點構成一個叢集。
etcd官方推薦3、5、7個節點,雖然raft演算法也是半數以上投票才能有 leader,但奇數只是推薦,其實偶數也是可以的。如 2、4、8個節點。
下面分情況說明:
- 1 個節點:就是單例項,沒有叢集概念,不做討論
- 2 個節點:是叢集,但沒人會這麼配,這裡說點廢話:雙節點的etcd能啟動,啟動時也能有主,可以正常提供服務,但是一臺掛掉之後,就選不出主了,因為他只能拿到1票,剩下的那臺也無法提供服務,也就是雙節點無容錯能力,不要使用。
- 3 節點:標準的3 節點etcd 叢集只能容忍1臺機器當機,掛掉 1 臺此時等於2個節點的情況,如果再掛 1 臺,就和 2節點的情形一致了,一直選,一直增加任期,但就是選不出來,服務也就不可用了
- 4 節點:最大容忍1 臺 伺服器當機
- 5 節點:最大容忍 2 臺 伺服器當機
- 6 節點:最大容忍 2 臺 伺服器當機
- 7和8個節點,最大容忍 3臺 伺服器當機
以此類推,9和10個節點,最大容忍4臺 伺服器當機
總結以上可以得出結論:偶數節點雖然多了一臺機器,但是容錯能力是一樣的,也就是說,你可以設定偶數節點,但沒增加什麼能力,還浪費了一臺機器。同時etcd 是透過複製資料給所有節點來達到一致性,因此偶數的多一臺機器增加不了效能,反而會拉低寫入速度。
etcd叢集節點數越多越好嗎?
那有同學可能會問,我搞個幾十上百臺伺服器做etcd叢集,那叢集的整體效能是不是無敵了,etcd叢集永不會停止嘛?
有這個想法那就大錯特錯了,etcd 叢集是一個 Raft Group,沒有 shared。
所以它的極限有兩部分
- 一是單機的容量限制,記憶體和磁碟
- 二是網路開銷
每次 Raft 操作需要所有節點參與,每一次寫操作需要叢集中大多數節點將日誌落盤成功後,Leader 節點才能修改內部狀態機,並將結果返回給客戶端。
因此節點越多效能越低,並且出錯的機率會直線上升,並且是呈現線性的效能下降,所以擴充套件很多 etcd 節點是沒有意義的;
其次,如果etcd叢集超過7個達到十幾個幾十個,那麼,對運維來說也是一個不小的壓力了,並且叢集的配置什麼的也會更加的複雜,而不是簡單易用了。
因此,etcd叢集的數量一般是 3、5、7, 3 個是最低標準,7個也就是最高了。
docker安裝
自行安裝
$ docker version
Client: Docker Engine - Community
Version: 27.5.1
API version: 1.47
Go version: go1.22.11
Git commit: 9f9e405
Built: Wed Jan 22 13:41:31 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 27.5.1
API version: 1.47 (minimum version 1.24)
Go version: go1.22.11
Git commit: 4c9b3b0
Built: Wed Jan 22 13:41:31 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.25
GitCommit: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc:
Version: 1.2.4
GitCommit: v1.2.4-0-g6c52b3f
docker-init:
Version: 0.19.0
GitCommit: de40ad0
$ docker compose version
Docker Compose version v2.32.4
docker compose 清單檔案
咱們這裡使用三個節點來部署
services:
etcd1:
image: quay.io/coreos/etcd:v3.5.17 # 使用 etcd 官方映象
container_name: etcd1 # 容器名稱
ports:
- "2379:2379" # 客戶端通訊埠
- "2380:2380" # 節點間通訊埠
restart: always
environment:
- ETCD_NAME=etcd1 # 節點名稱
- ETCD_DATA_DIR=/var/etcd
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 # 監聽節點間通訊地址
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 # 監聽客戶端通訊地址
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380 # 向其他節點廣播的地址
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379 # 客戶端訪問地址
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 # 初始叢集配置
- ETCD_INITIAL_CLUSTER_STATE=new # 叢集初始狀態(新叢集)
- ETCD_ROOT_PASSWORD=111111 # 設定密碼
# - ALLOW_NONE_AUTHENTICATION=yes # 允許空密碼(僅限開發環境)
- ETCD_HEARTBEAT_INTERVAL=200
- ETCD_ELECTION_TIMEOUT=1000
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_LOGGER=zap
volumes:
- ./etcd1-data:/var/etcd # 持久化資料儲存
networks:
- etcd-net # 使用自定義網路
etcd2:
image: quay.io/coreos/etcd:v3.5.17
container_name: etcd2
ports:
- "2479:2379" # 客戶端通訊埠(避免與 etcd1 衝突)
- "2480:2380" # 節點間通訊埠(避免與 etcd1 衝突)
restart: always
environment:
- ETCD_NAME=etcd2
- ETCD_DATA_DIR=/var/etcd
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_STATE=new
- ETCD_ROOT_PASSWORD=111111 # 設定密碼
# - ALLOW_NONE_AUTHENTICATION=yes # 允許空密碼(僅限開發環境)
- ETCD_HEARTBEAT_INTERVAL=200
- ETCD_ELECTION_TIMEOUT=1000
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_LOGGER=zap
volumes:
- ./etcd2-data:/var/etcd
networks:
- etcd-net
etcd3:
image: quay.io/coreos/etcd:v3.5.17
container_name: etcd3
ports:
- "2579:2379" # 客戶端通訊埠(避免與 etcd1 和 etcd2 衝突)
- "2580:2380" # 節點間通訊埠(避免與 etcd1 和 etcd2 衝突)
restart: always
environment:
- ETCD_NAME=etcd3
- ETCD_DATA_DIR=/var/etcd
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_STATE=new
- ETCD_ROOT_PASSWORD=111111 # 設定密碼
# - ALLOW_NONE_AUTHENTICATION=yes # 允許空密碼(僅限開發環境)
- ETCD_HEARTBEAT_INTERVAL=200
- ETCD_ELECTION_TIMEOUT=1000
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_LOGGER=zap
volumes:
- ./etcd3-data:/var/etcd
networks:
- etcd-net
networks:
etcd-net: # 自定義網路
ETCD_NAME=etcd1
- 作用:設定當前etcd節點的名稱。
- 說明:在叢集中,每個節點需要有一個唯一的名稱。這裡節點名稱為
etcd1
。
ETCD_DATA_DIR=/var/etcd
- 作用:指定etcd儲存資料的目錄。
- 說明:etcd會將所有資料(如鍵值對、叢集狀態等)儲存在這個目錄中。這裡設定為
/var/etcd
。
ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- 作用:設定當前節點監聽其他etcd節點(peer)通訊的地址和埠。
- 說明:
0.0.0.0
表示監聽所有網路介面。2380
是etcd節點之間通訊的預設埠。- 其他節點會透過這個URL與當前節點通訊。
ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- 作用:設定當前節點監聽客戶端請求的地址和埠。
- 說明:
0.0.0.0
表示監聽所有網路介面。2379
是etcd客戶端通訊的預設埠。- 客戶端(如應用程式)會透過這個URL與etcd互動。
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
- 作用:設定當前節點向其他節點通告的peer通訊地址。
- 說明:
- 其他節點會透過這個URL與當前節點通訊。
- 這裡設定為
http://etcd3:2380
,表示其他節點需要透過etcd3
的主機名和埠2380
訪問當前節點。
ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
- 作用:設定當前節點向客戶端通告的訪問地址。
- 說明:
- 客戶端會透過這個URL訪問當前節點。
- 這裡設定為
http://etcd1:2379
,表示客戶端需要透過etcd1
的主機名和埠2379
訪問當前節點。
ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- 作用:定義初始叢集的成員列表。
- 說明:
- 這裡指定了叢集中有3個節點:
etcd1
、etcd2
和etcd3
。 - 每個節點的名稱和對應的peer通訊地址都需要明確列出。
- 當前節點(
etcd1
)會根據這個列表與其他節點建立連線。
- 這裡指定了叢集中有3個節點:
ETCD_INITIAL_CLUSTER_STATE=new
- 作用:指定叢集的初始狀態。
- 說明:
new
表示這是一個全新的叢集,etcd會初始化一個新的叢集。- 如果是加入已有叢集,可以設定為
existing
。
ETCD_ROOT_PASSWORD=111111
- 作用:設定etcd的root使用者密碼。
- 說明:
- 這裡將root使用者的密碼設定為
111111
。 - 啟用密碼認證後,客戶端需要提供正確的使用者名稱和密碼才能訪問etcd。
- 這裡將root使用者的密碼設定為
ALLOW_NONE_AUTHENTICATION=yes
- 作用:允許無密碼訪問(僅限開發環境)。
- 說明:
- 如果取消註釋並設定為
yes
,則允許客戶端無需認證即可訪問etcd。 - 注意:在生產環境中不建議啟用此選項,因為會降低安全性。
- 如果取消註釋並設定為
ETCD_HEARTBEAT_INTERVAL=200
- 作用:設定Leader節點向Follower節點傳送心跳的間隔時間(單位:毫秒)。
- 說明:
- 這裡設定為200毫秒。
- 心跳間隔越短,Leader和Follower之間的通訊越頻繁,但也會增加網路負載。
ETCD_ELECTION_TIMEOUT=1000
- 作用:設定Follower節點在多久未收到Leader心跳後開始選舉(單位:毫秒)。
- 說明:
- 這裡設定為1000毫秒。
- 如果Follower在1秒內未收到Leader的心跳,會觸發新的Leader選舉。
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- 作用:設定叢集的唯一識別符號。
- 說明:
- 這裡設定為
etcd-cluster
。 - 這個令牌用於防止不同叢集之間的節點意外加入。
- 這裡設定為
ETCD_LOGGER=zap
- 作用:設定etcd的日誌記錄器。
- 說明:
- 這裡使用
zap
作為日誌記錄器。 zap
是一個高效能的日誌庫,適合生產環境使用。
- 這裡使用
建立資料夾
mkdir etcd1-data
mkdir etcd2-data
mkdir etcd3-data
chmod 777 etcd1-data
chmod 777 etcd2-data
chmod 777 etcd3-data
啟服務
docker compose up -d
使用
基本用法
設定鍵值對
命令: etcdctl put <key> <value>
功能: 將指定的值儲存到指定的鍵中。如果鍵已存在,則覆蓋原有值。
示例:
$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get foo
# foo
# bar
獲取鍵值對
命令: etcdctl get <key>
功能: 獲取指定鍵的值。
示例:
$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" put foo bar
# OK
刪除鍵值對
命令: etcdctl del <key>
功能: 刪除指定的鍵。
示例:
$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" del foo
# 1
$ ./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" get foo
# (無輸出,鍵已刪除)
監聽鍵變化
命令: etcdctl watch <key>
功能: 監聽指定鍵的變化,當鍵的值發生變化時,輸出新值。
示例:
./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" watch foo
# PUT
# foo
# bar
事務操作
命令: etcdctl txn
功能: 執行原子事務操作。事務由條件、成功時的操作和失敗時的操作組成。
示例:
./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" txn <<<'mod("key1") > "0"
put key1 "overwrote-key1"
put key1 "created-key1"
put key2 "some extra key"
'
# FAILURE
# OK
# OK
租約管理
命令: etcdctl lease grant <ttl>
功能: 建立一個租約,租約會在指定的 TTL(生存時間)後自動過期。
示例:
./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" lease grant 60
# lease 32695410dcc0ca06 granted with TTL(60s)
./etcdctl --endpoints=127.0.0.1:2379 --user=root --password="111111" put foo bar --lease=32695410dcc0ca06
# OK
管理
檢查叢集健康狀態
endpoint health
./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table endpoint health
引數
- --endpoints:用於指定 etcd 叢集中的一個或多個節點的地址。etcdctl 會透過這些地址與叢集進行互動。
- --user:使用者名稱(如果設定了認證)
- --password:密碼。如果設定了密碼
- --write-out:輸出格式
格式 可讀性 機器可解析性 適用場景 simple 高 低 日常命令列操作,快速檢視結果 json 中 高 自動化指令碼或與其他工具整合 protobuf 低 高 高效能場景,程式間通訊 fields 中 高 提取特定欄位,適合命令列工具解析 table 高 低 檢視結構化資料,適合人類閱讀
結果
+----------------+--------+------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+----------------+--------+------------+-------+
| 127.0.0.1:2379 | true | 4.635238ms | |
| 127.0.0.1:2479 | true | 8.458422ms | |
| 127.0.0.1:2579 | true | 7.839896ms | |
+----------------+--------+------------+-------+
不同格式的輸出
# simple格式
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=simple endpoint health
127.0.0.1:2479 is healthy: successfully committed proposal: took = 4.042917ms
127.0.0.1:2379 is healthy: successfully committed proposal: took = 7.616517ms
127.0.0.1:2579 is healthy: successfully committed proposal: took = 5.400498ms
# json格式
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=json endpoint health
[{"endpoint":"127.0.0.1:2579","health":true,"took":"3.930839ms"},{"endpoint":"127.0.0.1:2479","health":true,"took":"1.145915ms"},{"endpoint":"127.0.0.1:2379","health":true,"took":"1.741041ms"}]
# fields格式
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=fields endpoint health
"Endpoint" : "127.0.0.1:2479"
"Health" : true
"Took" : 2.127138ms
"Error" :
"Endpoint" : "127.0.0.1:2579"
"Health" : true
"Took" : 4.811186ms
"Error" :
"Endpoint" : "127.0.0.1:2379"
"Health" : true
"Took" : 1.630513ms
"Error" :
檢查端點狀態
endpoint status
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table endpoint status
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 127.0.0.1:2379 | ade526d28b1f92f7 | 3.5.17 | 16 MB | false | false | 69 | 119394 | 119394 | |
| 127.0.0.1:2479 | d282ac2ce600c1ce | 3.5.17 | 16 MB | true | false | 69 | 119395 | 119395 | |
| 127.0.0.1:2579 | bd388e7810915853 | 3.5.17 | 16 MB | false | false | 69 | 119396 | 119396 | |
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
列出叢集成員
member list
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table member list
+------------------+---------+-------+-------------------+-------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+-------+-------------------+-------------------+------------+
| ade526d28b1f92f7 | started | etcd1 | http://etcd1:2380 | http://etcd1:2379 | false |
| bd388e7810915853 | started | etcd3 | http://etcd3:2380 | http://etcd3:2379 | false |
| d282ac2ce600c1ce | started | etcd2 | http://etcd2:2380 | http://etcd2:2379 | false |
+------------------+---------+-------+-------------------+-------------------+------------+
還有其他 叢集成員相關的命令
命令 | 功能描述 |
---|---|
member add | 向叢集中新增新成員 |
member remove | 從叢集中移除成員 |
member update | 更新叢集成員的 peer URLs |
# 向叢集中新增一個新成員。
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" member add newMember --peer-urls=http://127.0.0.1:12380
# Member ced000fda4d05edf added to cluster 8c4281cc65c7b112
# 從叢集中移除一個成員
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" member remove 2be1eb8f84b7f63e
# Member 2be1eb8f84b7f63e removed from cluster ef37ad9dc622a7c4
# 更新叢集中某個成員的 peer URLs
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" member update 2be1eb8f84b7f63e --peer-urls=http://127.0.0.1:12381
# Member 2be1eb8f84b7f63e updated in cluster ef37ad9dc622a7c4
檢查鍵值儲存的雜湊值
endpoint hashkv
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=table endpoint hashkv
+----------------+------------+
| ENDPOINT | HASH |
+----------------+------------+
| 127.0.0.1:2379 | 3110076216 |
| 127.0.0.1:2479 | 3110076216 |
| 127.0.0.1:2579 | 3110076216 |
+----------------+------------+
列出所有警報
alarm list
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" --write-out=json alarm list
{"header":{"cluster_id":10316109323310759371,"member_id":12530464223947363063,"revision":119033,"raft_term":69}}
命令 | 功能描述 |
---|---|
alarm disarm | 解除所有警報 |
move-leader | 將叢集的領導權轉移到指定的成員。 |
# 解除所有警報。
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" alarm disarm
# alarm:NOSPACE
# 將叢集的領導權轉移到指定的成員
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" move-leader c89feb932daef420
# Leadership transferred from 45ddc0e800e20b93 to c89feb932daef420
檢查叢集效能
check perf --load="s"
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" check perf --load="s"
59 / 60 Boooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooom ! 98.33%
PASS: Throughput is 149 writes/s
PASS: Slowest request took 0.116064s
PASS: Stddev is 0.016313s
PASS
解讀
- Throughput: 吞吐量(每秒寫入次數)。
- Slowest request: 最慢請求的耗時。
- Stddev: 請求耗時的標準差。
還有其他引數
- --load
作用: 指定效能測試的工作負載模型。
可選值:負載型別 描述 適用場景 s 小負載(Small) 小負載,模擬少量併發請求 測試叢集的基本效能 m 中負載(Medium) 中負載,模擬中等併發請求 測試叢集的中等壓力錶現 l 大負載(Large) 大負載,模擬高併發請求 測試叢集的高壓力錶現 xl 超大負載(XLarge) 超大負載,模擬極高併發請求 測試叢集的極限效能 - --prefix
作用: 指定效能測試中寫入的鍵的字首。
--prefix="/test"
- --auto-compact
作用: 在效能測試完成後,自動壓縮儲存(刪除舊版本資料)。
預設值: false。--auto-compact=true
- --auto-defrag
作用: 在效能測試完成後,自動進行資料碎片整理(釋放磁碟空間)。
預設值: false。--auto-defrag=true
命令 | 功能描述 |
---|---|
check datascale | 檢查叢集在不同工作負載下的記憶體使用情況 |
快照和備份
儲存快照
儲存當前叢集的快照到檔案
snapshot save
./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" snapshot save snapshot.db
恢復快照
從快照檔案恢復叢集資料
snapshot restore
$ ./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" snapshot restore snapshot.db --initial-cluster-token etcd-cluster --initial-advertise-peer-urls http://127.0.0.1:2379 --name etcd1 --initial-cluster 'etcd1=http://127.0.0.1:2379,etcd2=http://127.0.0.1:2479,etcd3=http://127.0.0.1:2579'
- --initial-cluster-token:指定新叢集的唯一識別符號(Token),用於區分不同的叢集
- --initial-advertise-peer-urls:指定當前節點的 peer URLs,用於叢集內部通訊
- --name:指定當前節點的名稱
- --initial-cluster:指定新叢集的初始成員列表,格式為
<name1>=<peer-url1>,<name2>=<peer-url2>,...
檢視快照資訊
snapshot status
./etcdctl --endpoints=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579 --user=root --password="111111" snapshot status file.db
# cf1550fb, 3, 3, 25 kB