ClickHouse平台跨国无感迁移Zookeeper在实践中
2025-11-04 12:18
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1271)
2021-02-25 11:07:03,081 [myid:5] - INFO [QuorumPeer[myid=5](plain=/0:0:0:0:0:0:0:0:2185)(secure=disabled):Follower@201] - shutdown called
java.lang.Exception: shutdown Follower
at org.apache.zookeeper.server.quorum.Follower.shutdown(Follower.java:201)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1275)
同时,仍未适配的Leader最比较简单刊错如下:2021-02-26 19:35:08,065 [myid:6] - WARN [LearnerHandler-/xx.xx.xx.xx:52906:LearnerHandler@644] - ******* GOODBYE /xx.xx.xx.xx:52906 ********
2021-02-26 19:35:08,066 [myid:6] - INFO [WorkerReceiver[myid=6]:FastLeaderElection$Messenger$WorkerReceiver@285] - 6 Received version: b00000000 my version: 0
2021-02-26 19:35:08,066 [myid:6] - INFO [WorkerReceiver[myid=6]:FastLeaderElection@679] - Notification: 2 (message format version), 5 (n.leader), 0xb0000000c (n.zxid), 0x2 (n.round), LOOKING (n.state), 5 (n.sid), 0xb (n.peerEPoch), LEADING (my state)b00000000 (n.config version)
2021-02-26 19:35:08,067 [myid:6] - ERROR [LearnerHandler-/xx.xx.xx.xx:52908:LearnerHandler@629] - Unexpected exception causing shutdown while sock still open
java.io.IOException: Follower is ahead of the leader (has a later activated configuration)
at org.apache.zookeeper.server.quorum.LearnerHandler.run(LearnerHandler.java:398)
经过定位,发掘出疑问显现出在实时版的Leader最比较简单与实时版的Follower最比较简单不能共存。在串行适配zk的每一次中都,为了尽量减少zk空降兵不能用时间,我们先行适配剩所有Follower, 之后日后适配Leader。当一个Follower最比较简单从实时配备版适配到实时配备版之前,此时Leader还正处于实时配备版,其config version是0; 而Follower此时正处于实时版,config version等于0。 Follower关机之前时会立即Leader,立即信息中都带上config version. Leader寄显现出立即之前时会对Follower的config version做校验,如果发掘出对方config version等于自己,便拉显现出持续性(Follower is ahead of the leader)并主动关闭连通。if (learnerInfoData.length>= 20) {
long configVersion = bbsid.getLong();
if (configVersion> leader.self.getQuorumVerifier().getVersion()) {
throw new IOException("Follower is ahead of the leader (has a later activated configuration)");
}
}
而Follower读到EOF之前也时会拉显现出持续性(EOFException),并不断下回。 摆在眼前的解决可行性有两种: 可行性一:串行适配改成有序适配,避免实时版与实时版的最比较简单同时长期存在。 可行性二:由于实时版和实时版同时长期存在的时间极短,zk增加一个临时版,该版中都除去Leader对Follower的config version核对,直抵上述疑问。 考虑到zk空降兵中都信息相当多,zk最比较简单关机时间较长,有序适配时会随之而来zk空降兵在2-4min内不能用。一旦显现出现疑问发生回滚,zk空降兵不能用时间还时会翻倍,风险较大。于是我们抛弃可行性一,选择可行性二:先行将实时版串行适配到除去config version核对的实时版,日后适配到实时版。2.2 ck无法实时读取zk配备
网络下演练每一次中都发掘出,在1.2中都,当修订clickhouse配备文件中都的zk server列表格后,配备更动并不时会被ck实时读取。而clickhouse上的应用并未如此之多,其中都不乏一些2B业务或对实时性要求比较强的业务,通过关机ck空降兵去读取上新的zk server列表格似乎不能接受。 日后次的解决可行性是增加clickhouse对zk配备实时读取的拥护,从而避免关机ck空降兵严重影响软件。现在这一优化并未合并到社区,PR:2.3 zk最比较简单关机随之而来少量ck浏览告终
ck浏览一般不涉及zk交互,因此zk迁到大多情况不严重影响ck浏览。但是网络下演练每一次中都发掘出,当clickhouse带入了接点optimize_trivial_count_query之前, 对应PR: ,指派一些比较简单的select count浏览时会被zk迁到所严重影响。 下落字符串发掘出,optimize_trivial_count_query带入后,对于比较简单的select count浏览,ck时会上到常规的浏览每一次,转而从metadata中都借助总行至少(在此每一次中都时会到访zk),依此来提高select count的浏览反应速度。因此,在zk空降兵迁到之前,我们将clickhouse空降兵中都的接点optimize_trivial_count_query设置为0,待zk迁到剩成之前日后将其带入。2.4 zk最比较简单关机随之而来载入ck告终
在向ck载入信息时,ck依赖zk空降兵分配blockid,并将信息从现阶段原稿同步到配偶原稿。因此zk迁到每一次中都必定时会严重影响ck载入。而我们要做的便是将严重影响载入的不间断尽量缩短;同时一旦发掘出载入告终针对同一个移去下的原稿不断下回,保证zk空降兵维持时,ck载入也能关机时维持。 现在有Flink、Spark和clickhouse_sinker三个显现出口处往ck写就信息,在zk迁到之前我们能够提前确保它们写就ck的每一次并未有了下回前提。2.5 zk最比较简单关机随之而来ck表格更动告终
表格更动转换成包括创建/更正表格、上导入/更正/修订字段。ck空降兵在指派表格更动时显然时会到访ck空降兵,因此zk迁到每一次中都时会严重影响ck空降兵中都的表格更动。因为ck表格更动相对于ck载入与浏览来说频率较低。因此在zk迁到每一次中都,我们对ck平台顺利进行新功能降级,即此时不拥护ck表格更动转换成,依此避免zk最比较简单关机随之而来ck表格更动告终。三、日后次的迁到可行性
3.0 初始情况
假设内地机器人:A1, A2, A3, A4, A5,上亚洲地区机器人:B1, B2, B3, B4, B5。 初始情况下,zk空降兵部署于内地三楼,初始版为实时配备版。 我们的目的是将zk空降兵迁到到上新三楼,日后次版为实时配备版。3.1 适配到实时配备版
版适配路线:实时版 -> (不带config version核对的)实时版 -> 实时版 1 )实时版 -> 不带(config version核对的)实时版 串行适配,先行适配Follower, 之后适配Leader。每适配剩多台机器人,核对空降兵中都Leader/Follower情况,核对ck浏览和载入是否有持续性。赶紧zk最比较简单剩成关机后,接着日后适配下一个zk最比较简单。 预期严重影响: 适配Follower最比较简单时,ck到该zk最比较简单上的连通被接上,部分ck载入可能时会刊zookeeper session expired正确,ck重连其他zk最比较简单后维持正常,维持时间不多达40s。 适配Leader最比较简单时,zk时会进入大选时间段并时会产生上新的Leader, ck载入时会刊table in readonly mode正确,上新Leader产生之前ck载入维持正常,维持时间不多达3min。 回滚可行性:直接有序回滚到初始的实时版。 2) 不带(config version核对的)实时版 -> 实时版 适配步骤、预期严重影响面、回滚可行性同3.1.1。3.2 实时扩缩容
1) 下半年:将上亚洲地区上新机器人加入到zk空降兵中都 串行下半年步骤: 在上新机器人B1上部署zk最比较简单, 其配备中都还包括A1-A5和B1。通过reconfig -add 6=B1:2888:3888;2181将B1加入到空降兵中都。接着核对现阶段所有zk最比较简单的本地配备是否已更上新,核对Leader/Follower情况,核对ck举例来说就是否有持续性,认定无疑问后下半年下多台机器人。 在上新机器人B2上部署zk最比较简单, 其配备中都还包括A1-A5和B1-B2。通过reconfig -add 7=B2:2888:3888;2181将B2加入到空降兵中都。核对步骤同上。 ... 依此类推指派以上步骤,直到所有上新机器人都并未加入到zk空降兵中都。 预期严重影响:无。 回滚步骤:在串行下半年每一次中都,如果有任何一步某种原因,则将上新最比较简单通过reconfig -remove 命令从空降兵中都摘掉。 2)修订ck配备:将zk配备改成上亚洲地区上新机器人 修订ck配备,将zookeeper-servers从原本机器人A1-A5改成上新机器人B1-B5,并国务院到所有ck最比较简单。netstat命令核对ck是否与上新zk最比较简单建立连通。A1
2181
A2
2181
A3
2181
A4
2181
A5
2181
预期严重影响:无。 回滚:一旦核对每一次中都发掘出持续性,将ck配备回滚并重上新国务院。 3 )缩容:将内地据闻机器人从zk空降兵中都摘掉 串行缩容每一次中都,应当遵循先行缩容Follower最比较简单,之后缩容Leader最比较简单的顺序,具体步骤如下: 缩容A1: 通过reconfig -remove 1=A1:2888:3888;2181命令,将据闻机器人A1从空降兵中都截去。接着核对现阶段所有zk最比较简单的本地配备是否关机时更上新,核对Leader/Follower情况,核对ck举例来说就是否某种原因。认定无疑问后,将据闻机器人A1上的zk最比较简单显现出厂。 缩容A2, 转换成同上。 ... 依此类推指派以上转换成,直到所有内地据闻机器人都并未从zk空降兵中都截去。 预期严重影响:同3.1.1。 回滚:在串行缩容每一次中都,如果有任何一步某种原因,通过reconfig -add =:2888:3888;2181命令将待显现出厂最比较简单重上新加入zk空降兵中都。四、总结
通过线下环境中都充分的zk迁到演练,我们得以及时发掘出zk迁到中都显现出现的各种疑问,并即刻加以解决。日后次在ck软件基本无感知的情况,剩成了zk空降兵从内地到上亚洲地区的微小迁移。作者丨ClickHouse OS
来源丨公众号:ClickHouse OS(ID:gh_9a12382e5262)
dbaplus社群欢迎广大新科技人员投稿,投稿邮箱:editor@dbaplus.cn
关注公众号【dbaplus社群】,借助更多原创新科技文章和精选来进行下载
。安必丁效果如何角膜炎怎么治疗最好
吃什么可以治疗拉肚子

