1. 简述

Clickhouse默认是多分片单副本集群,分布式表的配置是每个分片只有一份,如果某个节点挂掉的话,则会直接导致写入或查询异常;Clickhouse是具有高可用特性的,即每个分片具有2个或以上的副本,当某个节点挂掉时,其他节点上的副本会替代其继续工作,以保证集群正常运行。

本文主要介绍近期针对clickhouse高可用配置的方法以及数据复制的几种方式进行总结。

2. 环境说明

2.1. 软硬件环境

硬件环境

CPU:8  Intel Xeon E312xx (Sandy Bridge)

内存:16 GB

网卡:千兆虚拟网卡

软件环境

OS:CentOS Linux release 7.5.1804

ClickHouse 19.4.3.1.

2.2. 集群介绍

序号

名称

IP

1

wuxiang-test-1

192.168.40.218

2

wuxiang-test-2

192.168.40.238

3

wuxiang-test-3

192.168.40.239

4

wuxiang-test-4

192.168.40.240

5

wuxiang-test-5

192.168.40.241

3. 配置文件说明

clickhouse高可用配置主要用到metrika.xml,默认路径:/etc/metrika.xml。

internal_replication

表示是否只将数据写入其中一个副本,默认为false,表示写入所有副本,在复制表的情况下可能会导致重复和不一致,所以这里一定要改为true。

四种复制模式:

  • 非复制表,internal_replication=false。写入单机表时,不同服务器查询结果不同;插入到分布式表中的数据被插入到两个本地表中,如果在插入期间没有问题,则两个本地表上的数据保持同步。我们称之为“穷人的复制”,因为复制在网络出现问题的情况下容易发生分歧,没有一个简单的方法来确定哪一个是正确的复制。
  • 非复制表,internal_replication=true。数据只被插入到一个本地表中,但没有任何机制可以将它转移到另一个表中。因此,在不同主机上的本地表看到了不同的数据,查询分布式表时会出现非预期的数据。显然,这是配置ClickHouse集群的一种不正确的方法。
  • 复制表,internal_replication=true。插入到分布式表中的数据仅插入到其中一个本地表中,但通过复制机制传输到另一个主机上的表中。因此两个本地表上的数据保持同步。这是官方推荐配置。
  • 复制表,internal_replication=false。数据被插入到两个本地表中,但同时复制表的机制保证重复数据会被删除。数据会从插入的第一个节点复制到其它的节点。其它节点拿到数据后如果发现数据重复,数据会被丢弃。这种情况下,虽然复制保持同步,没有错误发生。但由于不断的重复复制流,会导致写入性能明显的下降。所以这种配置实际应该是避免的。

一条数据要insert到ontime_all_2中,假设经过rand()实际是要写入到hadoop1的ontime_local表中,此时ontime_local配置了两个副本。
如果internal_replication是false,那么就会分别往两个副本中插入这条数据。注意!!!分别插入,可能一个成功,一个失败,插入结果不检验!这就导致了不一致性;
而如果internal_replication是true,则只往1个副本里写数据,其他副本则是由ontime_local自己进行同步,这样就解决了写入一致性问题。

配置文件中macros若省略,则建复制表时每个分片需指定zookeeper路径及副本名称,同一分片上路径相同,副本名称不同;若不省略需每个分片不同配置:

<!-- wuxiang-test-1 -->

  1. <macros>
  2. <shard>01</shard>
  3. <replica>replica1</replica>
  4. </macros>

<!-- wuxiang-test-2 -->

  1. <macros>
  2. <shard>01</shard>
  3. <replica>replica2</replica>
  4. </macros>

<!-- wuxiang-test-3 -->

  1. <macros>
  2. <shard>02</shard>
  3. <replica>replica1</replica>
  4. </macros>

<!-- wuxiang-test-4 -->

  1. <macros>
  2. <shard>02</shard>
  3. <replica>replica2</replica>
  4. </macros>

4. 复制表引擎说明

复制表引擎采用Replicated*MergeTree表引擎,此类表引擎支持表级别的数据副本,要使用副本,需在配置中设置zookeeper集群地址。

--创建复制表

  1. CREATE TABLE test.szt_data_rep
  2. (
  3. id String,
  4. card_id String,
  5. deal_time String,
  6. trade_type String,
  7. trade_sum Int16,
  8. trade_value Int16,
  9. terminal_code String,
  10. com_line String,
  11. line_station String,
  12. car_gate String,
  13. flag String,
  14. finish_time Date
  15. )
  16. ENGINE = ReplicatedMergeTree('/data/clickhouse/{shard}/szt_data_rep', '{replica}')
  17. PARTITION BY finish_time
  18. ORDER BY (card_id, terminal_code)
  19. SAMPLE BY card_id;

ReplicatedMergeTree参数

  • zoo_path — ZooKeeper 中该表的路径,可自定义。
  • replica_name — ZooKeeper 中的该表的副本名称,自定义。

以上参数则是读取配置文件中macros自动填充

表副本创建完成后,可连接zk查看对应路径:

/share/apps/zookeeper-3.4./bin/zkCli.sh -server 192.168.40.218:

5. 数据副本

本文档主要研究两种数据备份方式:服务器备份、交叉备份。

5.1. 服务器备份

服务器备份,按照本文研究的2分片2副本的情况,即一个分片下两个服务器作为两个副本,这两个服务器的数据互相备份。

配置文件修改如下:

若internal_replication为true,则是由表自动同步数据,若为false则由集群自动同步数据,若使用复制表推荐internal_replication设置为true。

此种配置优点在于若分片中有一台服务器挂掉,则另一台可以立即替代其继续运行,待机器启动后数据会自动同步;缺点:复制表需占用整台服务器,耗费资源。

