dubbo 在线平滑变更zookeeper

2022/10/06 dubbo 共 1983 字,约 6 分钟

记一次dubbo zk集群平滑迁移的操作方案,也可以用户dubbo双注册中心的实现方案。

准备

  1. zk 服务器版本:3.4.6
  2. dubbo 版本:2.7.3
  3. dubbo-spring-boot-starter 版本:2.7.3

技术方案

  1. 运维同学搭建好新的zk集群,保证高可用
  2. dubbo 服务提供者通过双注册中心的方式,将服务注册到new,old 两套集群上
  3. dubbo 消费者 通过配置双注册中心的方式,同时消费两个注册中心的服务
  4. 步骤2,步骤3可以同时进行,直到全部服务平滑注册到双注册中心
  5. 等全部到双中心后(需要运维同学确认),再次更改消费者配置,改为new 注册中心
  6. 关于即是生产者,又是消费者的项目,有两种方案:
    • 等依赖上游切换后再切换,或者最后切换
    • 差异化配置,消费者单注册中心,生产者双注册中心
  7. 消费者全部切换到新的zk 集群后,生产者逐步全部改为新的zk集群
  8. 关闭下线old zk 集群

关键配置

pom 依赖

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.2.0</version>
    <exclusions>
        <exclusion>
            <artifactId>zookeeper</artifactId>
            <groupId>org.apache.zookeeper</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.13</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

dubbo配置:

dubbo:
  application:
    name: zk-move-test
  consumer:
    registries:
      - id: oldzk
        protocol: zookeeper
        address: 127.0.0.1:2181(此处随意配)
      - id: newzk
        protocol: zookeeper
        address: 127.1.1.1:2181,127.2.2.2:2181(此处随意配)

然后就能正常启动了,通过日志,会发现正常注册了两个zk中心,并且zk上也能发现注册的服务。

技术验证点

  1. 某服务注册到old中心,new 中心没有,消费者双注册中心是否能发现?答:可以
  2. 某服务注册到new 中心,old中心没有,消费者双注册中心是否能发现?答:可以
  3. 某服务双注册中心,然后下线某注册中心,消费者双注册中心是否收影响,能否自动转移?
    答:经测试,new中心全部挂掉后,服务依旧会从old服务发现,功能不受影响。
    但是,dubbo客户端会一直尝试重新连接zk中心(可配置),直到new中心重启后,zk能够自动重连成功为止。所以,我们这个场景,需要生产、消费者全部迁移到new zk 上后才能下线old zk。

参考文章

http://dubbo.apache.org/zh-cn/docs/user/references/registry/zookeeper.html

文档信息

Search

    Table of Contents