1.安装两个clickhouse,两个clickhouse的配置如下(一般情况下只需要再新安装一个就行)
在/etc/clickhouse-server/config.xml配置文件中,在remote_servers节点增加配置如下图所示(两个clickhouse实例都是一样的)
下面配置的为一个shard分片,第一个分片中有两个replica副本
true 192.168.0.11 9000 default 111111 192.168.0.16 9000 default 111111
配置zookeeper(两个clickhouse实例都是一样的)
192.168.0.11 2181
配置弘,每个实例上,都填写自己的机器名
cluster86 01 aa-server11
- layer 指定我们的集群标志,或者使用cluster关键字
- shard 指定的是集群分片信息中的配置,在集群我配置的是01
- replica 配置当前节点的备份同步节点信息
2.创建数据库
create database {new_database_name} ON CLUSTER {cluster_name};
上面语句中{new_database_name} 替换成新的数据库名称,{cluster_name}替换成集群名称
通过上面命令创建了数据库后,集群的两个节点就都有这个数据库了(执行命令的节点新建数据库后将命令写入ZK中,另外一个节点从ZK中获取信息创建数据库)
目标
将
ATTACH TABLE t_0addc621
(
`id` String,
`reportName` String,
`updateTime` Nullable(DateTime)
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(date)
ORDER BY id
SETTINGS index_granularity = 8192
改成
CREATE TABLE IF NOT EXISTS aa_db.t_0addc621 on cluster chcluster
(
`id` String,
`reportName` String,
`updateTime` Nullable(DateTime)
)
ENGINE = ReplicatedMergeTree('/clickhouse/aa_db/01/t_0addc621','{replica}')
PARTITION BY toYYYYMM(date)
ORDER BY id
SETTINGS index_granularity = 8192
然后执行创建到数据库中
3.迁移表
单节点集群的建表语句用的表引擎为MergeTree,读写分离的表引擎要变成ReplicatedMergeTree:
ENGINE = ReplicatedMergeTree('/clickhouse/aa_db/01/t_0addc621','{replica}')
- '/clickhouse/aa_db/01/t_0addc621' shard_name 分片名称,集群所有同一个分片的节点的配置要一样,不同的表一定要不同。
- /clickhouse 默认的路径
- /aa_db库名
- /01 同一个分片内的所有机器应该保持相同 (share,如果在上面弘中配置了shard参数,也可以用{shard})
- /t_0addc621 表名
- '{replica}' replica_name 副本名称,每一个节点都要不同,一般在上面弘中配置了replica参数,使用{replica}就行
3.1获取单节点中全部的建表语句放入一个文件夹中
可以从ch的metadata文件夹/data/clickhouse/metadata获取,也可以直接在DBeaver连接单节点库获取表sql
3.2linux服务器(之前的单节点的那一台)新建一个文件夹,并上传文件
[root@dc-server08 metadata]# mkdir -p /data/chtemp/metadata
[root@dc-server08 metadata]# cd /data/chtemp/metadata
上传文件到文件夹下面
3.3 修改ch_table_change.sh,并执行,将全部的建表sql语句修改成带集群的、引擎为ReplicatedMergeTree的
[root@dc-server08 metadata]# vi ch_table_change.sh
保存后执行
[root@dc-server08 metadata]# ./ch_table_change.sh
3.4 跑sql建表
[root@dc-server08 metadata]# for file in `ls | grep .sql`;do clickhouse-client --user default --password 1111111 -d aa_db --multiquery < $file;done
4.迁移数据:修改ch_insert.sh,并执行
[root@dc-server08 metadata]# vim ./ch_insert.sh
保存后执行
[root@dc-server08 metadata]# ./ch_insert.sh
执行完成后集群的两个节点的表就都有数据了
参考文档
ClickHouse ReplicatedMergeTree家族引擎_七年·的博客-CSDN博客_clickhouse replicatedmergetree
ClickHouse Replicated*MergeTree复制表原理、Distributed分布式表原理_我叫周利东的博客-CSDN博客_clickhouse复制表
ClickHouse和他的朋友们(13)ReplicatedMergeTree表引擎及同步机制_老叶茶馆_的博客-CSDN博客
ClickHouse实战-ReplicatedMergeTree分布式表 - 腾讯云开发者社区-腾讯云
clickhouse-client命令行参数及常用案例_upupfeng的博客-CSDN博客_clickhouse-client



