etcd官网地址: https://etcd.io/
安装包路径:https://github.com/etcd-io/etcd/releases/
官网集群部署文档: https://etcd.io/docs/v3.5/op-guide/clustering/
安装前大致阅读一下,支持的平台和硬件建议:
https://etcd.io/docs/v3.5/op-guide/supported-platform/
https://etcd.io/docs/v3.5/op-guide/hardware/
理论知识参考一下: https://blog.csdn.net/MssGuo/article/details/134495748
本文主要是为了快速搭建基于http通信的etcd集群
主机信息
etcd-01 | 192.168.44.186 |
---|---|
etcd-02 | 192.168.44.187 |
etcd-03 | 192.168.44.188 |
环境配置:
-
设置主机名
# 分别在每台执行 hostnamectl set-hostname etcd-01 hostnamectl set-hostname etcd-02 hostnamectl set-hostname etcd-03
-
配置本地解析
# 每台都执行 cat >> /etc/hosts << EOF 192.168.44.186 etcd-01 192.168.44.187 etcd-02 192.168.44.188 etcd-03 EOF
-
关闭防火墙,selinux
# 每台都执行 systemctl disable firewalld --now setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
-
配置时间同步
# 每台都执行 yum install chrony -y && systemctl enable --now chronyd
集群部署
-
下载etcd二进制包
# 每台都执行 cd /opt wget https://github.com/etcd-io/etcd/releases/download/v3.5.13/etcd-v3.5.13-linux-amd64.tar.gz tar -zxvf etcd-v3.5.13-linux-amd64.tar.gz cp etcd-v3.5.13-linux-amd64/etcd* /usr/local/bin/
-
编写etcd.service配置文件,加入到systemd系统进程
# etcd-01 cat>/usr/lib/systemd/system/etcd.service<<'EOF' [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify ExecStart=/usr/local/bin/etcd \ --name=etcd-01 \ --data-dir=/var/lib/etcd \ --listen-client-urls=http://192.168.44.186:2379 \ --listen-peer-urls=http://192.168.44.186:2380 \ --advertise-client-urls=http://192.168.44.186:2379 \ --initial-advertise-peer-urls=http://192.168.44.186:2380 \ --initial-cluster=etcd-01=http://192.168.44.186:2380,etcd-02=http://192.168.44.187:2380,etcd-03=http://192.168.44.188:2380 \ --initial-cluster-token=etcd-cluster \ --initial-cluster-state=new \ --logger=zap Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF
# etcd-02 cat>/usr/lib/systemd/system/etcd.service<<'EOF' [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify ExecStart=/usr/local/bin/etcd \ --name=etcd-02 \ --data-dir=/var/lib/etcd \ --listen-client-urls=http://192.168.44.187:2379 \ --listen-peer-urls=http://192.168.44.187:2380 \ --advertise-client-urls=http://192.168.44.187:2379 \ --initial-advertise-peer-urls=http://192.168.44.187:2380 \ --initial-cluster=etcd-01=http://192.168.44.186:2380,etcd-02=http://192.168.44.187:2380,etcd-03=http://192.168.44.188:2380 \ --initial-cluster-token=etcd-cluster \ --initial-cluster-state=new \ --logger=zap Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF
# etcd-03 cat>/usr/lib/systemd/system/etcd.service<<'EOF' [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify ExecStart=/usr/local/bin/etcd \ --name=etcd-03 \ --data-dir=/var/lib/etcd \ --listen-client-urls=http://192.168.44.188:2379 \ --listen-peer-urls=http://192.168.44.188:2380 \ --advertise-client-urls=http://192.168.44.188:2379 \ --initial-advertise-peer-urls=http://192.168.44.188:2380 \ --initial-cluster=etcd-01=http://192.168.44.186:2380,etcd-02=http://192.168.44.187:2380,etcd-03=http://192.168.44.188:2380 \ --initial-cluster-token=etcd-cluster \ --initial-cluster-state=new \ --logger=zap Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF
启动时的参数含义
官网文档参考:https://etcd.io/docs/v3.5/op-guide/configuration/--name etcd的节点名字,自定义名字,etcd节点的名字不能相同 --data-dir etcd的数据存储目录 --listen-client-urls 用于当前节点与客户端交互的URL地址,每个节点同样可以向客户端提供多个URL地址,多个地址使用道号分隔节课,端口一般保持默认2379即可 --listen-peer-urls 用于集群内各个节点之间通信的URL地址,每个节点可以监听多个URL地址,集群内部将通过这些URL地址进行数据交互,例如,Leader节点的选举、Message消息传输或是快照传输等,端口一般保持默认2380即可 --advertise-client-urls 建议使用的客户端通信url,该值用于etcd 代理或etcd成员与etcd节点通信,与listen-client-urls参数值保持一致即可 --initial-advertise-peer-urls 建议用于集群内部节点之间交互的URL地址,节点间将以该值进行通信,与listen-peer-urls参数值保持一致即可 --initial-cluster 集群中所有的initial-advertise-peer-urls的合集,etcd启动的时候,会通过这个配置找到其他etcd节点的列表 --initial-cluster-token 节点的token值,该值可自定义,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd 集群就不会相互影响 --initial-cluster-state 初始化时集群的状态,可取值:new和existing,new代表新建的集群,existing 代表加入已经存在的集群
启动etcd集群
因为已经将etcd加入到了systemd系统进程,所以需要重新加载一下配置,在启动。
需要注意的:最先启动的etcd,会成为集群的leader。
# 3台主机同时执行
systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
查看etcd集群状态
[root@etcd-01 opt]# etcdctl --endpoints="http://etcd-01:2379,http://etcd-02:2379,http://etcd-03:2379" endpoint status --write-out=table
+---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://etcd-01:2379 | 498b4ab41d98fd16 | 3.5.13 | 25 kB | true | false | 2 | 8 | 8 | |
| http://etcd-02:2379 | fa7b0b5a155b1015 | 3.5.13 | 25 kB | false | false | 2 | 8 | 8 | |
| http://etcd-03:2379 | ad44b09644b5536d | 3.5.13 | 25 kB | false | false | 2 | 8 | 8 | |
+---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
# 可以看出 etcd-01节点是leader
查看etcd集群健康状态
[root@etcd-01 opt]# etcdctl --endpoints="http://etcd-01:2379,http://etcd-02:2379,http://etcd-03:2379" endpoint health --write-out=table
+---------------------+--------+-------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+---------------------+--------+-------------+-------+
| http://etcd-02:2379 | true | 25.3956ms | |
| http://etcd-01:2379 | true | 25.460568ms | |
| http://etcd-03:2379 | true | 25.43311ms | |
+---------------------+--------+-------------+-------+
列出etcd集群成员节点
[root@etcd-01 opt]# etcdctl --endpoints="http://etcd-01:2379,http://etcd-02:2379,http://etcd-03:2379" member list --write-out=table
+------------------+---------+---------+----------------------------+----------------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+---------+----------------------------+----------------------------+------------+
| 498b4ab41d98fd16 | started | etcd-01 | http://192.168.44.186:2380 | http://192.168.44.186:2379 | false |
| ad44b09644b5536d | started | etcd-03 | http://192.168.44.188:2380 | http://192.168.44.188:2379 | false |
| fa7b0b5a155b1015 | started | etcd-02 | http://192.168.44.187:2380 | http://192.168.44.187:2379 | false |
+------------------+---------+---------+----------------------------+----------------------------+------------+