etcd集群搭建(rpm包)

etcd 集群搭建(rpm包)

etcd 默认使用端口 2379 和 2380,2379用于接收客户端请求,2380 用于 etcd 节点之间的对等通信。
使用三个节点组建 etcd 集群

主机名IP地址备注
etcd1192.168.1.11新建集群
etcd2192.168.1.12新建集群
etcd3192.168.1.13加入集群
参数说明
ETCD_DATA_DIR数据存储目录
ETCD_LISTEN_PEER_URLS监听地址,用于节点之间通信的url,可多个,集群内数据交互(如选举,数据同步等)
ETCD_LISTEN_CLIENT_URLS监听地址,用于客户端通信的url,同样可以监听多个
ETCD_NAMEetcd集群中的节点名,这里可以随意,不重复就行
ETCD_INITIAL_ADVERTISE_PEER_URLS在集群中宣告用于节点之间通信的url,节点间将以该值进行通信
ETCD_ADVERTISE_CLIENT_URLS在集群中宣告使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信
ETCD_INITIAL_CLUSTER集群中的成员集合
ETCD_INITIAL_CLUSTER_STATE初始化集群的标志,新建使用 new,加入一个存在的集群为 existing
[root@etcd1 ~]# cat /etc/hosts
192.168.1.11  etcd1
192.168.1.12  etcd2
192.168.1.13  etcd3
创建2节点集群
--------------------配置 etcd1 节点----------------------#
# 清空数据,修改配置文件,组建 2 节点集群
[root@etcd1 ~]# yum install ./etcd-3.3.11-2.el7.centos.x86_64.rpm
[root@etcd3 ~]# rpm -ql etcd-3.3.11-2.el7.centos.x86_64
/etc/etcd
/etc/etcd/etcd.conf
/usr/bin/etcd
/usr/bin/etcdctl
/usr/lib/systemd/system/etcd.service

