使用Docker方式創建3節點的Etcd集羣


一、簡要說明
二、運行容器
三、驗證集羣
四、運行截圖
五、參考鏈接


一、簡要說明
     參考etcd官網文檔, 在node1、node2、node3三個節點上,分別運行etcd容器,創建etcd集羣,並通過另一臺機器驗證集羣的可用性。集羣信息如下:
     機器名     IP地址              角色

     node1    192.168.3.161   etcd節點
     node2    192.168.3.162   etcd節點
     node3    192.168.3.163   etcd節點
     nfs          192.168.3.167   驗證節點

二、運行容器
# 在節點 node1 上運行:
REGISTRY=quay.io/coreos/etcd
ETCD_VERSION=v3.3.8
TOKEN=my-etcd-token
CLUSTER_STATE=new
NAME_1=node1
NAME_2=node2
NAME_3=node3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
CLUSTER=${NAME_1}=
http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd
# 以上變量,三個節點相同

THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
docker run \
   -p 2379:2379 \
   -p 2380:2380 \
   --volume=${DATA_DIR}:/etcd-data \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd \
   --data-dir=/etcd-data --name ${THIS_NAME} \
   --initial-advertise-peer-urls
http://${THIS_IP}:2380 \
   --listen-peer-urls
http://0.0.0.0:2380 \
   --advertise-client-urls
http://${THIS_IP}:2379 \
   --listen-client-urls
http://0.0.0.0:2379 \
   --initial-cluster ${CLUSTER} \
   --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# 在節點 node2 上運行:
REGISTRY=quay.io/coreos/etcd
ETCD_VERSION=v3.3.8
TOKEN=my-etcd-token
CLUSTER_STATE=new
NAME_1=node1
NAME_2=node2
NAME_3=node3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
CLUSTER=${NAME_1}=
http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd
# 以上變量,三個節點相同

THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
docker run \
   -p 2379:2379 \
   -p 2380:2380 \
   --volume=${DATA_DIR}:/etcd-data \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd \
   --data-dir=/etcd-data --name ${THIS_NAME} \
   --initial-advertise-peer-urls
http://${THIS_IP}:2380 \
   --listen-peer-urls
http://0.0.0.0:2380 \
   --advertise-client-urls
http://${THIS_IP}:2379 \
   --listen-client-urls
http://0.0.0.0:2379 \
   --initial-cluster ${CLUSTER} \
   --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# 在節點 node3 上運行:
REGISTRY=quay.io/coreos/etcd
ETCD_VERSION=v3.3.8
TOKEN=my-etcd-token
CLUSTER_STATE=new
NAME_1=node1
NAME_2=node2
NAME_3=node3
HOST_1=192.168.3.161
HOST_2=192.168.3.162
HOST_3=192.168.3.163
CLUSTER=${NAME_1}=
http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd
# 以上變量,三個節點相同

THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
docker run \
   -p 2379:2379 \
   -p 2380:2380 \
   --volume=${DATA_DIR}:/etcd-data \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd \
   --data-dir=/etcd-data \
   --name ${THIS_NAME} \
   --initial-advertise-peer-urls
http://${THIS_IP}:2380 \
   --listen-peer-urls
http://0.0.0.0:2380 \
   --advertise-client-urls
http://${THIS_IP}:2379 \
   --listen-client-urls
http://0.0.0.0:2379 \
   --initial-cluster ${CLUSTER} \
   --initial-cluster-state ${CLUSTER_STATE} \
   --initial-cluster-token ${TOKEN}

三、驗證集羣
#在測試驗證節點NFS上,運行另一個etcd容器,
#以便使用其中的etcdctl命令行程序進行驗證

REGISTRY=quay.io/coreos/etcd
ETCD_VERSION=v3.3.8
docker run \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd

#進入容器,查詢集羣狀態,
#驗證存入數據、讀取數據

docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=
http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379 --write-out=table member list"
docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=
http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379 --write-out=table endpoint status"
docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=
http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379 --write-out=table endpoint health"
docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=
http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379  put url http://www.sina.com.cn"
docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379  get url"

四、運行截圖

圖1-節點node1上etcd容器運行日誌1

圖1-節點node1上etcd容器運行日誌1


圖2-節點node1上etcd容器運行日誌2

圖2-節點node1上etcd容器運行日誌2


圖3-節點node1上etcd容器運行日誌3

圖3-節點node1上etcd容器運行日誌3


圖4-節點node1上etcd容器運行日誌4

圖4-節點node1上etcd容器運行日誌4


圖5-在測試節點上,驗證集羣的狀態,存入、獲取數據,一切正常

圖5-在測試節點上,驗證集羣的狀態,存入、獲取數據,一切正常


五、參考鏈接:
ETCD版本(v3.1.18/v3.2.23/v3.3.8)
https://quay.io/repository/coreos/etcd?tag=latest&tab=tags

ETCD文檔(Run etcd clusters inside containers)
https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md#docker

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章