https://clickhouse.com/docs/en/operations/clickhouse-keeper/
ZooKeeper最早的非常著名的开源协调系统之一. 它是通过Java语言实现的, 有一个相当节点和强大的数据模型.ZooKeeper的协调算法叫做 ZAB (ZooKeeper Atomic Broadcast) zk不能保证读取的线性化,以为每个zk节点服务都是通过本地线性读的. ClickHouse Keeper是通过C++写的,和zookeeper不一样,ClickHouse Keeper使用的RAFT算法. 这个算法允许线性读和写, 已经有几种不同的语言的开源实现.
ClickHouse Keeper 默认提供了一些保证和ZooKeeper是一样的 (线性写, 非线性读)和. clickhouse keeper有一个兼容的客户端服务端协议, 所以任何标准的zookeeper客户端都可以用来与clickhouse keeper进行交互. 快照和日志的格式与ZooKeeper不兼容, 但是通过clickhouse-keeper-converter
允许转换 ZooKeeper 数据到 ClickHouse Keeper 快照. ClickHouse Keeper的interserver协议和zookeeper也不兼容,所以ZooKeeper / ClickHouse Keeper 混合部署集群是不可能的.
ClickHouse Keeper支持访问控制列表(ACL)的方式和[ZooKeeper]
1.在每个节点上,添加以下条目以允许通过网络接口进行外部通信。
< listen_host > 0.0.0.0 < / listen_host >
2.启用Zookeeper组件。它将使用ClickHouse Keeper引擎:
<zookeeper>
<node>
<host>keeper01</host>
<port>9181</port>
</node>
<node>
<host>keeper02</host>
<port>9182</port>
</node>
<node>
<host>keeper03</host>
<port>9183</port>
</node>
</zookeeper>
3.keeper配置
ClickHouse Keeper 完全可以作为ZooKeeper的独立替代品或者作为ClickHouse server服务的内部组件, 但是这两种方式下的配置使用 .xml
格式也几乎都是相同的.
①ClickHouse Keeper 配置的标签是
. Keeper 配置有以下这些参数:
tcp_port
— 客户端连接的端口(ZooKeeper默认是2181
).tcp_port_secure
— client 和 keeper-server之间的SSL连接的安全端口.server_id
— 唯一的服务器ID, ClickHouse Keeper 集群的每个参与组件都必须有一个唯一的编号(1, 2, 3, 等等).log_storage_path
— 协调日志的路径, 最好存放在不繁忙的机器上 (和ZooKeeper一样).snapshot_storage_path
— 协调快照的路径.其他常见参数继承自ClickHouse server的配置 (listen_host
, logger
, 等等).
②内部协调配置位于
部分:
operation_timeout_ms
— 单个客户端操作的超时时间(ms)(默认值:10000)。min_session_timeout_ms
— 客户端会话的最小超时时间(ms)(默认值:10000)。session_timeout_ms
— 客户端会话最大超时时间(ms)(默认100000)。dead_session_check_period_ms
— ClickHouse Keeper检查死会话并删除它们的频率(毫秒)(默认值:500)。heart_beat_interval_ms
— ClickHouse Keeper的leader发送心跳频率(毫秒)(默认为500)。election_timeout_lower_bound_ms
— 如果follower在此间隔内没有收到leader的心跳,那么它可以启动leader选举(默认为1000).election_timeout_upper_bound_ms
— 如果follower在此间隔内没有收到leader的心跳,那么它必须启动leader选举(默认为2000)。rotate_log_storage_interval
— 单个文件中存储的日志记录数量(默认100000条)。reserved_log_items
— 在压缩之前需要存储多少协调日志记录(默认100000)。snapshot_distance
— ClickHouse Keeper创建新快照的频率(以日志记录的数量为单位)(默认100000)。snapshots_to_keep
— 保留多少个快照(默认值:3)。stale_log_gap
— 当leader认为follower过时并发送快照给follower而不是日志时的阈值(默认值:10000)。fresh_log_gap
— 当节点变成新鲜时的间隔(默认值:200)。max_requests_batch_size
- 发送到RAFT之前的最大批量请求数(默认值:100)。force_sync
— 在每次写入协调日志时是否调用’ fsync '(默认值:true)。quorum_reads
— 通过整个RAFT共识以类似的速度执行读请求和写请求(默认值:false)。raft_logs_level
— 关于协调的文本日志级别 (trace, debug, 等等) (默认: system default).auto_forwarding
— 允许将follower的请求转发到leader (默认: true).shutdown_timeout
— 等待内部连接完成并关闭(ms)(默认值:5000)。startup_timeout
— 如果服务器在指定的超时时间内没有连接到其他仲裁参与者,它将终止(ms)(默认值:30000)。four_letter_word_white_list
— 4个字母的白名单列表 (默认: “conf,cons,crst,envi,ruok,srst,srvr,stat,wchc,wchs,dirs,mntr,isro”).③仲裁配置位于
部分,并且保护一些描述
整个仲裁的唯一参数是“secure”,它为仲裁参与者之间的通信启用加密连接。如果节点之间的内部通信需要SSL连接,则该参数可以设置为“true”,否则不指定。
每个
的主要参数是:
id
— 仲裁中的服务器标识符。hostname
— 放置该服务器的主机名。port
— 服务器监听连接的端口。<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>warning</raft_logs_level>
</coordination_settings>
<raft_configuration>
<server>
<id>1</id>
<hostname>keeper01</hostname>
<port>9444</port>
</server>
<server>
<id>2</id>
<hostname>keeper02</hostname>
<port>9445</port>
</server>
<server>
<id>3</id>
<hostname>keeper03</hostname>
<port>9446</port>
</server>
</raft_configuration>
</keeper_server>
1.与server绑定,启动server即可
2.运行独立的ClickHouse Keeper
clickhouse-keeper --config /etc/your_path_to_config/config.xml
如果你没有符号链接(’ clickhouse-keeper ‘),你可以创建它或指定’ keeper '作为参数:
clickhouse keeper --config /etc/your_path_to_config/config.xml
select * from system.zookeeper where path = '/';
查看主节点可以执行四字命令eg:
echo stat | nc localhost 9181
从ZooKeeper无缝迁移到ClickHouse Keeper是不可能的,你必须停止你的ZooKeeper集群,转换数据并启动ClickHouse Keeper。’ ClickHouse - Keeper -converter '工具允许将ZooKeeper日志和快照转换为ClickHouse Keeper快照。它只适用于ZooKeeper 大于 3.4。迁移的步骤:
方案一:
clickhouse-keeper-converter
(每个配置了keeper的节点均需要执行), 如下: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
4.若有配置keeper节点没有执行步骤3,空节点可能启动更快,成为leader
配置文件可更改四字命令白名单
<four_letter_word_white_list> — 4个字母的白名单列表
(默认: "conf,cons,crst,envi,ruok,srst,srvr,stat,wchc,wchs,dirs,mntr,isro").
stat
: 列出服务器和连接客户机的简要详细信息。srvr
: 列出服务器的完整详细信息。mntr
: 输出可用于监视集群运行状况的变量列表。conf
: 打印服务配置详细信息。srst
: 重置服务器统计数据。该命令将影响’ srvr ', ’ mntr ‘和’ stat '的结果。cons
: 列出所有连接到此服务器的客户端的完整连接/会话详细信息。包括接收/发送的包数、会话id、操作延迟、最后执行的操作等信息。crst
: 重置所有连接的连接/会话统计信息。envi
: 打印服务环境详细信息dirs
: 以字节为单位显示快照和日志文件的总大小isro
: 测试服务器是否以只读模式运行。如果处于只读模式,服务器将响应“ro”,如果不是只读模式,则响应“rw”。wchs
: 列出服务器的监视的简要信息。wchc
: 按会话列出服务器的监视的详细信息。这将输出一个会话(连接)列表和相关的监视(路径)。注意,根据监视的数量,此操作可能会很昂贵(即影响服务器性能),请谨慎使用。问题1:当只启动一台keeper时也需配置
问题2:keeper重启找不到状态:删掉状态文件重新启动(状态文件默认在coordination文件下,与日志和快照文件同目录)
问题3:端口冲突:修改端口
问题4:关于内存分配
情形1:与server配置在一个进程,可以共享内存
情形2:与server分开配置,通过限制docker容器大小