[root@etcd1 ~]# vim /etc/etcd/etcd.conf
ETCD_NAME="etcd1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.11:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.11:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd1:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://etcd1:2380,etcd2=http://etcd2:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
[root@etcd1 ~]# systemctl start etcd
# 会报错卡住,等待第二节点加入
#--------------------配置 etcd2 节点----------------------#
[root@etcd2 ~]# yum install ./etcd-3.3.11-2.el7.centos.x86_64.rpm
[root@etcd2 ~]# vim /etc/etcd/etcd.conf
ETCD_NAME="etcd2"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.12:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.12:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd2:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd2:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://etcd1:2380,etcd2=http://etcd2:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
[root@etcd2 ~]# systemctl enable --now etcd
[root@etcd1 ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..2}:2379 member list -w table
#此时两个节点都不是
+------------------+---------+-------+-------------------+-------------------+------------+
|        ID        | STATUS  | NAME  |    PEER ADDRS     |   CLIENT ADDRS    | IS LEARNER |
+------------------+---------+-------+-------------------+-------------------+------------+
| ade526d28b1f92f7 | started | etcd1 | http://etcd1:2380 | http://etcd1:2379 |      false |
| d282ac2ce600c1ce | started | etcd2 | http://etcd2:2380 | http://etcd2:2379 |      false |
+------------------+---------+-------+-------------------+-------------------+------------+
[root@etcd1 ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..2}:2379 endpoint status -w table
+------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|  ENDPOINT  |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| etcd1:2379 | ade526d28b1f92f7 |  3.3.11 |   20 kB |      true |      false |       325 |          7 |                  0 |        |
| etcd2:2379 | d282ac2ce600c1ce |  3.3.11 |   20 kB |     false |      false |       325 |          7 |                  0 |        |
+------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
加入集群
#--------------------节点 etcd3 加入集群------------------#
[root@etcd3 ~]# yum install ./etcd-3.3.11-2.el7.centos.x86_64.rpm
[root@etcd3 ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd1:2379 member list -w table
+------------------+---------+-------+-------------------+-------------------+
|        ID        | STATUS  | NAME  |    PEER ADDRS     |   CLIENT ADDRS    |
+------------------+---------+-------+-------------------+-------------------+
| ade526d28b1f92f7 | started | etcd1 | http://etcd1:2380 | http://etcd1:2379 |
| d282ac2ce600c1ce | started | etcd2 | http://etcd2:2380 | http://etcd2:2379 |
+------------------+---------+-------+-------------------+-------------------+
[root@etcd3 ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..2}:2379 member add etcd3 --peer-urls=http://etcd3:2380
Member eb350db95646e6bc added to cluster 8dd6792a88149148

ETCD_NAME="etcd3"
ETCD_INITIAL_CLUSTER="etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd3:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

[root@etcd3 ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd1:2379 member list -w table
+------------------+-----------+-------+-------------------+-------------------+
|        ID        |  STATUS   | NAME  |    PEER ADDRS     |   CLIENT ADDRS    |
+------------------+-----------+-------+-------------------+-------------------+
| ade526d28b1f92f7 |   started | etcd1 | http://etcd1:2380 | http://etcd1:2379 |
| d282ac2ce600c1ce |   started | etcd2 | http://etcd2:2380 | http://etcd2:2379 |
| c931e7bd0b007b9d | unstarted |       | http://etcd3:2380 |                   |
+------------------+-----------+-------+-------------------+-------------------+
[root@etcd3 ~]# vim /etc/etcd/etcd.conf    
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.13:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.13:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd3:2379"

ETCD_NAME="etcd3"
ETCD_INITIAL_CLUSTER="etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd3:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
[root@etcd3 ~]# rm -rf /var/lib/etcd/default.etcd
[root@etcd3 ~]# systemctl enable --now etcd
[root@etcd3 ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..3}:2379 endpoint status -w table
+------------+------------------+---------+---------+-----------+-----------+------------+
|  ENDPOINT  |        ID        | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
+------------+------------------+---------+---------+-----------+-----------+------------+
| etcd1:2379 | ade526d28b1f92f7 |  3.3.11 |   20 kB |      true |        31 |         16 |
| etcd2:2379 | d282ac2ce600c1ce |  3.3.11 |   20 kB |     false |        31 |         16 |
| etcd3:2379 | ce114a74101335a9 |  3.3.11 |   20 kB |     false |        31 |         16 |
+------------+------------------+---------+---------+-----------+-----------+------------+

集群数据备份

[root@client ~]# vim /etc/hosts
#::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.1.10  client
192.168.1.11  etcd1
192.168.1.12  etcd2
192.168.1.13  etcd3
[root@client ~]# yum install ./etcd-3.3.11-2.el7.centos.x86_64.rpm
[root@client ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..3}:2379 put hello world
OK
[root@client ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..3}:2379 get hello
hello
world
[root@client ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..3}:2379 snapshot save backup.db
Snapshot saved at backup.db
[root@client ~]# ETCDCTL_API=3 etcdctl snapshot status backup.db -w table
+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| f3b7530f |        4 |          9 |      20 kB |
+----------+----------+------------+------------+

集群数据恢复

#--------------------删除集群数据------------------#
[root@client ~]# ssh etcd1 'systemctl stop etcd && rm -rf /var/lib/etcd/default.etcd'
[root@client ~]# ssh etcd2 'systemctl stop etcd && rm -rf /var/lib/etcd/default.etcd'
[root@client ~]# ssh etcd3 'systemctl stop etcd && rm -rf /var/lib/etcd/default.etcd'
#--------------------恢复集群数据------------------#
[root@client ~]# ETCDCTL_API=3 etcdctl snapshot restore backup.db --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 --name=etcd1 --initial-advertise-peer-urls="http://etcd1:2380" --data-dir="etcd1"
[root@client ~]# ETCDCTL_API=3 etcdctl snapshot restore backup.db --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 --name=etcd2 --initial-advertise-peer-urls="http://etcd2:2380" --data-dir="etcd2"
[root@client ~]# ETCDCTL_API=3 etcdctl snapshot restore backup.db --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 --name=etcd3 --initial-advertise-peer-urls="http://etcd3:2380" --data-dir="etcd3"
# 拷贝数据到对应的节点
[root@client ~]# rsync -aXSH --delete etcd1/ etcd1:/var/lib/etcd/default.etcd/ 
[root@client ~]# rsync -aXSH --delete etcd2/ etcd2:/var/lib/etcd/default.etcd/ 
[root@client ~]# rsync -aXSH --delete etcd3/ etcd3:/var/lib/etcd/default.etcd/ 
# 启动服务
[root@etcd1 ~]# chown -R etcd.etcd /var/lib/etcd && systemctl start etcd
[root@etcd2 ~]# chown -R etcd.etcd /var/lib/etcd && systemctl start etcd
[root@etcd3 ~]# chown -R etcd.etcd /var/lib/etcd && systemctl start etcd
#--------------------验证集群状态------------------#
[root@client ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..3}:2379 endpoint status -w table
+------------+------------------+---------+---------+-----------+-----------+------------+
|  ENDPOINT  |        ID        | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
+------------+------------------+---------+---------+-----------+-----------+------------+
| etcd1:2379 | ade526d28b1f92f7 |  3.3.11 |   20 kB |      true |         9 |          9 |
| etcd2:2379 | d282ac2ce600c1ce |  3.3.11 |   20 kB |     false |         9 |          9 |
| etcd3:2379 | bd388e7810915853 |  3.3.11 |   20 kB |     false |         9 |          9 |
+------------+------------------+---------+---------+-----------+-----------+------------+
[root@client ~]# ETCDCTL_API=3 etcdctl --endpoints=etcd{1..3}:2379 get hello
hello
world

使用证书访问集群 etcd 服务

[root@client ~]# ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 --cacert=/opt/etcd/ssl/ca.crt --cert=/opt/etcd/ssl/etcd-client.crt --key=/opt/etcd/ssl/etcd-client.key snapshot save /srv/data/etcd-snapshot.db
[root@client ~]# ETCDCTL_API=3 etcdctl snapshot status /srv/data/etcd-snapshot.db
[root@client ~]# systemctl stop etcd
[root@client ~]# rm -rf /var/lib/etcd
[root@client ~]# ETCDCTL_API=3 etcdctl --data-dir=/var/lib/etcd snapshot restore /srv/data/etcd-snapshot-previous.db
[root@client ~]# chown -R etcd.etcd /var/lib/etcd
[root@client ~]# systemctl start etcd

版权声明:本文为weixin_60092693原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。