专栏首页莫韵的专栏关于zk迁移的一些教训
原创

关于zk迁移的一些教训

运维千成条,稳定第一条,操作不规范,后台两行泪

###极简步骤

假设有zkid 【 1 , 2 ,3 】 的三台机器,现在因各种原因需要裁撤和下线 【1,2 】 的机器。

  • 扩容zk 集群为 【1,2,3,4,5】
  • 所有调用方更改zk调用为 【3,4,5】
  • 确认这【1,2】机器的2181端口,没有来自除zk集群以外的的长连接
  • 缩容为 【3,4,5】

关于ZK的在线迁移实验和完整和详细步骤, 可见此文的操作  

https://cloud.tencent.com/developer/article/1406912

本文重点说缩容为 3,4,5 再强调补充.

缩容的详细步骤是

  1. 更改 3 的配置为 3,4,5 组一个zk集群, 然后重启3
  2. 再改 4 的配置为 3,4,5 组一个zk集群,然后重启4
  3. 接着停止1
  4. 停止2
  5. 改5的配置为 3,4,5 组一个zk集群, 最后重启5

以上步骤必须严格按此步骤执行, 操作不规范会进入一个非常痛苦的场景

如果你是这样操作的

  1. 停止1
  2. 停止2
  3. zk集群正常,OK,回收机器

那结果就是大坑!!!

这时候 zk3-5仍然认为 【1,2,3,4,5】是一个集群

停止1,2服务是没有影响的,集群running .但是

已然处于一个非常危险的境地, 【1,2,3,4,5】

再任意宕机一台,集群都会停止服务 !!!

怎么补救

如果1,2的机器还在,或者说能够以原来的IP启动服务, 那此事比较容易

  1. 以原来的配置恢复1
  2. 以原来的配置恢复2
  3. 验证集群状态,是否为 【1,2,3,4,5】全部online .
  4. 然后再按照zk缩容的步骤下线

如果1,2的机器已然不在,而且你无法找到同样IP的机器,用于恢复服务,那此时只能以有损的方式,恢复到高可用状态

  1. 更改 3 的配置为 3,4,5 组一个zk集群, 然后重启3 , 此时集群会异常
  2. 再改 4 的配置为 3,4,5 组一个zk集群,然后重启4, 此时集群也会异常
  3. 改5的配置为 3,4,5 组一个zk集群, 最后重启5 , leader按预期会选举为4

为什么不能通过 增加 6 7扩容,再缩容的方式恢复服务了

刚刚异常的场景是 【1,2,3,4,5】,按扩容步骤, 应该是增加 6, 7

但是:

  • 此时 3 , 4 , 5 的配置,认为是这样一个状态 【1,2,3,4,5】
  • 更改3or4的配置进行重启时, 集群都会处于 半数以上宕机的状态, 进而停止服务

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL 占用空间一键查询实践

    大家可能经常会遇到DB满的情况 特别是大家共用DB的时候 这时候需要找到,哪个DB比较大,哪个表比较大,默认的方法你得一个一个的查询, 但这肯定不是偷懒程序员爱...

    莫韵
  • ZooKeeper在线迁移实验

    因为ZooKeeper的机制中,myid大的会向小的发起连接,而小的不会向大的发起连接。因此如果最后重启myid最小的机器,则其可能无法加入集群

    莫韵
  • 简易 linux 网卡带宽检查工具纯 shell 和 awk

    最近要检查网卡流量,其实是有各种现存工具,非常容易实现 。但需要把这个东西与icinga2 集成起来搞报警什么的。这些cati collectd tsar 网管...

    莫韵
  • kubernetes学习记录(0)——学习记录阅读顺序

    目前很多内容都是基于无安全认证的集群,会尝试在安全认证后的集群进行操作,成功后会更新博客。已实现 1.阅读Centos7.2学习记录(1)——静态IP配置 使用...

    胡了了
  • 使用 Apache PIG 统计积累型数据的差值

    线上运行的生产系统会定时采集一项丢包数据,这项数据与某个进程相关联,从进程启动开始就一直递增,每隔1分钟采集一次数据,当进程重启之后,这项数据会清零。现在要求使...

    邵靖
  • 信道规划最佳实践,打造更好的Wi-Fi

    正确设计和部署无线网络涉及许多任务,其中最重要的一项就是制定信道计划。完善的信道方案将有助于压缩每一个宝贵的连接时间,这是高性能WLAN的基础之一。

    虹科网络可视化与安全
  • App项目实战之路(一):概述篇

    我计划做一款App产品,包括Android和iOS,做完打算将Android和iOS客户端的代码开源,并将上架到应用宝和AppStore,之后还会不断迭代。而在...

    Keegan小钢
  • Master-Worker模式实现立方和相加

    Master-Worker框架如下,首先实现的Master线程,主要用作分配任务,和返回结果集。

    小鄧子
  • httprunner学习20-extentreports无法加载问题(已解决)

    最近有小伙伴反应使用httprunner的extentreports报告时,打开的页面样式全部丢失了,原本高大上的报告变成了丑八怪。 顿时心都凉了一大截,要是让...

    上海-悠悠
  • Vue + Element UI 实现权限管理系统 前端篇(三):工具模块封装

    使用axios发起一个请求是比较简单的事情,但是axios没有进行封装复用,项目越来越大,会引起越来越多的代码冗余,让代码变得越来越难维护。所以我们在这里先对 ...

    朝雨忆轻尘

扫码关注云+社区

领取腾讯云代金券