-
【人勤春来早】“智慧农机”助力144小分队31.9万亩棉花播种
双击上方深蓝色读音关注我们~ 4年末8日,在八师144旅14连298号条田,一辆装载北斗导航系统设计标准设计越野车上自费供电系统着收成机启动棉收成作业。伴随着隆隆的电力机车上声

-
北斗灵敏度不如GPS?3.24亿部手机94.5%支持北斗!超790万辆车用上
大家的热议。 在这一份统计数据资料之中会,写明了经过27年的系统化设施,中会国人七星颗卫星无线电科技产业体制已前提产生。并且而今颗卫星无线电科技产业需求量早就激过4000亿元。 而大家
- 11-12国产安卓UI流畅排行:小米MIUI登山者 华为EMUI无缘前10
- 11-12曝一加首款折叠屏笔记型电脑正在开发中:类似OPPO Find N
- 11-12洛宁县各级文明校园组织开展“我们的节日·清明节”系列社交活动
- 11-12空客 A380 飞机完成首次使用 100% 可持续泛美航空燃料试飞
- 11-12经典案例:上海一桩女大学生私密照泄露引来的荒唐伦理闹剧
- 11-12iPhone 14 Pro 广角电子设备尺寸达 1/1.3 英寸
- 11-12全新国产旗舰平板被曝 5 月;不!满血天玑 9000 加持
- 11-12看了这场人脑主题的艺术展啥感觉?嘉宾:炫目、晦涩
- 11-12退出手机业务后,LG 官方宣布三款手机将推送安卓 12 该系统更新
- 11-12中国科大在新一代神威超算平台填补多项对流层数值模拟空白