Clickhouse 集群副本扩容
文章目录
副本扩容
说明
- 副本有两种同步机制,分别为:
- Distributed + MergeTree:
- internal_replication=false 默认值
- 相当于把所有语句发送到所有副本节点,但是副本节点变更、写入失败时,并不会处理失败数据,随着时间推移,会出现数据差异
- Distributed + ReplicateMergeTree:
- internal_replication=true
- 分布式数据内容完全一致,数据存储格式完全一致
- 数据同步需要依赖ZooKeeper,所以ZooKeeper会成为系统瓶颈
- 在执行 INSERT 和 ALTER 查询的时候,ReplicatedMergeTree 需要借助 ZooKeeper 的分布式协同能力,以实现多个副本之间的同步
- 在查询副本的时候,并不需要使用ZooKeeper
- Distributed + MergeTree:
- 针对两种不同的副本机制,有不同的副本扩容方案。
MergeTree ENGINE
说明
- 注意,internal_replication 要为 false
- 新增节点 ck04 ,作为 ck01 的副本
- 新增副本节点不会从原历史副本节点同步历史数据,但是对于新增数据,集群副本之间能够正常同步
- 操作流程:
- 部署新节点,配置当前集群的完整信息
- 原节点修改配置文件,在集群配置中添加新增副本节点信息,不需要停库,配置文件会自动重新加载。
- 启动新增副本节点,并创建对应的复制本地表、分布式表
- 在历史副本中,通过筛选导出历史数据,然后将历史数据导入新副本的本地表,以达到数据一致,期间集群的写入并不会受到影响
- 当前数据说明:
- 本地表:bank_user_info_local
- 01分片行数:6206243
- 01分片当前 max(id):2144054558
- 全局代理表:bank_user_info_all
- 全局表当前总行数:18615956
- 全局表当前 max(id):2144054560
- 本地表:bank_user_info_local
配置
部署新节点
- 部署新节点 ck04
- 启动 ck04 节点
|
|
- 新节点同步创建用户
|
|
- 新节点查看集群信息
|
|
原始集群增加新节点
- ck01/ck02/ck03 节点配置 ck04节点信息
|
|
- 原有节点查看集群信息
|
|
新节点同步数据
- 新节点创建要同步的 本地表/全局代理表
- 注意:没有 ON CLUSTER
|
|
-
创建表后,后续写入 01 节点新写入的数据会自动写入副本节点
-
01 节点写入部分数据测试同步是否正常
- 写入过程:略
- 01 节点查看写入后总条数
1 2 3 4
select count(*) from bank_user_info_local; ┌─count()─┐ │ 6242906 │ └─────────┘
- 04 节点查看写入后数据,04 节点本地表总行数为 01 节点新写入行数
- 结果副本同步功能没问题
1 2 3 4 5 6 7 8 9
select count(*) from bank_user_info_local; ┌─count()─┐ │ 36663 │ └─────────┘ select (6242906-6206243) ┌─minus(6242906, 6206243)─┐ │ 36663 │ └─────────────────────────┘
-
验证副本的同步功能没问题,手动写入配置同步之前 01 表已存在的数据
-
01 节点导出未同步数据
|
|
- 04 节点导入数据
|
|
- 04 查看当前总行数
- 结果数据一致,新副本验证无问题
|
|
ReplicatedMergeTree ENGINE
说明
- ReplicatedMergeTree表引擎本身具备同步功能,所以不需要分布式表进行副本之间的数据复制(internal_replication为true),副本的数据同步交由zookeeper进行协同
- 新增节点 ck04 ,作为 ck01 的副本
- 操作流程:
- 部署新节点,配置当前集群的完整信息
- 原节点修改配置文件,在集群配置中添加新增副本节点信息,不需要停库,配置文件会自动重新加载。
- 启动新增副本节点,并创建对应的复制本地表、分布式表
- zookeeper 会自动将历史副本中的数据信息同步至新增副本节点中,进行数据的同步
配置
部署新节点
- 部署新节点 ck04
- 启动 ck04 节点
|
|
- 新节点同步创建用户
|
|
- 新节点查看集群信息
|
|
原始集群增加新节点
- ck01/ck02/ck03 节点配置 ck04节点信息
|
|
- 原有节点查看集群信息
|
|
各个节点配置节点变量
- 各个节点配置节点信息的变量,这样建表时不用没个节点使用独立的建标语句
- 01/02/03 分别是第1/2/3个分片的第1个副本
- 04 为 01 节点的副本,即第1个分片的第2个副本
|
|
- 验证:各节点可执行sql查看当前节点已配置变量
|
|
新节点同步数据
- 查看 01 节点当前本地表和全局代理表总行数
|
|
- 新节点(04)创建要同步的 本地表/全局代理表
|
|
- 查看新增节点同步到的数据
|
|
- 01 节点再写入部分数据,查看写入数据后行数
- 写入数据:略
|
|
- 04 节点查看当前数据
- 结果数据一致,新副本验证无问题
|
|
参考
文章作者 Xiang
上次更新 2024-10-25