5.2. 交叉备份

交叉备份与上一种备份方式的区别在于,每台机器上运行多个clickhouse实例,以不同端口区分,这样两台服务器上的表数据即可交叉备份。

配置文件修改如下:

此种配置方式优点在于节省服务器成本,缺点在于clickhouse对于复杂查询本身占用CPU比较多,多一个服务器同时运行多个实例,可能会对性能造成一定影响。

多实例配置方法:

复制并修改clickhouse server文件:clickhouse-server-1

cp /etc/rc.d/init.d/clickhouse-server  /etc/rc.d/init.d/clickhouse-server-

vim /etc/rc.d/init.d/clickhouse-server-

复制并修改配置文件:config1.xml

cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config1.xml

vim /etc/clickhouse-server/config1.xml

users.xml以及/etc/metrika.xml可根据实际情况决定是否创建新的配置文件;

修改完成之后启动新的实例,并按新设定的端口连接clickhouse即可。

#若没有对应的服务启动端口,需添加
 firewall-cmd --zone=public --add-port=9021/tcp --permanent

#启动新的服务
service clickhouse-server- start #用新的端口启动
clickhouse-client -m -u default -h 192.168.40.218 --password F7Us3TU1 --port

6.集群扩展

对于增加或减少服务器的情况,分布式操作只需修改metrika.xml配置文件即可,至于表数据同步,目前找到两种方法:

6.1. 手动同步

在新的服务器上创建相同的表,将需迁移的服务器上的表数据移动到新的服务器对应目录下,然后连接clickhouse执行以下语句:

  1. detach table szt_data_t3; --先将表与数据分离(若表已存在)
  2. attach table szt_data_t3; --然后重新添加进来

6.2. 创建临时表

在新的服务器上创建表结构相同但表名不同的临时分布式表,然后执行以下语句:

  1. insert into {new_table} select * from {old_table};

然后删除原分布式表,将临时表重命名即可。

Clickhouse高可用配置总结的更多相关文章

  1. ClickHouse高可用集群的配置

    上一篇文章写过centos 7下clickhouse rpm包安装和基本的目录结构,这里主要介绍clickhouse高可用集群的部署方案,因为对于默认的分布式表的配置,每个分片只有一份,这样如果挂掉一 ...

  2. MariaDB+Keepalived双主高可用配置MySQL-HA

    利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...

  3. ResourceManager高可用配置

    ResourceManager高可用配置 1. yarn-site.xml配置 <property> <name>yarn.resourcemanager.cluster-id ...

  4. Redis Sentinel实现高可用配置

    一般情况下yum安装redis的启动目录在:”/usr/sbin” :配置目录在”/etc/redis/”在其目录下会有默认的redis.conf和redis-sentinel.conf redis高 ...

  5. Spring Cloud之踩坑01 -- Eureka高可用配置

    转载:https://blog.csdn.net/dear_Alice_moon/article/details/79373955 问题描述: 在进行Eureka高可用配置时,控制台一直出现“.... ...

  6. Flume 高可用配置案例+load balance负载均衡+ 案例:日志的采集及汇总

    高可用配置案例 (一).failover故障转移 在完成单点的Flume NG搭建后,下面我们搭建一个高可用的Flume NG集群,架构图如下所示: (1)节点分配 Flume的Agent和Colle ...

  7. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

  8. springcloud-07-eureka HA的高可用配置

    单机版的eureka, 运行时间稍长, 就会在管理界面出现红色的警告, 为了消除这个警告, 可以使用eureka的高可用配置: 只需要写一个工程配置不同的配置文件, 然后启动多实例即可: 请参照单机版 ...

  9. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

随机推荐

  1. docker入门-基本概念(一)

    Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker的应用场景 Web 应用的自动化打包和发布. 自动化测试和持续集成.发 ...

  2. Qt编写控件属性设计器

    一.前言 自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDe ...

  3. 《绯雨骑士团》Demo,框架实现,寻路打怪

    在家无事花几天做了个放置挂机demo,做着玩吧.和海拓的<凡人修仙传>类似吧,自动挂机刷怪打boss数值游戏,但是我比较喜欢二次元的,所以选了<绯雨骑士团>的资源. 参考了以下 ...

  4. 上传下载execl

    ajax上传execl + easyexecl解析execl <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  5. nexus 3.x最新版下载安装和上传下载jar

    注意: nexus 3.x最新版好像不用下载索引了,目前我使用一些基本功能没有索引也能耍的很6 下载 nexus最新版下载https://www.sonatype.com/download-oss-s ...

  6. cube-slide组件的应用

    <template> <div> <cube-slide :data="items"/> </div> </template& ...

  7. U盘安装Windows Server2008 R2

    安装Windows 2008 r2 提示windows 无法安装到这个磁盘.选中的磁盘采用GPT分区形式 利用U盘装系统的步骤 第一 进入BIOS,找SECURITY—SECURE BOOT中的SEC ...

  8. 【Spring Cloud学习之五】配置中心

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 一.什么是配置中心在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实 ...

  9. idea 打开eclipse 项目 编译出现 Error:(1, 1) java: 非法字符: ‘\ufeff’

    原因分析: Eclipse可以智能的把UTF-8+BOM文件转为普通的UTF-8文件,IDEA没有这个智能转换. 解决: 1 用IDEA转换,先转换为GBK,再转回UTF-8

  10. python结巴分词SEO的应用详解

    结巴分词在SEO中可以应用于分析/提取文章关键词.关键词归类.标题重写.文章伪原创等等方面,用处非常多.     具体结巴分词项目:https://github.com/fxsjy/jieba    ...