Docker下ETCD集羣搭建
https://www.cnblogs.com/eagle6688/p/8287907.html
搭建集羣之前首先準備兩臺安裝了CentOS 7的主機,並在其上安裝好Docker。
Master 10.100.97.46
Node 10.100.97.64
ETCD集羣搭建有三種方式,分別是Static(靜態方式),Discovery(服務發現方式),DNS discovery (DNS發現),官方文檔https://coreos.com/etcd/docs/latest/op-guide/clustering.html。
比較三種方式,Static方式最方便簡單。我們在這裏使用添加主機的方式搭建集羣,先假裝Master機器不知道Node機器的存在,然後再把Node節點添加進來。
1. 首先獲取ETCD鏡像,兩臺主機都有(以下簡稱two)。
該鏡像的版本信息:https://hub.docker.com/r/eagle6688/etcd/
docker pull eagle6688/etcd
2. 開放ETCD通信使用的接口,two:
sudo firewall-cmd --zone=public --add-port=2379/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2380/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
最後那行代碼顯示已經打開的所有端口。
3. 創建數據掛載目錄,two:
sudo mkdir -p /var/data/etcd
4. 在Master機執行:
docker run \
-it \
-p 2379:2379 \
-p 2380:2380 \
-v /var/data/etcd:/data \
--name etcd-master \
eagle6688/etcd \
--name etcd-master \
--data-dir /data \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--initial-advertise-peer-urls http://10.100.97.46:2380 \
--initial-cluster etcd-master=http://10.100.97.46:2380 \
--initial-cluster-state new \
--initial-cluster-token eagle-cluster \
--advertise-client-urls http://10.100.97.46:2379
注意,第8行我們給etcd節點起的名字要跟13行的name相同,配置node節點時類似。此外,這裏的配置僅僅跟master節點自身有關,此時它還不知道有node的存在。
5. 測試master節點:
分別在master節點和node節點執行下面的語句以測試master節點的有效性:
curl http://10.100.97.46:2379/v2/members
該語句應該返回包含master節點信息的json字符串。
6. 添加node節點
在node機調用master的api添加自己
curl http://10.100.97.46:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs":["http://10.100.97.64:2380"]}'
此時,master節點會暫停下來等待node節點的加入。
7. 啓動node節點上的etcd
docker run \
-it \
-p 2379:2379 \
-p 2380:2380 \
-v /var/data/etcd:/data \
--name etcd-G510 \
eagle6688/etcd \
--name etcd-node \
--data-dir /data \
--listen-peer-urls http://0.0.0.0:2380 \
--listen-client-urls http://0.0.0.0:2379 \
--initial-advertise-peer-urls http://10.100.97.64:2380 \
--initial-cluster etcd-master=http://10.100.97.46:2380,etcd-node=http://10.100.97.64:2380 \
--initial-cluster-state existing \
--initial-cluster-token eagle-cluster \
--advertise-client-urls http://10.100.97.64:2379
注意,initial-cluster要包含所有節點,initial-cluster-state必須是existing。