Zookeeper的一次迁移故障

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
简介:

前阶段同事迁移Zookeeper(是给Kafka使用的以及flume使用)后发现所有Flume-producer/consumer端集体报错:

1
2
3
4
07  Jan  2014  01 : 19 : 32 , 571  INFO  [conf-file-poller- 0 -SendThread(xxx: 2181 )] (org.apache.zookeeper.ClientCnxn$SendThread.startConnect: 1058 )  - Opening socket connection to server xxx: 2181
07  Jan  2014  01 : 19 : 32 , 572  INFO  [conf-file-poller- 0 -SendThread(xxx: 2181 )] (org.apache.zookeeper.ClientCnxn$SendThread.primeConnection: 947 )  - Socket connection established to xxx: 2181 , initiating session
07  Jan  2014  01 : 19 : 32 , 573  INFO  [conf-file-poller- 0 -SendThread(xxx: 2181 )] (org.apache.zookeeper.ClientCnxn$SendThread.run: 1183 )  - Unable to read additional data from server sessionid  0x142f42b91871911 , likely server has closed socket, closing socket connection and attempting reconnect
07  Jan  2014  01 : 19 : 32 , 845  INFO  [conf-file-poller- 0 -SendThread(xxx: 2181 )] (org.apache.zookeeper.ClientCnxn$SendThread.startConnect: 1058 )  - Opening socket connection to server xxx: 2181

一直在不断的重试连接失败再重试,问同事说:网路连通性早就验证过,然后查看server端日志发现:

1
2
3
4
5
6
7
8
2014 - 01 - 06  23 : 59 : 59 , 987  [myid: 1 ] - INFO  [NIOServerCxn.Factory: 0.0 . 0.0 / 0.0 . 0.0 : 2181 :NIOServerCnxnFactory @197 ] - Accepted socket connection from /xxx: 45282
2014 - 01 - 06  23 : 59 : 59 , 987  [myid: 1 ] - WARN  [NIOServerCxn.Factory: 0.0 . 0.0 / 0.0 . 0.0 : 2181 :ZooKeeperServer @793 ] - Connection request from old client xxx: 45282 ; will
be dropped  if  server is in r-o mode
2014 - 01 - 06  23 : 59 : 59 , 987  [myid: 1 ] - INFO  [NIOServerCxn.Factory: 0.0 . 0.0 / 0.0 . 0.0 : 2181 :ZooKeeperServer @812 ] - Refusing session request  for  client xxx: 45282  as it
has seen zxid  0x60fd15564  our last zxid is  0x10000000f  client must  try  another server
2014 - 01 - 06  23 : 59 : 59 , 987  [myid: 1 ] - INFO  [NIOServerCxn.Factory: 0.0 . 0.0 / 0.0 . 0.0 : 2181 :NIOServerCnxn @1001 ] - Closed socket connection  for  client xxx: 45282  (no se
ssion established  for  client)
2014 - 01 - 06  23 : 59 : 59 , 989  [myid: 1 ] - INFO  [NIOServerCxn.Factory: 0.0 . 0.0 / 0.0 . 0.0 : 2181 :NIOServerCnxnFactory @197 ] - Accepted socket connection from xxx: 45285

发现Flume还是保留原来的zxid,但是现在的zxid竟然是0,所以抛出异常!

1
2
3
4
5
6
7
8
9
10
11
if  (connReq.getLastZxidSeen() > zkDb.dataTree.lastProcessedZxid) {
             String msg =  "Refusing session request for client "
                 + cnxn.getRemoteSocketAddress()
                 " as it has seen zxid 0x"
                 + Long.toHexString(connReq.getLastZxidSeen())
                 " our last zxid is 0x"
                 + Long.toHexString(getZKDatabase().getDataTreeLastProcessedZxid())
                 " client must try another server" ;
             LOG.info(msg);
             throw  new  CloseRequestException(msg);
         }

   后来问同事是怎么做的迁移:先启动一套新的集群,然后关闭老的集群,同时在老集群的一个IP:2181起了一个haproxy代理新集群以为这样,可以做到透明迁移=。=,其实是触发了ZK的bug-832导致不停的重试连接,只有重启flume才可以解决

   正确的迁移方式是,把新集群加入老集群,然后修改Flume配置等一段时间(flume自动reconfig)后再关闭老集群就不会触发这个问题了.



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1365364,如需转载请自行联系原作者


相关文章
|
Dubbo 应用服务中间件 Apache
Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?
174 4
|
监控 Dubbo Cloud Native
MSE Sync 实践:上海网鱼 ZooKeeper 集群平滑迁移上云,性能稳定性大幅提升
上海网鱼使用 MSE Sync,将迁移效率提高100%。 使用 MSE ZooKeeper 后, 可维护性,监控能力,稳定性也大幅提高。
MSE Sync 实践:上海网鱼 ZooKeeper 集群平滑迁移上云,性能稳定性大幅提升
|
容灾 Cloud Native 安全
迁移 Nacos 和 ZooKeeper,有了新工具
注册中心迁移在行业中主要有两个方案,一个是双注册双订阅模式(类似数据库双写),一个是 Sync 模式(类似于数据库 DTS);MSE 同时支持了两种模式,对于开通 MSE 服务治理客户,MSE 服务治理 Agent 帮用户做双注册和双订阅平滑迁移;对于没有开通 MSE 服务治理可用,可以通过我们今天推出的 MSE Sync 工具一键迁移。
迁移 Nacos 和 ZooKeeper,有了新工具
|
容灾 Cloud Native 安全
迁移 Nacos 和 ZooKeeper,有了新工具
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
迁移 Nacos 和 ZooKeeper,有了新工具
|
Dubbo jenkins 应用服务中间件
Dubbo多注册中心和Zookeeper服务的迁移
Dubbo多注册中心的服务迁移,即将服务从一个地儿迁到另一个地儿,例如从A地迁到B地。
245 0
Dubbo多注册中心和Zookeeper服务的迁移
|
缓存 监控 Dubbo
zookeeper到nacos的迁移实践
公司的RPC框架是dubbo,配合使用的服务发现组件一直是zookeeper,长久以来也没什么大问题。至于为什么要考虑换掉zookeeper,并不是因为它的性能瓶颈,而是考虑往云原生方向演进
849 0
zookeeper到nacos的迁移实践
|
运维 网络协议 Java
使用阿里云配置管理ACM实现zookeeper依赖服务的透明Failover迁移
在本文中我们介绍了,如何利用ACM解决服务发现场景中的下游依赖服务透明替换节点,调整服务连接超时参数等问题。 通过该例,我们可以看到,在将应用的静态配置文件方式迁移到ACM之后,通过应用主动动态监听配置变更,可以在应用和运维层面获得诸多好处,这包括省去了应用配置变更时,应用往往需要重新发布或者重启的成本,同时使Dev和Ops在配置变更场景下2者之间的沟通成本降到最低。
2593 0
|
2月前
|
消息中间件 分布式计算 资源调度
《聊聊分布式》ZooKeeper与ZAB协议:分布式协调的核心引擎
ZooKeeper是一个开源的分布式协调服务,基于ZAB协议实现数据一致性,提供分布式锁、配置管理、领导者选举等核心功能,具有高可用、强一致和简单易用的特点,广泛应用于Kafka、Hadoop等大型分布式系统中。
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1