【clickhouse踩坑记录】clusters表中分片副本的浅析

背景

对于一个数据开发,刚接手一套新的clickhouse集群,仅通过clickhouse中system表,快速了解clickhouse的架构

角度

分片副本

通过clusters表,可以很清晰的看到clickhouse集群的分片副本情况。

select * from system.clusters;

主要字段说明:
cluster: 集群的命名
shard_num: 分片的编号
shard_weight: 分片的权重
replica_num: 副本的编号
host_name: 机器的host名称
host_address: 机器的ip地址
port: clickhouse集群的端口
is_local: 是否为你当前查询本地
user: 创建用户

结果说明:

例一(一分片三副本):

clustershard_numshard_weightreplica_numhost_namehost_addressportis_local
cluster_test111ck_01xxx.xxx.xxx.xxx90001
cluster_test112ck_02xxx.xxx.xxx.xxx90000
cluster_test113ck_03xxx.xxx.xxx.xxx90000

这种部署方式需要3台机器,没做分片,三个副本,可实现高可用。架构比较绕。
因为副本数为3,每次写入一条数据,都会把这条数据写入到三台机器上,所以在机器/存储有限的情况下,资源利用率并不会很高。

优点则是部署相对简单,不用去修改很多的配置文件。

例二(三分片双副本):

clustershard_numshard_weightreplica_numhost_namehost_addressportis_local
cluster_test111ck_01xxx.xxx.xxx.xxx90001
cluster_test211ck_01xxx.xxx.xxx.xxx90001
cluster_test311ck_02xxx.xxx.xxx.xxx90000
cluster_test112ck_02xxx.xxx.xxx.xxx90000
cluster_test212ck_03xxx.xxx.xxx.xxx90000
cluster_test312ck_03xxx.xxx.xxx.xxx90000

这种部署方式需要3台机器,三个分片,两个副本,可实现高可用。
因为副本数为2,每次写入一条数据,都会把这条数据写入到其中的两台机器上,所以相比于第一架构方式,资源利用率更高。但是假设通过ck_01节点写入,数据会存到分片1与分片2中,如果你连接ck_02进行查询本地表,是查不到写入分片2的数据。如何解决这个问题呢?目前博主想到的解决方案是在本地表上面再建一个分布式表。

例三(三分片双副本):

clustershard_numshard_weightreplica_numhost_namehost_addressportis_local
cluster_test111ck_01xxx.xxx.xxx.xxx90001
cluster_test112ck_02xxx.xxx.xxx.xxx90000
cluster_test211ck_03xxx.xxx.xxx.xxx90000
cluster_test212ck_04xxx.xxx.xxx.xxx90000
cluster_test311ck_05xxx.xxx.xxx.xxx90000
cluster_test312ck_06xxx.xxx.xxx.xxx90000

这种部署方式需要6台机器,三个分片,两个副本,可实现高可用。架构相对较清晰。
因为副本数为2,每次写入一条数据,都会把这条数据写入到其中的两台机器上,其他四台机器上没有此数据。 假设通过ck_01节点写入,数据仅会在ck_01跟ck_02两个节点,如果链接ck_03的数据库,此时是查不到任何数据的。

存储大小

select * from system.disks;

主要字段说明:
name: 磁盘名称
path: 数据对应在相应磁盘的路径
free_space: 可用存储大小
total_space: 总存储大小

另外,还可通过下面查看对应的存储策略,因为考虑到集群的扩展性,一些表可以指定存储策略存到指定磁盘下

select * from system.storage_policies;

主要字段说明:
policy_name: 存储策略名称
volume_name: 卷名称
disks: 对应磁盘名称

总结

通过clusters表,可以让我们快速的了解集群的架构,同时遇到需要较大存储的项目,可利用disks跟storage_policies进行评估,是否需要扩容。以上,仅为笔者对clickhouse的一点浅显理解,如果疑问,欢迎讨论与指正。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果 ClickHouse 中的某个分片副本数据不完整,您可以尝试以下步骤来处理这个问题: 1. 检查 ClickHouse 集群状态: - 使用 `clickhouse-client` 或其他管理工具连接到 ClickHouse 集群,并执行以下查询来检查集群状态: ``` SELECT * FROM system.clusters; SELECT * FROM system.replicas; ``` 2. 检查副本状态: - 确定哪个分片副本数据不完整,并检查相关副本的状态。使用以下查询来获取副本信息: ``` SELECT * FROM system.replicas WHERE is_leader = 0; -- 获取非领导副本信息 SELECT * FROM system.parts WHERE active = 1 AND replica_num > 0; -- 获取活跃的分片信息 ``` 3. 修复数据不完整的副本: - 如果数据不完整的副本仍然可访问,您可以尝试使用 ClickHouse 的 `REPAIR` 命令修复数据。例如: ``` REPAIR TABLE <table_name> PARTITION <partition_name> [DROP] [FINAL] [DEDUPLICATE]; ``` 4. 进行数据同步: - 如果数据不完整的副本无法修复,您可以尝试使用 ClickHouse分片复制功能手动进行数据同步。通过将完整的副本数据复制到缺失数据的副本上,使其达到一致性。具体步骤如下: - 停止 ClickHouse 服务,并确保停止了相关的副本。 - 复制完整的副本数据文件到缺失数据的副本所在服务器上的相应位置。 - 启动 ClickHouse 服务,并确保所有副本都已正确启动。 - 使用 `ATTACH REPLICA` 命令将缺失数据的副本重新加入到集群中。 5. 监控数据一致性: - 在进行修复和同步操作后,监控集群状态和副本状态,确保数据同步和一致性已恢复正常。 如果以上方法无法解决问题,您可能需要进一步调查和诊断,甚至联系 ClickHouse 社区或专业支持团队获取更具体的帮助和建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值