@nalan90
2019-10-27T10:29:47.000000Z
字数 12456
阅读 963
自动化运维
简介
etcd集群的组建有三种方式
本文以static的方式进行演示,通常集群的节点为奇数(3、5、7),一般部署3个即可。
环境准备
服务器
操作系统
## 安装etcdwork:~ ys$ for item in 161 162 163 164 165; do ssh root@dev-$item 'yum install -y etcd';doneLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile* base: mirrors.aliyun.com* epel: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.aliyun.com* updates: mirrors.aliyun.comResolving Dependencies--> Running transaction check---> Package etcd.x86_64 0:3.2.15-1.el7 will be installed--> Finished Dependency ResolutionInstalled:etcd.x86_64 0:3.2.15-1.el7Complete!......## 创建etcd目录work:~ ys$ for item in 161 162 163 164 165; do ssh root@dev-$item 'mkdir -p /opt/data/etcd/data && mkdir -p /opt/data/etcd/wal && mkdir -p /opt/data/etcd/logs && chown -R etcd:etcd /opt/data/etcd';done
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 |
目标
修改配置文件(/etc/etcd/etcd.conf)
ETCD_DATA_DIR="/opt/data/etcd/data"ETCD_WAL_DIR="/opt/data/etcd/wal"ETCD_LISTEN_PEER_URLS="http://172.16.1.161:2380"ETCD_LISTEN_CLIENT_URLS="http://172.16.1.161:2379,http://127.0.0.1:2379"ETCD_NAME="infra0"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.1.161:2380"ETCD_ADVERTISE_CLIENT_URLS="http://172.16.1.161:2379"ETCD_INITIAL_CLUSTER="infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_DATA_DIR="/opt/data/etcd/data"ETCD_WAL_DIR="/opt/data/etcd/wal"ETCD_LISTEN_PEER_URLS="http://172.16.1.162:2380"ETCD_LISTEN_CLIENT_URLS="http://172.16.1.162:2379,http://127.0.0.1:2379"ETCD_NAME="infra1"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.1.162:2380"ETCD_ADVERTISE_CLIENT_URLS="http://172.16.1.162:2379"ETCD_INITIAL_CLUSTER="infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_DATA_DIR="/opt/data/etcd/data"ETCD_WAL_DIR="/opt/data/etcd/wal"ETCD_LISTEN_PEER_URLS="http://172.16.1.163:2380"ETCD_LISTEN_CLIENT_URLS="http://172.16.1.163:2379,http://127.0.0.1:2379"ETCD_NAME="infra2"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.1.163:2380"ETCD_ADVERTISE_CLIENT_URLS="http://172.16.1.163:2379"ETCD_INITIAL_CLUSTER="infra0=http://172.16.1.161:2380,infra1=http://172.16.1.162:2380,infra2=http://172.16.1.163:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"
[root@dev-161 ~]# systemctl start etcd[root@dev-161 ~]# systemctl enable etcd[root@dev-162 ~]# systemctl start etcd[root@dev-162 ~]# systemctl enable etcd[root@dev-163 ~]# systemctl start etcd[root@dev-163 ~]# systemctl enable etcd
etcd API有v2、v3两个版本,v2提供更多的操作命令,因此我们通过v2进行集群的管理
[root@dev-161 ~]# etcdctl -vetcdctl version: 3.2.15API version: 2## 设置ETCDCTL_API环境变量[root@dev-162 ~]$ echo "export ETCDCTL_API=2" >> ~/.bash_profile[root@dev-162 ~]$ source ~/.bash_profile[root@dev-162 ~]$ echo $ETCDCTL_API2[root@dev-161 ~]# etcdctl member list88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=true905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=falsecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[root@dev-161 ~]# 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已经可以正常访问
添加新的节点
[root@dev-161 ~]# etcdctl member add infra3 http://172.16.1.164:2379Added member named infra3 with ID 12ceea0b7048b928 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"[root@dev-161 ~]# etcdctl member list12ceea0b7048b928[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=true905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=falsecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[root@dev-161 ~]# etcdctl cluster-healthmember 12ceea0b7048b928 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
## 修改配置如下ETCD_DATA_DIR="/opt/data/etcd/data"ETCD_WAL_DIR="/opt/data/etcd/wal"ETCD_LISTEN_PEER_URLS="http://172.16.1.164:2380"ETCD_LISTEN_CLIENT_URLS="http://172.16.1.164:2379,http://127.0.0.1:2379"ETCD_NAME="infra3"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.1.164:2380"ETCD_ADVERTISE_CLIENT_URLS="http://172.16.1.164:2379"## 上面生成的环境变量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_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="existing"## 启动etcd[root@dev-164 ~]# systemctl start etcd[root@dev-164 ~]# systemctl enable etcdCreated symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.[root@dev-164 ~]# systemctl status etcd● etcd.service - Etcd ServerLoaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2018-03-21 09:53:01 CST; 52s agoMain PID: 3047 (etcd)CGroup: /system.slice/etcd.service└─3047 /usr/bin/etcd --name=infra3 --data-dir=/opt/data/etcd/data --listen-client-urls=http://172.16.1.164:2379,http://127.0.0.1:2379
[root@dev-161 ~]# etcdctl member add infra4 http://172.16.1.165:2379Added member named infra4 with ID 7ca9bd7d5389fec7 to clusterETCD_NAME="infra4"ETCD_INITIAL_CLUSTER="infra3=http://172.16.1.164:2379,infra4=http://172.16.1.165: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"[root@dev-161 ~]# etcdctl member list12ceea0b7048b928: name=infra3 peerURLs=http://172.16.1.164:2379 clientURLs=http://172.16.1.164:2379 isLeader=false7ca9bd7d5389fec7[unstarted]: peerURLs=http://172.16.1.165:237988e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=true905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=falsecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[root@dev-161 ~]# etcdctl cluster-healthmember 12ceea0b7048b928 is healthy: got healthy result from http://172.16.1.164:2379member 7ca9bd7d5389fec7 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
## 修改配置如下ETCD_DATA_DIR="/opt/data/etcd/data"ETCD_WAL_DIR="/opt/data/etcd/wal"ETCD_LISTEN_PEER_URLS="http://172.16.1.165:2380"ETCD_LISTEN_CLIENT_URLS="http://172.16.1.165:2379,http://127.0.0.1:2379"ETCD_NAME="infra4"##[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.1.165:2380"ETCD_ADVERTISE_CLIENT_URLS="http://172.16.1.165:2379"ETCD_INITIAL_CLUSTER="infra3=http://172.16.1.164:2379,infra4=http://172.16.1.165: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_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="existing"## 启动etcd[root@dev-165 ~]# systemctl start etcd[root@dev-165 ~]# systemctl enable etcdCreated symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.[root@dev-165 ~]# systemctl status etcd● etcd.service - Etcd ServerLoaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2018-03-21 10:01:17 CST; 7s agoMain PID: 3073 (etcd)CGroup: /system.slice/etcd.service└─3073 /usr/bin/etcd --name=infra4 --data-dir=/opt/data/etcd/data --listen-client-urls=http://172.16.1.165:2379,http://127.0.0.1:2379
[root@dev-161 ~]# etcdctl member list12ceea0b7048b928: name=infra3 peerURLs=http://172.16.1.164:2379 clientURLs=http://172.16.1.164:2379 isLeader=false7ca9bd7d5389fec7: name=infra4 peerURLs=http://172.16.1.165:2379 clientURLs=http://172.16.1.165:2379 isLeader=false88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=true905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=falsecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[root@dev-161 ~]# etcdctl cluster-healthmember 12ceea0b7048b928 is healthy: got healthy result from http://172.16.1.164:2379member 7ca9bd7d5389fec7 is healthy: got healthy result from http://172.16.1.165: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[root@dev-161 ~]# etcdctl member list12ceea0b7048b928: name=infra3 peerURLs=http://172.16.1.164:2379 clientURLs=http://172.16.1.164:2379 isLeader=false7ca9bd7d5389fec7: name=infra4 peerURLs=http://172.16.1.165:2379 clientURLs=http://172.16.1.165:2379 isLeader=false88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=true905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=falsecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false[root@dev-161 ~]# etcdctl cluster-healthmember 12ceea0b7048b928 is healthy: got healthy result from http://172.16.1.164:2379member 7ca9bd7d5389fec7 is healthy: got healthy result from http://172.16.1.165: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、infra4两个节点[root@dev-161 ~]# etcdctl member remove 7ca9bd7d5389fec7Removed member 7ca9bd7d5389fec7 from cluster[root@dev-161 ~]# etcdctl member remove 12ceea0b7048b928Removed member 12ceea0b7048b928 from cluster[root@dev-161 ~]# etcdctl member list88e89ef57491e822: name=infra0 peerURLs=http://172.16.1.161:2380 clientURLs=http://172.16.1.161:2379 isLeader=true905994ad8f9fbbcd: name=infra1 peerURLs=http://172.16.1.162:2380 clientURLs=http://172.16.1.162:2379 isLeader=falsecf5f03d58c1b363b: name=infra2 peerURLs=http://172.16.1.163:2380 clientURLs=http://172.16.1.163:2379 isLeader=false## 查看infra3、infra4两个节点的状态[root@dev-164 ~]# systemctl status etcd● etcd.service - Etcd ServerLoaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)Active: inactive (dead) since Thu 2018-03-22 09:20:36 CST; 16min agoMain PID: 3047 (code=exited, status=0/SUCCESS)[root@dev-165 ~]# systemctl status etcd● etcd.service - Etcd ServerLoaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)Active: inactive (dead) since Thu 2018-03-22 09:20:28 CST; 14min agoMain PID: 3073 (code=exited, status=0/SUCCESS)
从集群中删除指定的etcd节点后,相应服务器上的etcd进程将会停止运行