preloader image
Clickhouse集群,双机热备

Clickhouse集群,双机热备

ClickHouse 双机热备技术

一、引言

1.1 背景

为了防止服务器因非正常关机或者数据文件损坏问题,使用clickhouse的双机热备。

1.2 目的

本文档旨在详细阐述 ClickHouse 双机热备的原理、实现步骤、配置要点以及维护注意事项,为相关技术人员提供全面的指导。

二、ClickHouse 双机热备概述

2.1 双机热备概念

双机热备是指通过两台服务器相互协作,其中一台作为主服务器(Active Server)对外提供服务,另一台作为备用服务器(Standby Server)实时同步主服务器的数据和状态。当主服务器出现故障时,备用服务器能够迅速接管主服务器的工作,确保业务的连续性。

2.2 ClickHouse 双机热备优势

高可用性:极大降低因服务器硬件故障、软件错误等导致的服务中断风险,保证数据服务的持续运行。

数据一致性:备用服务器实时同步主服务器数据,确保在主备切换后数据的完整性和一致性。

易于维护:相对简单的架构,便于技术人员进行日常维护和故障排查。

三、ClickHouse 双机热备实现方式

基于 Replication 的双机热备

原理:ClickHouse 通过 Replication 机制实现数据的复制。在双机热备场景下,一个节点服务器将数据变更同步到另一个节点服务器。当其中一个节点服务器发生故障时,另一个服务器可以继续提供服务。

配置步骤:

配置clickhouse主服务器:

192.168.100.112

9000

192.168.100.113

9000

配置 keeper_server:

2181

1

1

192.168.100.112

9010

2

192.168.100.113

9010

配置另一个服务器:在备用服务器上进行类似配置,确保与主服务器的配置相对应。

启动集群:

在两个服务器上分别运行下面的命令:

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 进行数据复制和协调。当关闭一个节点时,虽然数据可以在存活的节点上插入,但由于复制机制,它可能会等待关闭节点的确认。此时无法再向集群中插入数据,也就无法保证高可用性。

五、总结

总的来说保证了数据的一致性,但是也有一定的缺点。如果业务场景对数据的安全性要求较高,并不特别要求服务的可用性,可以选择上述方案,如果业务要求服务高可用,那么上述方案不可取。

Copyright © 2088 下一次世界杯_世界杯巴 - xbpifu.com All Rights Reserved.
友情链接