`
pcpig
  • 浏览: 87686 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

zookeeper迁移方案

阅读更多
采用版本: 3.4.14
2 April, 2019: release 3.4.14 available

集群规模: 5+N,5个选举节点,N个观察者节点

硬件要求: 16核CPU + 32G内存+ 2块物理硬盘,1个SSD,另一个不做要求
用虚机的话,避免分在同一个宿主机上,避免一挂全挂

存在的困难:
很多应用采用的是ip连接方式,ip变更的话需要显式切换(写在代码里面的需要重新编译;写在配置里面需要重新发版),
要让这么多应用都切换的话,需要一个较长的周期,所以在升级迁移服务的过程中一定有一个新老并存时期。

针对以上问题:
每个Id申请一个内部域名,对外公布域名,以后如有类似的操作,通过切换ip就可以完成。
思考: 是否需要针对每个团队一个域名,这样zk后续变化的话,更灵活,带来的问题是需要更多的域名,增加了管理上的复杂度

升级方案:
1、先用起来。
先部署观察者节点,让部分应用可以提前迁移到新环境,减少迁移周期;

2、迁移
大方向滚动式升级,对上面的应用的影响尽量平滑
注意:在每轮变更前是否需要提前修改现有观察者节点?观察者节点的观察对象如果有非选举对象是否有问题?
提前设成旧的在本轮变更中角色不变的阶段最为稳妥。

2.1 缩减选举节点规模,超过5个的,减少到5个,减少选举周期;
2.2 滚动升级。小步迭代,每次更新(N-1)/2 个节点
以5个举例,原来集群1A 2A 3A 4A 5A,假定1A是leader
第1轮:变更后的选举集群节点为:1/2/3A 1/2B,观察者节点为 4/5A
第一步:新建集群1/2/3A 1/2B.
1/2/3A不动, 挨个启动1/2B;
第二步:修改2/3 A的配置为新集群配置,并挨个重启;
由于变动的是少数服务,对新旧集群无影响;
第三步:修改4/5A为新集群观察者节点
修改集群1A配置为新集群配置,此时触发集群重新选组,选组完成,新集群对外提供服务。

第2轮A: 旧的节点当选为leader,仍假定为1A,变更后的集群节点为:1A 1/2/3/4B, 新添观察者节点2/3A
第一步:新建集群1A 1/2/3/4B
依次加入3/4B节点
第二步:更新1/2B节点的配置,并挨个重启;
第三步:修改2/3A为新集群观察者节点
修改集群1A配置为新集群配置,此时触发集群重新选组,选组完成,新集群对外提供服务。

第三轮A-A:新节点为leader,假定1B,变更后的集群节点为:1/2/3/4/5B,新添观察者节点1A
第一步:停掉1A,更新2/3/4B节点配置并依次重启
第二步:更新1B配置,并重启,触发选举并对外服务;
第三步:加入5B节点,修改1A节点为观察者节点,并重启
第三轮A-B:旧节点1A为leader,先停掉1A,触发选举,新节点当选为leader,后续操作同第三轮A-A

总结
      替换非leader节点的逻辑: 加入新节点;逐个修改要保留的节点;要下掉的旧节点改成观察者节点;最后更新leader节点
      替换leader节点的逻辑:节点少的情况下先加后减。先加入新的节点,后停掉要替换的节点,挨个修改配置并重启;
      节点多的情况下,先停后加

以上做法的前提:是否选组由leader控制,各节点对自己的状态负责,实际上也是这样的。
比较粗犷的操作先扩容,再缩容,扩容和缩容的操作都修改配置触发一次选主,这样做的优点,方法简单,好操作。
分享到:
评论

相关推荐

    Redis 集群解决方案 Codis.zip

    Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的...

    Java思维导图xmind文件+导出图片

    Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入分析Zookeeper Zab协议及选举机制源码解读 Dubbo 使用Dubbo对单一应用服务化改造 Dubbo管理中心及及监控平台安装部署 Dubbo分布式...

    分布式组件部署文档和脚本

    jdk、redis、zookeeper、kafka、mongodb、jenkins、svn、mariadb(mysql)、sonarQube 、nginx、svn数据迁移、mysql备份附带脚本等一些自己整理的文档

    Codis分布式Redis解决方案-其他

    Codis是一个分布式Redis解决方案,对于上层的应用来说,连接到CodisProxy和连接原生的RedisServer没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Redis一样使用,Codis底层会处理请求的转发,不停机的...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    09-SSH企业案例_CRM-客户管理系统(6天) ... day02_登录_客户管理模块 day03_客户管理&联系人管理 day04_联系人管理 day05_CRM权限拦截器_SSH纯注解整合 ...Maven_day02.Maven整合SSH....15备份与迁移

    garlicts:分布式web框架,使用简单、高效

    由于网络问题,已经迁移到码云garlicts框架的开发计划集成zookeeper,实现分布式服务注册发现完善http请求工厂类,zookeeper + http工厂类 实现分布式http服务。集成分布式爬虫。集成MQ,多个消费者处理MQ的爬虫数据...

    如何快速搭建一个微服务架构?

    相对于“完美”的微服务架构方案,微服务架构简单模式可以暂且不用关注保障数据一致性的分布式事务技术、方便程序包在环境间(开发、测试、生产)迁移的配置中心组件、监控 API调用情况的调用链组件、避免系统超载的...

    2021互联网大厂Java架构师面试题突击视频教程

    48_你们当时是如何把系统不停机迁移到分库分表的? 49_好啊!那如何设计可以动态扩容缩容的分库分表方案? 50_一个关键的问题!分库分表之后全局id咋生成? 51_说说MySQL读写分离的原理?主从同步延时咋解决? 52_...

    数据实时分析平台Heron.zip

    保管在Zookeeper中。Heron的功能: Off the shelf scheduler:通过抽象出调度组件,我们可轻易地在一个共享的基础设施上部署,可以是多种的调度框架,比如Mesos、YARN或者一个定制的环境。 Handling spikes and...

    Redis分布式集群实战(4)——redis集群之Codis讲解和搭建

    zookeeper6、扩容7、自动均衡8、Codis 的代价9、Codis 的优点10、MGET 指令的操作过程二、codis集群的搭建实验环境实验 一、认识Codis 1、什么是codis Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接...

    Mycat数据库中间件-其他

    Mycat的目标是以低成本将当前的独立数据库和应用程序平稳地迁移到云端,并解决由于数据存储和业务规模的快速增长而引起的瓶颈问题。 特性: 支持SQL92标准 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件...

    Mycat数据库中间件 v1.13

    修复黑客路由器响应int类型可能超出数字范围Mycat的目标是以低成本将当前的独立数据库和应用程序平稳地迁移到云端,并解决由于数据存储和业务规模的快速增长而引起的瓶颈问题。MyCAT特性支持SQL92标准 遵守Mysql...

    Mycat2数据库中间件-其他

    Mycat的目标是以低成本将当前的独立数据库和应用程序平稳地迁移到云端,并解决由于数据存储和业务规模的快速增长而引起的瓶颈问题。特性:支持SQL92标准遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件...

Global site tag (gtag.js) - Google Analytics