搭建集群之前首先准備兩台安裝了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。