ETCD 是一個分佈式、可靠的 key-value 存儲的分佈式系統,用於存儲分佈式系統中的關鍵數據;固然,它不單單用於存儲,還提供配置共享及服務發現;基於Go語言實現。html
簡單:定義明確,面向用戶的API(gRPC)
安全:具備可選客戶端證書身份驗證的自動TLS
快速:基準10,000次寫入/秒
可靠:使用Raft正確分發node
etcd中存儲了集羣的元數據信息,集羣狀態和網絡配置,在高可用集羣中每每會採用奇數節點(最少3個)的集羣。git
etcd提供了proxy功能,即代理功能,etcd能夠代理的方式來運行。github
etcd代理能夠運行在每一臺主機,在這種代理模式下,etcd的做用就是一個反向代理,把客戶端的etcd請求轉發到真正的etcd集羣。這種方式既增強了集羣的彈性,又不會下降集羣的寫的性能。shell
在rainbond集羣中,除管理節點之外的其餘節點都經過etcd-proxy方式與etcd服務端創建鏈接。安全
etcd 提供了 etcdctl 命令行工具 和 HTTP API 兩種交互方法。etcdctl命令行工具用 go 語言編寫,也是對 HTTP API 的封裝,平常使用起來也更容易。因此這裏咱們主要使用 etcdctl 命令行工具演示。性能優化
export ETCDCTL_API=3 etcdctl version
etcdctl member list
etcdctl endpoint health
member add 添加成員 member remove 刪除成員 member update 更新集羣中的一個成員 member list 列出及集羣中的成員
設置鍵的值的命令 key 到 value:網絡
$ etcdctl put key value OK
etcdctl get key
上述命令同時返回 key 和 value,若是隻讀取 key 對應的值,則使用如下命令運維
etcdctl get key --print-value-only
按key前綴查找rainbond集羣全部節點信息分佈式
etcdctl get /rainbond/node --prefix
etcdctl watch key
刪除 key 爲 key的命令
$ etcdctl del key 1
刪除具備前綴的鍵的命令:
etcdctl del --prefix key
$ etcdctl put key testvalue OK $ etcdctl get key key testvalue
端口 | 端口說明 |
---|---|
2380 | 和集羣中其餘節點通訊 |
2379 | 提供 HTTP API 服務,供客戶端交互 |
備份
因爲etcd的強一致性,備份一個節點的數據便可,生產環境中,爲了防止單節點異常沒有生成備份,能夠多加幾個節點
export ETCDCTL_API=3 etcdctl --endpoints=http://節點IP:2379 snapshot save /etcd_bak/snap-$(date +%Y%m%d%H%M).db
恢復
etcdctl snapshot restore snapshot.db --name m3 --data-dir=/etcd_bak/snap-...db
ETCD 項目地址:https://github.com/etcd-io/etcd
ETCD官方文檔:https://etcd.io/
ETCD官方文檔中文版:https://doczhcn.gitbook.io/etcd/
CoreOS實戰剖析ETCD: https://www.infoq.cn/article/coreos-analyse-etcd/
ETCD性能優化實踐:https://www.kubernetes.org.cn/6295.html
ETCD災難恢復: https://skyao.gitbooks.io/learning-etcd3/content/documentation/op-guide/recovery.html