Replicated 副本的意思,副本可以让我们的服务高可用
1 什么是ClickHouse的副本:
-
两个相同数据的表, 作用是为了数据备份与安全,保障数据的高可用性
-
副本是表级别的,不是整个服务器级的,服务器里可以同时有复制表和非复制表。
-
副本不依赖分片,每个分片有它自己的独立副本。
2 副本写入流程:
3 副本同步需要借助zookeeper实现数据的同步, 副本节点会在zk上进行监听,但数据同步过程是不经过zk的
安装zk:
docker run -d --name zookeeper -p 2181:2181 -t zookeeper:3.7.0
4 建表语句示例
CREATE TABLE tb_order
(
EventDate DateTime,
CounterID UInt32,
UserID UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/tb_order', 'tb_order_01')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)
'/clickhouse/tables/01/tb_order' 表示 ZooKeeper 中该表的路径,对每个可复制表都要是唯一的,不同分片上的表要有不同的路径
推荐格式:
/clickhouse/tables/{shard}/{table_name}
'tb_order_01'表示副本名称
5 搭建高可用集群架构 clickhouse副本实战配置
这里我们准备三台机器:
①搭建zookeeper
②部署clickhouse节点1,配置并且启动(配置如下)
③部署clickhouse节点2,配置并且启动(配置如下)
#进入配置目录
cd /etc/clickhouse-server
#编辑配置文件
sudo vim config.xml
#找到zookeeper节点,增加下面的,如果有多个zk则按照顺序加即可
<zookeeper>
<node>
<host>172.18.123.230</host>
<port>2181</port>
</node>
</zookeeper>
启动zk服务,在两台clickhouse节点上分别建表
CREATE TABLE tb_product
(
userId UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/1/tb_product', 'product-replica-1')
ORDER BY (userId)
CREATE TABLE tb_product
(
userId UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/1/tb_product', 'product-replica-2')
ORDER BY (userId)
接下来,我们往其中任何一个节点新增数据,另一个节点也会同步到数据
到此clickhouse副本集群搭建完毕~
谢谢大家~~~