ClickHouse采用分片 + 副本实现高可用集群,下面以4台服务器为例子,讲述设计一个高可用的分布式集群需要注意的几个地方。
建立可横向扩展的数据服务集群,分片技术通常是必须的,MongoDB提供了原生的数据库分片技术,减小MySQL分库分表带来的麻烦。ClickHouse同样支持分片技术,假设4台机器,每台机器安装一个CH的示例,则表示有4个分片,每个分片的副本设置为1,对于这种集群设置不存在高可用可言,因为如果有一台机器挂了则整个ClickHouse集群不可用。
只有分片 + 副本才可实现高可用集群,可根据集群机器资源情况设置单分片副本数量,本次采用4台机器服务集群搭建,4个分片,每个分片两个副本。需要在每台机器上开启两个ClickHouse示例,注意不同示例需要设置不同的数据目录以及绑定不同的端口。
集群配置
memetrika.xml配置
- internal_replication属性设置为true表示数据在插入到分布式表时,只插入到其中一个数据表,由后台进程同步到其余副本可保证数据一致性;设置为false则表示数据插入到各个数据表,这种方式有可能导致数据不一致,在采用Replicated表引擎时,官方推荐该属性设置为true。
- xcloud_cluster配置项表示集群名称,后续在闯将分布式表时需要制定该集群名称
1 | <clickhouse_remote_servers> |
1 | clickhouse :) select * from system.clusters; |
创建分布式表
1 | CREATE TABLE xcloud.cdn_nginx_log_minute_agg |
创建完后可在zk上看到表的一些副本信息:
1 | [zk: localhost:2181(CONNECTED) 5] ls /clickhouse/xcloud/cdn_nginx_log_area_fivemin_shard_ |
1 | ls /clickhouse/xcloud/cdn_nginx_log_area_fivemin_shard_1/replicas |