@nalan90
2018-03-15T01:14:56.000000Z
字数 11327
阅读 887
自动化运维
简介
etcd集群的组建有三种方式
本文以static的方式进行演示,通常集群的节点为奇数(3、5、7),一般部署3个即可。
环境准备
服务器
操作系统
node及etcd对应关系
| Node Name | IP | HostName | Etcd Name |
|---|---|---|---|
| node1 | 172.16.1.161 | dev-161 | infra0 |
| node2 | 172.16.1.162 | dev-162 | infra1 |
| node3 | 172.16.1.163 | dev-163 | infra2 |
| node4 | 172.16.1.164 | dev-164 | infra3 |
| node5 | 172.16.1.165 | dev-165 | infra4 |
目标
安装脚本
etcd --name infra0 --initial-advertise-peer-urls http://172.16.1.161:2380 \--data-dir /opt/data/etcd/data \--wal-dir /opt/data/etcd/wal \--listen-peer-urls http://172.16.1.161:2380 \--listen-client-urls http://172.16.1.161:2379,http://127.0.0.1:2379 \--advertise-client-urls http://172.16.1.161:2379 \--initial-cluster-token etcd-cluster \--initial-cluster infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380 \--initial-cluster-state new >> /opt/data/etcd/logs/infra0.log 2>&1 &
etcd --name infra1 --initial-advertise-peer-urls http://172.16.1.162:2380 \--data-dir /opt/data/etcd/data \--wal-dir /opt/data/etcd/wal \--listen-peer-urls http://172.16.1.162:2380 \--listen-client-urls http://172.16.1.162:2379,http://127.0.0.1:2379 \--advertise-client-urls http://172.16.1.162:2379 \--initial-cluster-token etcd-cluster \--initial-cluster infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380 \--initial-cluster-state new >> /opt/data/etcd/logs/etcd.log 2>&1 &
etcd --name infra2 --initial-advertise-peer-urls http://172.16.1.163:2380 \--data-dir /opt/data/etcd/data \--wal-dir /opt/data/etcd/wal \--listen-peer-urls http://172.16.1.163:2380 \--listen-client-urls http://172.16.1.163:2379,http://127.0.0.1:2379 \--advertise-client-urls http://172.16.1.163:2379 \--initial-cluster-token etcd-cluster \--initial-cluster infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380 \--initial-cluster-state new >> /opt/data/etcd/logs/etcd.log 2>&1 &
etcd API有v2、v3两个版本,v2提供更多的操作命令,因此我们通过v2进行集群的管理
[test@dev-162 ~]$ etcdctl -vetcdctl version: 3.2.15API version: 2## 设置ETCDCTL_API环境变量[test@dev-162 ~]$ echo "export ETCDCTL_API=2" >> ~/.bash_profile[test@dev-162 ~]$ source ~/.bash_profile[test@dev-162 ~]$ echo $ETCDCTL_API2[test@dev-162 ~]$ etcdctl member list88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=false905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=truecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[test@dev-162 ~]$ etcdctl cluster-healthmember 88e89ef57491e822 is healthy: got healthy result from http://172.16.1.161:2379member 905994ad8f9fbbcd is healthy: got healthy result from http://172.16.1.162:2379member cf5f03d58c1b363b is healthy: got healthy result from http://172.16.1.163:2379cluster is healthy
也可以通过页面访问


