安徽365热线-Bets365-365bet线上娱乐

高可用集群系列——Etcd集群的部署

高可用集群系列——Etcd集群的部署

一、环境准备

1、节点个数的选择

1.1 推荐节点个数为奇数

etcd是基于Raft算法实现一致性,故强烈推荐集群节点数为奇数(如3、5、7),以避免选举平票问题并保证多数派机制的有效性。偶数节点虽理论上可行,但无法提升容错能力且增加写入延迟。

1.2 故障冗余能力和节点个数的关系

最多容忍(N-1)/2 个节点故障(N为etcd集群节点个数)

3节点:最多容忍1个节点故障,3节点部署是生产中最常使用的节点部署个数;

5节点:最多容忍2个节点故障,大中型生产集群环境推荐使用5节点;

7节点:最多容忍3个节点故障,适用于对高可用要求极高的大规模节点集群;

etcd集群超过7节点后,容错能力提升有限,但是集群内各节点间网络开销却显著增加,etcd性能也会成为瓶颈,故不推荐使用7节点以上的etcd集群。

1.3 节点个数对性能的影响

写性能:etcd集群节点个数越多,写入数据需要同步的节点就越多,性能会线性下降。

读性能:etcd集群任意节点均可进行数据的访问读取,因此节点数量增加会提升集群的数据读取能力。

总结:etcd在多节点部署时推荐 奇数个数,容忍(N-1)/2 节点故障。对于中小集群,3节点是平衡成本和性能的最佳选择;对于大规模高可用集群,5或7节点部署也是一种较好的选择,但是建议使用较好的网络带宽。

本文选择使用3节点部署etcd集群。

2、节点环境准备

2.1 操作系统的选择

Centos7 (以7.6.1810为例);

2.2 所有节点时间校准

在 etcd 集群中,​节点间时间一致性是保障分布式一致性和稳定运行的核心要素。

在各个节点上均执行:

# 安装chrony(推荐的非常稳定的时间同步服务)

yum install -y chrony

systemctl enable chronyd && systemctl start chronyd

# 手动同步时间(可选)

timedatectl set-ntp true

chronyc tracking

2.3 节点情况

节点名称ip地址node11192.168.0.11node12192.168.0.12node13192.168.0.132.4 etcd 3.3.11 下载和安装

2.4.1 yum安装

若centos配置好的yum源,可以直接执行

yum install -y etcd

2.4.2 二进制包安装

下载:

wget https://github.com/etcd-io/etcd/releases/download/v3.11.11/etcd-v3.11.11-linux-amd64.tar.gz

安装:

tar -xvf etcd-v3.11.11-linux-amd64.tar.gz

mv etcd-v3.11.11-linux-amd64 /usr/local/bin/

ln -s /usr/local/bin/etcd-v3.11.11-linux-amd64 /usr/local/bin/etcd

创建etcd数据及日志目录

mkdir -p /var/lib/etcd.data/{data,log} (目录自定义)

chown -R etcd:etcd /var/lib/etcd.data

3、etcd配置

3.1 配置node1节点

修改etcd自带的默认配置文件

vim /etc/etcd/etcd.conf(默认路径)

重点修改配置以下关键的参数内容:

ETCD_DATA_DIR="/var/lib/etcd/data.etcd" //etcd的数据目录,持久化etcd数据

ETCD_LISTEN_PEER_URLS="http://192.168.0.11:2380" //集群内部节点间通信监听地址及端口

ETCD_LISTEN_CLIENT_URLS="http://192.168.0.11:2379,http://127.0.0.1:2379" //客户端连接的监听地址及端口

ETCD_NAME="node11" //集群内当前节点的唯一标识(可使用节点主机名)

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.11:2380" //集群中其他节点通过此地址及端口连接访问本节点

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.11:2379" //客户端通过本端口及地址访问本节点

ETCD_INITIAL_CLUSTER="node11=http://192.168.0.11:2380,node12=http://192.168.0.12:2380,node13=http://192.168.0.13:2380" //集群初始成员列表信息,新集群启动时通过该配置发现彼此

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" //集群的唯一标识符

ETCD_INITIAL_CLUSTER_STATE="new" //定义集群初始状态

3.2 配置node2节点和node3节点

为了方便配置,直接将node1的/etc/etcd/etcd.conf copy至node2和node3,再修改以上关键参数信息即可;

4、启动etcd

在三个节点同时执行

systemctl start etcd //启动etcd服务

systemctl enable etcd //设置etcd服务开机自启动(可选)

systemctl status etcd //检查etcd服务状态

5、验证etcd

5.1 etcd集群的状态及成员

检查etcd集群的健康状态 etcdctl cluster-health

检查etcd成员 etcdctl member list

示例中 isLeader代表了当前集群哪个节点是etcd的leader节点

5.2 etcd数据操作验证

6、etcd使用场景扩展

6.1 etcd数据定期备份

当需要定时备份etcd数据时,可以借用 crontab 的定时任务机制实现;

6.1.1 编辑crontab

crontab -e

0 1 * * * etcdctl snapshot save /backups/etcd-snapshot-$(date +%Y%m%d).db

crontab -l

6.1.2 etcd数据恢复

# 停止 etcd 服务

systemctl stop etcd //回复数据前一定stop etcd服务

# 备份当前数据(防止误操作)

mv /var/lib/etcd /var/lib/etcd.bak

# 创建新数据目录并恢复 (三个节点均恢复)

mkdir /var/lib/etcd

etcdctl restore \

--data-dir /var/lib/etcd \ # 恢复目标路径

--backup-dir /backups/etcd-20231010 # 备份源路径

# 启动 etcd

systemctl start etcd

避坑策略

坑1:网路通信可靠性

确保节点间 ​双向通信畅通​(尤其端口 2379(客户端)、2380(节点间 Raft 协议)),防火墙/安全组规则需放行。

遇到etcd抛错网络相关问题,首先需要检查 网络及相关端口的连通性。

1.1 验证监听端口

ss -tulnp | grep etcd

正常应该看到:2379(客户端通信) 2380(节点间通信)

1.2 防火墙问题

firewall-cmd --list-ports --permanent

若未开发,则需要执行以下命令放开:

firewall-cmd --permanent --add-port=2379-2380/tcp

firewall-cmd --reload

1.3 telnet 检测ip及端口连通性

验证2379和2380 的连通性,正常情况下应该如下图所示:

坑2:节点间时间不同步

etcd集群内各个节点时间必须严格保证一致性,若不一致将导致集群出现各种问题;

相关推荐