一 環境准備
ntp配置:略 #建議配置ntp服務,保證時間一致性
etcd版本:v3.3.9
防火牆及SELinux:關閉防火牆和SELinux
1 # hostnamectl set-hostname etcd1.example.com 2 # hostnamectl set-hostname etcd2.example.com 3 # hostnamectl set-hostname etcd3.example.com
二 docker etcd集群部署
2.1 安裝docker
見《docker版本及安裝》。
2.2 etcd基礎配置
1 # mkdir -p /var/log/etcd/ #建議創建etcd日志保存目錄 2 # mkdir -p /data/etcd #建議創建單獨的etcd數據目錄 3 # REGISTRY=gcr.io/etcd-development/etcd #配置etcd鏡像的倉庫,不推薦使用 4 # REGISTRY=quay.io/coreos/etcd #建議使用此倉庫 5 # ETCD_VERSION=latest #設置etcd版本 6 # TOKEN=my-etcd-01 #設置唯一集群ID 7 # CLUSTER_STATE=new #置為新建集群 8 # NAME_1=etcd1 9 # NAME_2=etcd2 10 # NAME_3=etcd3 #設置三個節點的name 11 # HOST_1=172.24.8.71 12 # HOST_2=172.24.8.72 13 # HOST_3=172.24.8.73 #設置三個節點的IP 14 # CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380 #設置集群所有節點信息 15 # DATA_DIR=/data/etcd #設置集群etcd數據節點
提示:以上所有操作需要在所有節點操作。
2.3 啟動docker etcd集群
1 [root@etcd1 ~]# THIS_NAME=${NAME_1} 2 [root@etcd1 ~]# THIS_IP=${HOST_1} 3 [root@etcd1 ~]# docker run \ 4 -p 2379:2379 \ 5 -p 2380:2380 \ 6 --volume=${DATA_DIR}:/etcd-data \ 7 --name etcd ${REGISTRY}:${ETCD_VERSION} \ 8 /usr/local/bin/etcd \ 9 --data-dir=/etcd-data --name ${THIS_NAME} \ 10 --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \ 11 --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \ 12 --initial-cluster ${CLUSTER} \ 13 --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN} 14 15 [root@etcd2 ~]# THIS_NAME=${NAME_2} 16 [root@etcd2 ~]# THIS_IP=${HOST_2} 17 [root@etcd2 ~]# docker run \ 18 -p 2379:2379 \ 19 -p 2380:2380 \ 20 --volume=${DATA_DIR}:/etcd-data \ 21 --name etcd ${REGISTRY}:${ETCD_VERSION} \ 22 /usr/local/bin/etcd \ 23 --data-dir=/etcd-data --name ${THIS_NAME} \ 24 --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \ 25 --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \ 26 --initial-cluster ${CLUSTER} \ 27 --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN} 28 29 [root@etcd3 ~]# THIS_NAME=${NAME_3} 30 [root@etcd3 ~]# THIS_IP=${HOST_3} 31 [root@etcd3 ~]# docker run \ 32 -p 2379:2379 \ 33 -p 2380:2380 \ 34 --volume=${DATA_DIR}:/etcd-data \ 35 --name etcd ${REGISTRY}:${ETCD_VERSION} \ 36 /usr/local/bin/etcd \ 37 --data-dir=/etcd-data --name ${THIS_NAME} \ 38 --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \ 39 --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \ 40 --initial-cluster ${CLUSTER} \ 41 --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
提示:quay.io/coreos/etcd鏡像國內可能無法pull,可在國外節點pull,然后scp至集群節點。
2.4 確認驗證
1 [root@etcd1 ~]# docker ps
1 [root@etcd2 ~]# docker ps
1 [root@etcd3 ~]# docker ps
1 [root@etcd1 ~]# docker exec -it 21e6cf6e5e89 /usr/local/bin/etcdctl cluster-health
1 [root@etcd1 ~]# netstat -nltp | grep 2380