高可用集群系列——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.11
node12192.168.0.12
node13192.168.0.13

2.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"	       //定义集群初始状态

示例环境中node1节点关键参数的配置如图所示

3.2 配置node2节点和node3节点

为了方便配置,直接将node1的/etc/etcd/etcd.conf copy至node2和node3,再修改以上关键参数信息即可;
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集群健康状态

检查etcd成员 etcdctl member list  

检查etcd成员
示例中 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

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

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

1.3 telnet 检测ip及端口连通性

验证2379和2380 的连通性,正常情况下应该如下图所示:
在这里插入图片描述
在这里插入图片描述

坑2:节点间时间不同步

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值