Clickhouse集群,双机热备
ClickHouse 双机热备技术
一、引言
1.1 背景
为了防止服务器因非正常关机或者数据文件损坏问题,使用clickhouse的双机热备。
1.2 目的
本文档旨在详细阐述 ClickHouse 双机热备的原理、实现步骤、配置要点以及维护注意事项,为相关技术人员提供全面的指导。
二、ClickHouse 双机热备概述
2.1 双机热备概念
双机热备是指通过两台服务器相互协作,其中一台作为主服务器(Active Server)对外提供服务,另一台作为备用服务器(Standby Server)实时同步主服务器的数据和状态。当主服务器出现故障时,备用服务器能够迅速接管主服务器的工作,确保业务的连续性。
2.2 ClickHouse 双机热备优势
高可用性:极大降低因服务器硬件故障、软件错误等导致的服务中断风险,保证数据服务的持续运行。
数据一致性:备用服务器实时同步主服务器数据,确保在主备切换后数据的完整性和一致性。
易于维护:相对简单的架构,便于技术人员进行日常维护和故障排查。
三、ClickHouse 双机热备实现方式
基于 Replication 的双机热备
原理:ClickHouse 通过 Replication 机制实现数据的复制。在双机热备场景下,一个节点服务器将数据变更同步到另一个节点服务器。当其中一个节点服务器发生故障时,另一个服务器可以继续提供服务。
配置步骤:
配置clickhouse主服务器:
配置 keeper_server:
配置另一个服务器:在备用服务器上进行类似配置,确保与主服务器的配置相对应。
启动集群:
在两个服务器上分别运行下面的命令:
systemctl restart clickhouse-server
测试配置:
运行命令进入客户端
clickhouse-client
输入以下命令来检查集群中的两个节点的基本信息
SELECT * FROM system.clusters;
创建数据库:
CREATE DATABASE test_db ON CLUSTER cluster1;
这将在两个服务器上同时创建数据库。
创建表:在一个服务器上创建带有 Replication 属性的表,这些表本身就是副本表。这里不能用ON CLUSTER来在集群中同步创建,因为ReplicatedMergeTree引擎内的参数不一致。
在一个节点上运行:
CREATE TABLE test_db.test_table
( id String,
price Float64,
create_time DateTime)
ENGINE = ReplicatedMergeTree(‘/clickhouse/tables/01/a1’, 'hdp-1')
PARTITION BY toYYYYMM(create_time)
ORDER BY id;
在另外一个节点运行:
CREATE TABLE test_db.test_table
( id String,
price Float64,
create_time DateTime)
ENGINE = ReplicatedMergeTree(‘/clickhouse/tables/01/a1’, 'hdp-2')
PARTITION BY toYYYYMM(create_time)
ORDER BY id;
对比这两个表的创建,发现只有引擎内的第二个参数不一样。第一个参数是个路径,这个路径是存放这个节点的test_table 的元数据和协调信息,第二个副本名。第一个参数要一样,这样keeper_server作为协调者才能找到需要协调的副本表。
插入测试数据:
向其中一个表插入下面的信息:
INSERT INTO TABLE
test_table
VALUES('A001',100.01,'2025-01-16 08:00:00');
分别在两个表查看表中的数据,发现没有执行插入语句的表也有数据,实现了数据同步:
我尝试过在两个节点都单独执行插入操作,另外的表中都有数据。删除其中一个节点的表,另外一个节点的表不受影响。
当关闭一个节点,向另一个节点插入数据的时候会处于阻塞状态,直到关闭节点重新运行之后,插入操作才会继续运行,之后,两个节点数据进行了同步,可见数据库的操作具有原子性,保证了集群数据的强一致性。
3.2 基于 keeper_server 的双机热备
原理:之前的clickhouse集群的协调与监控是zookeeper,由于zookeeper比较重,clickhouse官方内置了一个keeper_server来担任zookeeper的职责。在传统的集群结构中,一般都是存在Master和Slave节点。在clickhouse集群中,每个节点的地位是相同的,keeper_server来协调和控制他们之间的关系。 所谓双机热备与传统的clickhouse-backup备份工具的区别在于,一个是热备份,一个是冷存储。热备强调强一致性,所以ReplicatedMergeTree引擎可以实现跨机的数据同步。
配置步骤:keeper_server是clickhouse内置的,只需要在config.xml文件中正确配置即可使用。
四、缺点
4.1场景局限:
根据上面的一系列操作不难发现,上述的方案只支持数据库操作的原子性,不支持分布式事务(ACID中的事务),例如回滚等,但是对于数据采集和分析场景来说应该已经足够了。
4.2高可用
当一个节点下线之后,另一个节点遇到数据库操作的时候会处于阻塞状态。ReplicatedMergeTree 引擎依赖 keeper_server 进行数据复制和协调。当关闭一个节点时,虽然数据可以在存活的节点上插入,但由于复制机制,它可能会等待关闭节点的确认。此时无法再向集群中插入数据,也就无法保证高可用性。
五、总结
总的来说保证了数据的一致性,但是也有一定的缺点。如果业务场景对数据的安全性要求较高,并不特别要求服务的可用性,可以选择上述方案,如果业务要求服务高可用,那么上述方案不可取。