kenttanl / kenttanl.github.io

个人博客,http://kentt.top/
https://kenttanl.github.io/
MIT License
0 stars 0 forks source link

ETCD #4

Open kenttanl opened 4 years ago

kenttanl commented 4 years ago

raft 分布式共识

image

节点的状态

Log Replication:日志复制

Leader Election:领导者选举

如何解决网络分区的问题

  1. 网络分区后,节点数量较少的那部分分区无法完成新任期的 Leader 选举,并且无法提交条目;
  2. 网络分区后,节点数量较多的那部分分区可正常的选举、提交条目;
  3. 网络正常后,较少节点的那部分节点因为没有新的数据写入,所以只需要回滚之前未提交的数据,并同步数量较多的那部分节点中的数据即可;
kenttanl commented 4 years ago

一些优化

kenttanl commented 4 years ago

平滑迁移

比如将节点 etcd01, 02, 03 上的 etcd 服务迁移至新的节点 etcd04, 05, 06 上。为了保证已有的服务不受影响,同时新的服务能够正常运行,所以使用大致如下步骤来完成迁移:

  1. 将节点 etcd04, 05 加入到现有集群,保证节点的数量为奇数;
  2. 更改应用服务的 etcd endpoint 配置为最新的地址,即 etcd04, 05, 06 的地址;
  3. 重启应用服务,此时由于 etcd01 ~ 05 均在线,所以应用服务无论是否重启均能正常使用 etcd 服务;
  4. 所有应用重启完成后,添加 etcd06 节点,并移除旧的节点 etcd01, 02, 03;
  5. 观察服务是否正常;

值得注意的是,添加节点时使用的是 2380 端口,而非 2379 端口!

cluster.addMember(Collections.singletonList(URI.create("127.0.0.1:2380")));

机械硬盘迁移到固态硬盘后,体验飞升!

image

kenttanl commented 4 years ago

物理存储

image

image