ClickHouse混合部署测试指导
发表于 2025/09/12
0
作者 | 朱勇
1 环境信息
鲲鹏硬件环境信息:
CPU |
鲲鹏920 5220处理器(32核) |
内存 |
384G |
硬盘 |
系统盘:1 * RAID 0(1 * 1.2T SAS HDD) 数据盘:12 * RAID 0(12 * 8T SATA HDD) |
网卡 |
业务网络10GE 管理网络GE |
操作系统 |
openEuler 22.03 LTS |
x86硬件环境信息:
CPU |
Intel 5218R(20核40线程) |
内存 |
384G |
硬盘 |
系统盘:1 * RAID 0(1 * 1.2T SAS HDD) 数据盘:12 * RAID 0(12 * 8T SATA HDD) |
网卡 |
业务网络10GE 管理网络GE |
操作系统 |
CentOS 7.4 |
如果仅仅是测试混合部署的功能,那么对Arm和x86的核数没有要求,只要是Arm和x86架构的机器就行。
软件信息:
软件 |
版本 |
Bisheng JDK |
jdk8u342 |
ZooKeeper |
3.8.0 |
ClickHouse |
22.8.13.20 |
2 集群规划
使用2+2部署一个ClickHouse集群,验证混合部署的功能。
机器名称 |
用途 |
机器IP地址 |
Arm机器1(agent1) |
分片1 副本1 |
xx.xx.xx.132 |
x86机器2(agent2) |
分片1 副本2 |
xx.xx.xx.133 |
x86机器1(agent3) |
分片2 副本1 |
xx.xx.xx.134 |
Arm机器2(agent4) |
分片2 副本2 |
xx.xx.xx.138 |

3 部署
请参见《大数据OmniMV ClickHouse 性能测试指南》部署ClickHouse。注意分配/副本的写法,比如:
<remote_servers>
<ck_cluster>
<!-- 数据分片1 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ARM节点1 IP</host>
<port>9000</port>
</replica>
<replica>
<host>X86节点2 IP</host>
<port>9000</port>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>X86节点1</host>
<port>9000</port>
</replica>
<replica>
<host>ARM节点2</host>
<port>9000</port>
</replica>
</shard>
</ck_cluster>
</remote_servers>
每个节点的<macros></macros>标签需要有差异,根据shard,replica来进行配置:
<macros>
<cluster>mycluster</cluster>
<shard>0x</shard>
<replica>0x</replica>
</macros>
集群验证:
在每个节点上启动ClickHouse Server节点。
cllickhouse start
进入ClickHouse Client节点。
clickhouse client -h 192.168.58.168 --port 19000 -n -m
如启动不成功或进入不了数据库,可通过以下命令启动。
/usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml --pid-file /var/run/clickhouse-server/clickhouse-server.pid
启动后关闭远程连接窗口。重新连接服务器再尝试进入数据库。
首先可以查看cluster信息。
select * from system.clusters where cluster='mycluster';
创建on cluster表。
CREATE TABLE customer on cluster mycluster
(
C_CUSTKEY UInt32,
C_NAME String,
C_ADDRESS String,
C_CITY LowCardinality(String),
C_NATION LowCardinality(String),
C_REGION LowCardinality(String),
C_PHONE String,
C_MKTSEGMENT LowCardinality(String)
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default.customer','{replica}') ORDER BY (C_CUSTKEY);
创建分布式表。
CREATE TABLE default.customer_all on cluster mycluster as default.cusomer ENGINE = Distributed(mycluster, default, customer, rand());
查询分布式表,会利用所有的计算资源。
查询本地表,数据只会在同一个shard同步,然后计算资源也是只用到了本机的计算资源。
4 混合部署功能验证
4.1 ClickHouse标准数据集SSB测试验证
请参见《大数据OmniMV ClickHouse 性能测试指南》中的“SSB-分布式性能提升测试”章节。集群环境如下:
插入数据测试:
4.2 ClickHouse可靠性测试验证
须知:ClickHouse读写测试均需要验证。
验证机器的容错功能:关闭其中一个节点的clickhouse server服务,比如关闭ARM节点1或者X86节点1,其余3个节点仍然正常运行,预计SQL任务还是正常执行。
验证结果:
Arm节点1执行clickchouse stop
查询数据:
插入数据:
验证数据的完整性:关闭同一个shard分片的clickhouse server服务,比如关闭ARM节点1和X86节点2,如果失去了shard分片1,预计SQL任务会运行失败。
验证结果:
Arm节点1和x86节点2执行clickchouse stop
验证机器故障恢复功能:在ARM节点1和X86节点2同时故障的情况下,开始恢复其中一个节点,比如恢复ARM节点1,预计SQL任务还是会正常运行。
重新启动x86节点2:
关闭x86节点2,重新启动arm节点1:
插入数据验证时存在异常,重新启动x86节点2后数据恢复正常。
验证机器故障节点替换功能:ARM节点1故障了,使用另外一个节点ARM3节点去替换ARM节点1,数据进行备份转移之后,进行查询,预计SQL任务可以正常运行。
Arm节点1停止服务:
clickhouse stop
/usr/local/zookeeper/bin/zkServer.sh stop
修改agen2、agent3、agent4的配置文件并重启ClickHouse:
sed -i "s#10.44.119.181#10.44.119.132#g" /etc/clickhouse-server/config.xml
clickhouse restart
将arm节点1的“/etc/clickhouse-server/config.xml”复制到新增的节点arm3,启动ZooKeeper,启动ClickHouse。
sed -i "s#10.44.119.181#10.44.119.132#g" /etc/clickhouse-server/config.xml
/usr/local/zookeeper/bin/zkServer.sh start
clickhouse start
登录数据库。
clickhouse client -h localhost --port 19000 -n -m
创建本地表和分布式表,不要加“on cluster”,否则会报错,该表在其他节点已存在。
创建完本地表和分布式表后,会自动进行数据同步。期间可以在各节点上读写数据,但数据未同步完,但数据未同步完,在新节点上的数据会比较少,等同步完就和x86节点2数据一致了。
4.3 ClickHouse功能用例测试(主要是单节点功能测试)
请参见《ClickHouse功能测试初探》。主要是单节点的功能用例测试,可能不涉及分布式用例,优先级较低。
可以使用clickhouse-test --help查看具体测试命令
预期在混合部署的模式下,单节点功能用例可以正常执行。
5 约束和条件
-
节点扩容,历史数据不会自动同步。
新增节点,重新配置“/etc/clickhouse-server/config.xml”配置文件,新增<remote_servers>配置项,可以新增shard分片配置,之前的数据不会同步,后续新插入的数据会同步到该节点。
其余节点上的历史数据不会自动同步到该节点,需要手动插入数据。新增数据,会按照分片的数据插入到该节点。
-
修改配置文件,需要重启ClickHouse服务。
比如,进行节点扩容,或者节点替换,过程中修改了“/etc/clickhouse-server/config.xml”配置文件,如果要生效配置,则需要重启clickhouse-server服务。
建议生产环境,集群规划相关的配置放在ZooKeeper配置项中,做到配置热生效。
-
如果副本节点1故障,副本节点2刚插入完数据,副本节点1恢复,数据在同步过程中副本节点2故障,则可能丢失部分数据。