基于docker-compose编排了一组etcd集群,如果想把其中一个节点替换掉应该怎么操作呢,网上有一些质量非常高的技术文章,但是有一些细节地方没有说清楚。
先把我的docker-compose.yml帖上来。
version: '3'
services:
etcd1:
image: "quay.io/coreos/etcd:latest"
network_mode: "host"
volumes:
- /data0/etcd/etcd1/:/etcd_data/:rw
command:
- etcd
- --name
- etcd1
- --data-dir
- /etcd_data
- --listen-peer-urls
- http://${DOCKER_IIP}:2380
- --listen-client-urls
- http://${DOCKER_IIP}:2379,http://127.0.0.1:2379
- --advertise-client-urls
- http://${DOCKER_IIP}:2379
- --initial-advertise-peer-urls
- http://${DOCKER_IIP}:2380
- --discovery
- http://discovery.etcd.io/TTTTTTTTTTTTTTTTTTTTTTT
下面来进行替换节点的操作,先查看一下节点列表
/ # etcdctl member list
1ca4fc0d4b2c9fa2: name=etcd1 peerURLs=http://192.168.56.42:2380 clientURLs=http://192.168.56.42:2379 isLeader=true
4cf04322e0117c69: name=etcd4 peerURLs=http://192.168.56.33:2380 clientURLs=http://192.168.56.33:2379 isLeader=false
6dc5120e6c9ba574: name=etcd3 peerURLs=http://192.168.56.42:2382 clientURLs=http://192.168.56.42:2381 isLeader=false
先拿掉etcd4。
/ # etcdctl member remove 4cf04322e0117c69
Removed member 4cf04322e0117c69 from cluster
再进行添加操作。
/ # etcdctl member add etcd2 http://192.168.56.33:2380
Added member named etcd2 with ID d401a8b3607279fc to cluster
ETCD_NAME="etcd2"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.56.42:2380,etcd3=http://192.168.56.42:2382,etcd2=http://192.168.56.33:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
接下来是重点了,把这几个环境变量记录一下,修改一下原来的docker-compose.yml,进行新节点启动。
version: '3'
services:
etcd2:
image: "quay.io/coreos/etcd:latest"
network_mode: "host"
volumes:
- /data0/etcd/etcd2/:/etcd_data/:rw
command:
- etcd
- --name
- etcd2
- --data-dir
- /etcd_data
- --listen-peer-urls
- http://${DOCKER_IIP}:2380
- --listen-client-urls
- http://${DOCKER_IIP}:2379,http://127.0.0.1:2379
- --advertise-client-urls
- http://${DOCKER_IIP}:2379
- --initial-advertise-peer-urls
- http://${DOCKER_IIP}:2380
#- --discovery
#- http://discovery.etcd.io/df65ece6e8eef0db7548c7a51adb894e
- --initial-cluster-state
- existing
- --initial-cluster
- etcd1=http://192.168.56.42:2380,etcd2=http://192.168.56.33:2380,etcd3=http://192.168.56.42:2382
将原来的–discovery临时注释,添加下面几行,然后进行节点启动,节点启动成功之后,把上面这一次临时修改还原就可以。