网站优化种类,济南市高新技术官方网站开发区,利津网站定制,商派商城网站建设方案etcd集群节点数量的说明
etcd 是基于 raft算法的分布式键值数据库#xff0c;生来就为集群化而设计的#xff0c;由于Raft算法在做决策时需要超半数节点的投票#xff0c;所以etcd集群一般推荐奇数节点#xff0c;如3、5或者7个节点构成一个集群。 对于具有 n 个成员的集群…etcd集群节点数量的说明
etcd 是基于 raft算法的分布式键值数据库生来就为集群化而设计的由于Raft算法在做决策时需要超半数节点的投票所以etcd集群一般推荐奇数节点如3、5或者7个节点构成一个集群。 对于具有 n 个成员的集群仲裁为 (n/2)1,ETCD 集群高可用允许 (N-1)/2 的节点出现临时性故障3台etcd集群允许宕机一台超过(N-1)/2节点那集群将暂时不可用直到节点个数恢复到超过 (N-1)/2. etcd官方推荐3、5、7个节点虽然raft算法也是半数以上投票才能有 leader但奇数只是推荐其实偶数也是可以的。如 2、4、8个节点。下面分情况说明
1 个节点就是单实例没有集群概念不做讨论2 个节点是集群但没人会这么配尽管双节点的etcd能启动启动时也能有主可以正常提供服务但是一台挂掉之后就选不出主了因为存活的节点只能拿到1票剩下的那台也无法提供服务也就是双节点无容错能力不要使用。3 节点标准的3 节点etcd 集群只能容忍1台机器宕机挂掉 1 台此时等于2个节点的情况如果再挂 1 台就和 2节点的情形一致了一直选一直增加任期但就是选不出来服务也就不可用了4 节点最大容忍1 台 服务器宕机5 节点最大容忍 2 台 服务器宕机6 节点最大容忍 2 台 服务器宕机7和8个节点最大容忍3台 服务器宕机
以此类推9和10个节点最大容忍4台 服务器宕机总结以上可以得出结论偶数节点虽然多了一台机器但是容错能力是一样的也就是说即便设置偶数节点但没增加什么能力还浪费了一台机器。同时etcd 是通过复制数据给所有节点来达到一致性因此偶数的多一台机器增加不了性能反而会拉低写入速度。
etcd集群节点数越多越好吗
etcd 集群是一个 Raft Group没有 shared。所以它的极限有两部分一是单机的容量限制内存和磁盘二是网络开销每次 Raft 操作需要所有节点参与每一次写操作需要集群中大多数节点将日志落盘成功后Leader 节点才能修改内部状态机并将结果返回给客户端。因此节点越多性能越低并且出错的概率会直线上升并且是呈现线性的性能下降所以扩展很多 etcd 节点是没有意义的其次如果etcd集群超过7个达到十几个几十个那么对运维来说也是一个不小的压力了并且集群的配置什么的也会更加的复杂而不是简单易用了。因此etcd集群的数量一般是 3、5、7 3 个是最低标准7个也就是最高了。
扩容
1、新增节点部署etcd 部署新节点配置需要包含集群节点信息。 $ wget https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz
$ tar xvf etcd-v3.4.27-linux-amd64.tar.gz
$ mv etcd-v3.4.27-linux-amd64/etcd* /usr/local/bin/ ##复制etcd命令文件
$ mkdir -p /var/lib/etcd/ ##创建数据存放目录
$ mkdir -p /etc/etcd ##创建配置文件存放目录
配置
$ cat /etc/etcd/etcd.conf
ETCD_NAMEetcd-4
ETCD_DATA_DIR/var/lib/etcd
ETCD_LISTEN_PEER_URLShttp://10.0.19.128:2380
ETCD_LISTEN_CLIENT_URLShttp://127.0.0.1:2379,http://10.0.19.128:2379
ETCD_INITIAL_ADVERTISE_PEER_URLShttp://10.220.43.206:2380
ETCD_INITIAL_CLUSTERetcd-2https://10.0.19.129:2380,etcd-4https://10.0.19.128:2380,etcd-1https://10.0.19.127:2380,etcd-3https://10.0.19.130:2380
ETCD_INITIAL_CLUSTER_STATEnew
ETCD_INITIAL_CLUSTER_TOKENsingless
ETCD_ADVERTISE_CLIENT_URLShttp://10.0.19.128:2379
2、集群添加新节点
#add 增加新节点
[rootk8s-master1 etcd]# ETCDCTL_API3 /opt/etcd/bin/etcdctl --cacert/opt/etcd/ssl/ca.pem --cert/opt/etcd/ssl/server.pem --key/opt/etcd/ssl/server-key.pem --endpointshttps://10.0.19.127:2379 member add etcd-4 --peer-urlshttps://10.0.19.128:2380
Member 1e1a799fc9c59a7b added to cluster 983f3fe4681bf439#list 查看节点状态
[rootk8s-master1 etcd]# ETCDCTL_API3 /opt/etcd/bin/etcdctl --cacert/opt/etcd/ssl/ca.pem --cert/opt/etcd/ssl/server.pem --key/opt/etcd/ssl/server-key.pem --endpointshttps://10.0.19.127:2379 member list --write-outtable
-----------------------------------------------------------------------------------------
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |
-----------------------------------------------------------------------------------------
| db5a2c24a8bf7a | started | etcd-2 | https://10.0.19.129:2380 | https://10.0.19.129:2379 |
| 1e1a799fc9c59a7b | started | | https://10.0.19.128:2380 | |
| 318ff80236db7a1e | started | etcd-1 | https://10.0.19.127:2380 | https://10.0.19.127:2379 |
| ee6138446f578296 | started | etcd-3 | https://10.0.19.130:2380 | https://10.0.19.130:2379 |
-----------------------------------------------------------------------------------------
3、修改所有etcd配置并重启
[rootk8s-master1 etcd]# cat /etc/etcd/etcd.conf|grep ETCD_INITIAL_CLUSTER
ETCD_INITIAL_CLUSTERetcd-2https://10.0.19.129:2380,etcd-4https://10.0.19.128:2380,etcd-1https://10.0.19.127:2380,etcd-3https://10.0.19.130:2380
[rootk8s-master1 etcd]# systemctl restart etcd
[rootk8s-master1 ~]# etcdctl endpoint health
member db5a2c24a8bf7a is healthy: got healthy result from https://10.0.19.129:2379
member 1e1a799fc9c59a7b is healthy: got healthy result from https://10.0.19.128:2379
member 318ff80236db7a1e is healthy: got healthy result from https://10.0.19.127:2379
member ee6138446f578296 is healthy: got healthy result from https://10.0.19.130:2379
缩容
1、故障节点停服
在故障节点上停止etcd服务以防止数据写入。
systemctl stop etcd
2 移除故障或不需要的成员
首先需要确定要移除的etcd成员的ID。可以通过以下命令查看集群成员列表
etcdctl --endpoints${existing-advertise-peer-urls} member list
然后使用member remove命令移除指定的成员
etcdctl --endpoints${existing-advertise-peer-urls} member remove ${cluster_id}
这里的${cluster_id}是要移除的成员的ID。
3 确认成员已被移除
再次使用member list命令确认成员已被成功移除
etcdctl --endpoints${existing-advertise-peer-urls} member list 注意事项 在进行缩容操作之前确保已经备份了etcd集群的数据以防数据丢失。缩容操作可能会影响集群的稳定性和性能建议在业务低峰期进行。缩容后需要确保集群中剩余的etcd成员能够正常通信并且集群能够正常工作。 以上步骤提供了一个基本的etcd集群缩容流程。请根据具体环境和需求调整步骤和命令。