前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术分享 | ClickHouse-Keeper 初探

技术分享 | ClickHouse-Keeper 初探

原创
作者头像
爱可生开源社区
发布2022-03-15 13:37:33
2.1K0
发布2022-03-15 13:37:33
举报
文章被收录于专栏:爱可生开源社区

作者:陈宇

现任爱可生南区项目经理,负责项目整体质量、安全、进度、成本管理的责任保证体系。对开源技术执着,为客户负责,喜欢极限运动,足球。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

一、ClickHouse-Keeper 是什么:

ClickHouse 社区在 21.8 版本中开始引入了 ClickHouse-Keeper ,直至 ClickHouse 21.12 发布公告提到 ClickHouse Keeper 功能基本完成。

ClickHouse Keeper 是 ZooKeeper 的替代品,与 ZooKeeper 不同,ClickHouse Keeper 是用 C++ 编写的,并使用 RAFT 算法实现,该算法允许对读写具有线性化能力,具有多种不同语言的开源实现。

二、Zookeeper与ClickHouse-Keeper一些场景对比

为什么要引入 ClickHouse-Keeper 呢?主要是 ClickHouse 使用 Zookeeper 有着众多痛点:

  • 使用java开发
  • 运维不便
  • 要求独立部署
  • zxid overflow 问题
  • snapshot 和 log 没有经过压缩
  • 不支持读的线性一致性

而 ClickHouse-Keeper 存在着以下优点:

  • 使用 C++ 开发,技术栈与 ClickHouse 统一
  • 即可独立部署,又可集成到 ClickHouse 中
  • 没有 zxid overflow 问题
  • 读性能更好,写性能相当
  • 支持对 snapshot 和 log 的压缩和校验
  • 支持读写的线性一致性

三、配置方式

相较之前的集群配置,没有太大区别,而 ClickHouse-Keeper 仅当<keeper_server>标签存在于配置中时才会运行,配置模板如下:

四、启动命令

代码语言:sql
复制
clickhouse-keeper --config /etc/your_path_to_config/config.xml

五、参数说明

  • tcp_port:客户端连接的端口(ZooKeeper 的默认值为2181)
  • tcp_port_secure:用于客户端和 keeper-server 之间 SSL 连接的安全端口
  • server_id:Keeper集群的每个节点唯一ID
  • log_storage_path:日志路径,最好将日志存储在IO性能强设备
  • snapshot_storage_path:快照路径

<keeper_server>.<coordination_settings>部分

  • operation_timeout_ms:单个客户端操作超时配置
  • min_session_timeout_ms:客户端会话最小超时
  • session_timeout_ms:客户端会话的最大超时
  • dead_session_check_period_ms:检查过期会话并将其删除的频率
  • heart_beat_interval_ms:leader 向 follower 发送心跳的频率
  • election_timeout_lower_bound_ms:如果 follower 在此时间间隔内没有收到 leader 的心跳,则可以发起 leader 选举
  • rotate_log_storage_interval:在单个文件中存储多少日志记录
  • reserved_log_items:压缩前要存储多少日志记录
  • snapshot_distance:创建快照的频率
  • snapshots_to_keep:快照保留份数
  • max_requests_batch_size:在将请求发送到 RAFT 之前,请求中的最大批处理请求大小
  • raft_logs_level:raft日志记录级别
  • auto_forwarding:允许将follower的写请求转发给leader
  • shutdown_timeout:等待完成内部连接并关闭的时间

<keeper_server>.<raft_configuration>部分

  • Id:集群的每个节点ID
  • Hostname:服务器的主机名
  • Port:服务器监听端口

六、状态检查

6.1、ruok 主要用于诊断 Keeper 的客户端/服务器

命令如下:

代码语言:sql
复制
echo ruok | nc 127.0.0.1 9181

成功则返回 imok

6.2、确保 ClickHouse-Server 知道 keeper 集群,我们可以查询 system.zookeeper 表

注:输出以上信息代表安装成功

七、如何迁移 Zookeeper 至ClicHouse-Keeper

既然 ClickHouse-Keeper 优势这么明显,那么如何将 Zookeeper 中的数据迁移到 ClickHouse-Keeper 中呢?官方提供了迁移工具 ClickHouse-Keeper-Converter, 它能够将 Zookeeper 中的数据 dump 成 ClicHouse-Keeper 能够加载的 snapshot 。

迁移步骤如下

  • 停止所有 Zookeeper 节点
  • 找到 Zookeeper-leader 节点并再次停止(这一步是为了让 leader 节点生成一份 snapshot )
  • 运行 ClickHouse-Keeper-Converter ,生成 Keeper 的 snapshot 文件

命令参考:

代码语言:sql
复制
clickhouse-keeper-converter --zookeeper-logs-dir /var/lib/zookeeper/version-2 --zookeeper-snapshots-dir /var/lib/zookeeper/version-2 --output-dir /path/to/clickhouse/keeper/snapshots
  • 启动 ClickHouse-Keeper ,使其加载上一步中的 snapshot

参考文献:https://clickhouse.com/docs/en/operations/clickhouse-keeper/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、ClickHouse-Keeper 是什么:
  • 二、Zookeeper与ClickHouse-Keeper一些场景对比
  • 三、配置方式
  • 四、启动命令
  • 五、参数说明
  • 六、状态检查
    • 6.1、ruok 主要用于诊断 Keeper 的客户端/服务器
      • 6.2、确保 ClickHouse-Server 知道 keeper 集群,我们可以查询 system.zookeeper 表
      • 七、如何迁移 Zookeeper 至ClicHouse-Keeper
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档