dubbo 在线平滑变更zookeeper

记一次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 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<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配置:

1
2
3
4
5
6
7
8
9
10
11
12
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


dubbo 在线平滑变更zookeeper
https://www.hancher.top/2022/10/06/dubbo-zk-change/
作者
寒澈
发布于
2022年10月6日
许可协议