0


clickhouse优化使用clickhouse-keeper替代zookeeper

ClickHouse Keeper 是 ZooKeeper 的替代品,与 ZooKeeper 不同,ClickHouse Keeper 是用 C++ 编写的,并使用 RAFT 算法实现,该算法允许对读写具有线性化能力。
clikhouse-keeper目的在于替换zookeeper,使用clickhouse后,服务器性能,提升了一大截,只需要在配置zookeeper的地方,改成clickhouse-keeper即可。
ClickHouse keeper相对zookeeper来说性能更好,维护更方便。
功能设计
在这里插入图片描述

使用clickhouse-keeper代替 zookeeper的步骤:

1: 部署clickhouse-keeper

部署clickhouse-keeper同部署clickhouse

1.1- 设置通信地址,以便对外通信

a. 检查端口是否被占用

假设keeper的端口是9181,与server通信接口为9444

netstat-anp|grep9181netstat-anp|grep9444

b. 设置 clickhouse-keeper的地址,每个节点内容一致

<?xml version="1.0"?>
<yandex>
    <!-- 监听IP -->
    <listen_host>0.0.0.0</listen_host>
    <keeper_server>
        <tcp_port>9181</tcp_port>
        <server_id>1</server_id>
        <log_storage_path>/var/lib/clickhouse/keeper/log</log_storage_path>
        <snapshot_storage_path>/var/lib/clickhouse/keeper/snapshots</snapshot_storage_path>

        <coordination_settings>
            <operation_timeout_ms>30000</operation_timeout_ms>
            <session_timeout_ms>60000</session_timeout_ms>
            <raft_logs_level>error</raft_logs_level>
            <force_sync>false</force_sync>
        </coordination_settings>

        <raft_configuration>
            <server>
                <id>1</id>
                <hostname>node01</hostname>
                <port>9444</port>
            </server>
            
            <server>
                <id>2</id>
                <hostname>node02</hostname>
                <port>9444</port>
            </server>
            <server>
                <id>3</id>
                <hostname>node03</hostname>
                <port>9444</port>
            </server>
           
        </raft_configuration>
    </keeper_server>
</yandex>

c. 设置clickhouse-keeper的server_id 和clickhouse-server通信端口 9444

每个节点的server_id要确保唯一,不能和其他节点重复 , keeper_server中的server_id是要和配置raft协议集群时命名的一致。

例如:

在 clickhouse-node01上的配置, <server_id>1</server_id>

在clickhouse_node02上的配置, <server_id>2</server_id>

2:备份 clickhouse-server的配置文件和数据,以及zookeeper的元数据。(预防升级失败需要回滚)

b. zookeeper的数据: 在zoo.cfg,数据目录。

dataDir=/data/zookeeper/zkdata (存储snap数据)
dataLogDir=/data/zookeeper/zklog (存储 transation命令)

4: 迁移zk的元数据到 clickhouse-keeper

a- 停止所有的zk 节点。

​ 在所有的zk节点上 执行

zkServer.sh stop

b- 建议 启停zk的leader,以便强制 复制一份 一致性的快照。

​ 查找leader节点, 在所有的节点上执行

zkServer.sh stop

在leader节点上 启停zookeeper

zkServer.sh start
zkServer.sh stop

c- 运行 clickhouse-keeper-converter , 生成snapshot

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

e- 单独启动clickhouse-keeper

如果server和keeper是安装在同一个节点,这步可以省略

sudo-su clickhouse clickhouse-keeper --config  /etc/clickhouse-server/keeper.xml --daemon

测试连接

zkCli.sh -server localhost:9181

5- 重启 clickhouse

/usr/bin/clickhouse-server stop
/usr/bin/clickhouse-server start 

6- 验证是否clickhouse-keeper是否正常运行

echo ruok |nc localhost 9181

期望看到:imok

7- 验证clickhouse是否正常运行

连接客户端,创建一张分布式表,查看数据是否能正常操作分布式表(CRUD)。

select*from system.clusters;

8- 通过nginx接入clickhouse

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;
    }
}

本文转载自: https://blog.csdn.net/robinhunan/article/details/131722625
版权归原作者 老朱-yubing 所有, 如有侵权,请联系我们删除。

“clickhouse优化使用clickhouse-keeper替代zookeeper”的评论:

还没有评论