ClickHouse Keeper 是 ZooKeeper 的替代品,与 ZooKeeper 不同,ClickHouse Keeper 是用 C++ 编写的,并使用 RAFT 算法实现,该算法允许对读写具有线性化能力。
clikhouse-keeper目的在于替换zookeeper,使用clickhouse后,服务器性能,提升了一大截,只需要在配置zookeeper的地方,改成clickhouse-keeper即可。
ClickHouse keeper相对zookeeper来说性能更好,维护更方便。
功能设计
部署clickhouse-keeper同部署clickhouse
假设keeper的端口是9181,与server通信接口为9444
netstat -anp | grep 9181
netstat -anp | grep 9444
0.0.0.0
9181
1
/var/lib/clickhouse/keeper/log
/var/lib/clickhouse/keeper/snapshots
30000
60000
error
false
1
node01
9444
2
node02
9444
3
node03
9444
每个节点的server_id要确保唯一,不能和其他节点重复 , keeper_server中的server_id是要和配置raft协议集群时命名的一致。
例如:
在 clickhouse-node01上的配置,
在clickhouse_node02上的配置,
dataDir=/data/zookeeper/zkdata (存储snap数据)
dataLogDir=/data/zookeeper/zklog (存储 transation命令)
在所有的zk节点上 执行
zkServer.sh stop
查找leader节点, 在所有的节点上执行
zkServer.sh stop
在leader节点上 启停zookeeper
zkServer.sh start
zkServer.sh stop
clickhouse-keeper-converter --zookeeper-logs-dir /data/zookeeper/zklog/version-2 --zookeeper-snapshots-dir /data/zookeeper/zkdata/version-2 --output-dir /var/lib/clickhouse/keeper/snapshots
chown -R clickhouse:clickhouse /var/lib/clickhouse
scp -r /var/lib/clickhouse/keeper root@clickhouse-keeper:/var/lib/clickhouse
如果server和keeper是安装在同一个节点,这步可以省略
sudo -su clickhouse clickhouse-keeper --config /etc/clickhouse-server/keeper.xml --daemon
zkCli.sh -server localhost:9181
/usr/bin/clickhouse-server stop
/usr/bin/clickhouse-server start
echo ruok | nc localhost 9181
期望看到:imok
连接客户端,创建一张分布式表,查看数据是否能正常操作分布式表(CRUD)。
select * from system.clusters;
upstream clickhouse{
server node1:8123 weight=1;
server node2:8123 weight=1;
server node3:8123 weight=1;
}
server{
listen 8123;
location /{
proxy_pass http://clickhouse;
}
}