作者:陈宇
现任爱可生南区项目经理,负责项目整体质量、安全、进度、成本管理的责任保证体系。对开源技术执着,为客户负责,喜欢极限运动,足球。
本文来源:原创投稿
一、ClickHouse-Keeper 是什么:
二、Zookeeper 与 ClickHouse-Keeper 一些场景对比
使用java开发 运维不便 要求独立部署 zxid overflow 问题 snapshot 和 log 没有经过压缩 不支持读的线性一致性
使用 C++ 开发,技术栈与 ClickHouse 统一 即可独立部署,又可集成到 ClickHouse 中 没有 zxid overflow 问题 读性能更好,写性能相当 支持对 snapshot 和 log 的压缩和校验 支持读写的线性一致性
三、配置方式

四、启动命令
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 的客户端/服务器
命令如下:
echo ruok | nc 127.0.0.1 9181 成功则返回 imok
6.2、确保 ClickHouse-Server 知道 keeper 集群,我们可以查询 system.zookeeper 表

七、如何迁移 Zookeeper 至ClicHouse-Keeper
迁移步骤如下
停止所有 Zookeeper 节点
找到 Zookeeper-leader 节点并再次停止(这一步是为了让 leader 节点生成一份 snapshot )
运行 ClickHouse-Keeper-Converter ,生成 Keeper 的 snapshot 文件
命令参考:
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
本文关键字:#ClickHouse# ##
文章推荐:
故障分析 | MySQL clone 自动重启失败的解决方式
SQLE 征稿活动开始啦!
SQLE 是爱可生开源社区开发的一款面向数据库使用者和管理者的 SQL 审核工具,旨在规范 SQL 审核上线流程,提高 SQL 质量。自 2021 年 10 月 24 日推出后得到数据库行业同仁及用户的广泛关注。





