searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Clickhouse集群拆分zookeeper实践

2023-07-26 01:21:30
118
0

clickhouse常规方式部署可能会遇到zookeeper压力大的场景,此时zookeeper的拆分会是一种有效的方法。

常规情况下Clickhouse集群架构如下:

        可以看到多个clickhouse分片共同使用一个zookeeper集群。

        但是这样往往会遇到:

  1. 添加更多的clickhouse分片,造成zk负载过大
  2. 更多的数据写入,造成zk负载过大
  3. 建更多的表,造成zk负载过大

    

       总之,如果不能移除zk,那么一定要想办法解决zk的瓶颈问题。

       可能有小伙伴会问了:

       一开始搭建集群的时候就固化zk对应的分片数,用多组zk来承载,降低压力,会不会避免这个问题。

       答案是:不一定。

       一般情况下这样做确实可以在一定程度上规避这个问题,但是如果这个集群是已经有一定负载的老集群,怎么办?

       结论是,拆,虽然不能绝对解决问题,但是针对大部分的场景,拆可以解决眼前的问题,并为业务迁移赢得时间。

       现在问题变成了----怎么拆。

       拆集群的前提:

          1.数据避免直接写入分布式表

          2.数据可以指定写哪些节点(屏蔽哪些节点)

 

       Ok,现在开始:

     1.zk扩容

       假设原来zk有三个节点,那么现在添加3个节点(observer模式),等待zk数据同步。

       稍后数据会同步到observer节点。

  1. 停止部分shard数据写入

       这部分shard在zk上的数据会停止更新,最好等待24小时,待后台最后的merge完成。

  1. 修改部分shard的配置,使其指向新的zk,并重启生效

       此时因为zk是同一套集群,数据是一致的,故不会影响查询和同步。

  1. 原来的observer 3个节点重启,重新组合成一个新的集群

       Zk重启只影响数据的写入,此时查询是不受影响的(查询要避免init query指向待拆分的分片),而此时数据不会往这些分片写,故整个操作是安全的。

  1. 恢复部分分片的数据写入

       此时集群已经完成了拆分。

 

    注意:这个办法只适合于有资源且压力不是极大的集群,如果集群只有一个分片,此时只能做数据迁移了。

0条评论
0 / 1000
孟****帅
5文章数
0粉丝数
孟****帅
5 文章 | 0 粉丝
原创

Clickhouse集群拆分zookeeper实践

2023-07-26 01:21:30
118
0

clickhouse常规方式部署可能会遇到zookeeper压力大的场景,此时zookeeper的拆分会是一种有效的方法。

常规情况下Clickhouse集群架构如下:

        可以看到多个clickhouse分片共同使用一个zookeeper集群。

        但是这样往往会遇到:

  1. 添加更多的clickhouse分片,造成zk负载过大
  2. 更多的数据写入,造成zk负载过大
  3. 建更多的表,造成zk负载过大

    

       总之,如果不能移除zk,那么一定要想办法解决zk的瓶颈问题。

       可能有小伙伴会问了:

       一开始搭建集群的时候就固化zk对应的分片数,用多组zk来承载,降低压力,会不会避免这个问题。

       答案是:不一定。

       一般情况下这样做确实可以在一定程度上规避这个问题,但是如果这个集群是已经有一定负载的老集群,怎么办?

       结论是,拆,虽然不能绝对解决问题,但是针对大部分的场景,拆可以解决眼前的问题,并为业务迁移赢得时间。

       现在问题变成了----怎么拆。

       拆集群的前提:

          1.数据避免直接写入分布式表

          2.数据可以指定写哪些节点(屏蔽哪些节点)

 

       Ok,现在开始:

     1.zk扩容

       假设原来zk有三个节点,那么现在添加3个节点(observer模式),等待zk数据同步。

       稍后数据会同步到observer节点。

  1. 停止部分shard数据写入

       这部分shard在zk上的数据会停止更新,最好等待24小时,待后台最后的merge完成。

  1. 修改部分shard的配置,使其指向新的zk,并重启生效

       此时因为zk是同一套集群,数据是一致的,故不会影响查询和同步。

  1. 原来的observer 3个节点重启,重新组合成一个新的集群

       Zk重启只影响数据的写入,此时查询是不受影响的(查询要避免init query指向待拆分的分片),而此时数据不会往这些分片写,故整个操作是安全的。

  1. 恢复部分分片的数据写入

       此时集群已经完成了拆分。

 

    注意:这个办法只适合于有资源且压力不是极大的集群,如果集群只有一个分片,此时只能做数据迁移了。

文章来自个人专栏
Clickhouse使用技巧之zk拆分
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0