到现在为止三个节点的etcd已经可以正常访问
添加新的节点
[test@dev-162 ~]$ etcdctl member add infra3 http://172.16.1.164:2379Added member named infra3 with ID 206aaee1711610f7 to cluster## 执行完成生成如下环境变量ETCD_NAME="infra3"ETCD_INITIAL_CLUSTER="infra3=http://172.16.1.164:2379,infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380"ETCD_INITIAL_CLUSTER_STATE="existing"[test@dev-162 ~]$ etcdctl member list## 新添加的节点还处于未启动状态5922e75caa279deb[unstarted]: peerURLs=http://172.16.1.164:237988e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=false905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=truecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[test@dev-162 ~]$ etcdctl cluster-healthmember 5922e75caa279deb is unreachable: no available published client urlsmember 88e89ef57491e822 is healthy: got healthy result from http://172.16.1.161:2379member 905994ad8f9fbbcd is healthy: got healthy result from http://172.16.1.162:2379member cf5f03d58c1b363b is healthy: got healthy result from http://172.16.1.163:2379cluster is healthy
## 导入以上生成的环境变量[test@dev-164 ~]$ export ETCD_NAME="infra3"[test@dev-164 ~]$ export ETCD_INITIAL_CLUSTER="infra3=http://172.16.1.164:2379,infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380"[test@dev-164 ~]$ export ETCD_INITIAL_CLUSTER_STATE="existing"[test@dev-164 ~]$ etcd --data-dir /opt/data/etcd/data \--wal-dir /opt/data/etcd/wal \--listen-client-urls http://172.16.1.164:2379,http://127.0.0.1:2379 \--advertise-client-urls http://172.16.1.164:2379 >> /opt/data/etcd/logs/etcd.log 2>&1 &[test@dev-164 ~]$ ps -ef | grep etcdtest 5243 4999 7 13:17 pts/0 00:00:00 etcd --data-dir /opt/data/etcd/data --wal-dir /opt/data/etcd/wal --listen-client-urls http://172.16.1.164:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.1.164:2379
[test@dev-162 ~]$ etcdctl member add infra4 http://172.16.1.165:2379Added member named infra4 with ID 4598a311935f7513 to cluster## 执行完成生成如下环境变量ETCD_NAME="infra4"ETCD_INITIAL_CLUSTER="infra4=http://172.16.1.165:2379,infra3=http://172.16.1.164:2379,infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380"ETCD_INITIAL_CLUSTER_STATE="existing"[test@dev-162 ~]$ etcdctl member list## 新添加的节点还处于未启动状态4598a311935f7513[unstarted]: peerURLs=http://172.16.1.165:23795922e75caa279deb: name=infra3 peerURLs=http://172.16.1.164:2379 clientURLs=http://172.16.1.164:2379 isLeader=false88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=false905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=truecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[test@dev-162 ~]$ etcdctl cluster-healthmember 4598a311935f7513 is unreachable: no available published client urlsmember 5922e75caa279deb is healthy: got healthy result from http://172.16.1.164:2379member 88e89ef57491e822 is healthy: got healthy result from http://172.16.1.161:2379member 905994ad8f9fbbcd is healthy: got healthy result from http://172.16.1.162:2379member cf5f03d58c1b363b is healthy: got healthy result from http://172.16.1.163:2379cluster is healthy
## 导入以上生成的环境变量[test@dev-165 ~]$ export ETCD_NAME="infra4"[test@dev-165 ~]$ export ETCD_INITIAL_CLUSTER="infra4=http://172.16.1.165:2379,infra3=http://172.16.1.164:2379,infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380"[test@dev-165 ~]$ export ETCD_INITIAL_CLUSTER_STATE="existing"[test@dev-165 ~]$ etcd --data-dir /opt/data/etcd/data \--wal-dir /opt/data/etcd/wal \--listen-client-urls http://172.16.1.165:2379,http://127.0.0.1:2379 \--advertise-client-urls http://172.16.1.165:2379 >> /opt/data/etcd/logs/etcd.log 2>&1 &[test@dev-165 ~]$ ps -ef | grep etcdtest 2973 2810 14 13:58 pts/0 00:00:00 etcd --data-dir /opt/data/etcd/data --wal-dir /opt/data/etcd/wal --listen-client-urls http://172.16.1.165:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.1.165:2379
[test@dev-162 ~]$ etcdctl member list4598a311935f7513: name=infra4 peerURLs=http://172.16.1.165:2379 clientURLs=http://172.16.1.165:2379 isLeader=false5922e75caa279deb: name=infra3 peerURLs=http://172.16.1.164:2379 clientURLs=http://172.16.1.164:2379 isLeader=false88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=false905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=truecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[test@dev-162 ~]$ etcdctl cluster-healthmember 4598a311935f7513 is healthy: got healthy result from http://172.16.1.165:2379member 5922e75caa279deb is healthy: got healthy result from http://172.16.1.164:2379member 88e89ef57491e822 is healthy: got healthy result from http://172.16.1.161:2379member 905994ad8f9fbbcd is healthy: got healthy result from http://172.16.1.162:2379member cf5f03d58c1b363b is healthy: got healthy result from http://172.16.1.163:2379cluster is healthy
node4、node5两个节点正常添加至etcd集群,五个节点正常访问
删除节点
[test@dev-162 ~]$ etcdctl member --helpNAME:etcdctl member - member add, remove and list subcommandsUSAGE:etcdctl member command [command options] [arguments...]COMMANDS:list enumerate existing cluster membersadd add a new member to the etcd clusterremove remove an existing member from the etcd clusterupdate update an existing member in the etcd clusterOPTIONS:--help, -h show help## 当前有五个节点[test@dev-162 ~]$ etcdctl member list4598a311935f7513: name=infra4 peerURLs=http://172.16.1.165:2379 clientURLs=http://172.16.1.165:2379 isLeader=false5922e75caa279deb: name=infra3 peerURLs=http://172.16.1.164:2379 clientURLs=http://172.16.1.164:2379 isLeader=false88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=false905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=truecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false## 删除infra4[test@dev-162 ~]$ etcdctl member remove 4598a311935f7513Removed member 4598a311935f7513 from cluster## 再次查看仅剩四个节点[test@dev-162 ~]$ etcdctl member list5922e75caa279deb: name=infra3 peerURLs=http://172.16.1.164:2379 clientURLs=http://172.16.1.164:2379 isLeader=false88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=false905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=truecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[test@dev-162 ~]$ etcdctl cluster-healthmember 5922e75caa279deb is healthy: got healthy result from http://172.16.1.164:2379member 88e89ef57491e822 is healthy: got healthy result from http://172.16.1.161:2379member 905994ad8f9fbbcd is healthy: got healthy result from http://172.16.1.162:2379member cf5f03d58c1b363b is healthy: got healthy result from http://172.16.1.163:2379cluster is healthy## 删除infra3之前,etcd进程正在运行[test@dev-164 ~]$ ps -ef | grep etcdtest 5243 4999 6 13:17 pts/0 00:03:02 etcd --data-dir /opt/data/etcd/data --wal-dir /opt/data/etcd/wal --listen-client-urls http://172.16.1.164:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.1.164:2379## 删除节点infra3[test@dev-162 ~]$ etcdctl member remove 5922e75caa279debRemoved member 5922e75caa279deb from cluster[test@dev-162 ~]$ etcdctl member list88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=false905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=truecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[test@dev-162 ~]$ etcdctl cluster-healthmember 88e89ef57491e822 is healthy: got healthy result from http://172.16.1.161:2379member 905994ad8f9fbbcd is healthy: got healthy result from http://172.16.1.162:2379member cf5f03d58c1b363b is healthy: got healthy result from http://172.16.1.163:2379cluster is healthy## 删除infra3之后,node4上的etcd进程停止运行[test@dev-164 ~]$ ps -ef | grep etcdtest 5351 5327 0 14:06 pts/1 00:00:00 grep --color=auto etcd
从集群中删除指定的etcd节点后,相应服务器上的etcd进程将会停止运行