当前位置:首页 >> 金融
金融

ClickHouse平台跨国无感迁移Zookeeper在实践中

2025-11-04 12:18

che.zookeeper.server.quorum.Follower.followLeader(Follower.java:78)

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社群】,借助更多原创新科技文章和精选来进行下载

安必丁效果如何
角膜炎怎么治疗最好
吃什么可以治疗拉肚子

上一篇: 同济大学某电脑博士感叹:找工作太难,连简历关都过不去

下一篇: 海峡股份(002320):2021年大奖利润分配预案,每10股派发现金红利1.0元(含税)

友情链接