Centos 6.4 / ClickHouse高可用集群配置

ClickHouse高可用集群配置

参考如下文档:

 ClickHouse高可用集群的配置:    https://www.cnblogs.com/freeweb/p/9352947.html 

 副本表以及分布式表简单实践 :  https://www.cnblogs.com/leodaxin/p/10023641.html

 ClickHouse之集群搭建以及数据复制:https://blog.csdn.net/weixin_34269583/article/details/85880207

ClickHouse分布式高可用集群搭建: https://cloud.tencent.com/developer/article/1376125

 

一,clickhouse高可用集群的部署方案

       这里主要介绍clickhouse高可用集群的部署方案,因为对于默认的分布式表的配置,每个分片只有一份,这样如果挂掉一个节点,则查询分布式表的时候直接会报错,这个是基于clickhouse自己实现的多分片单副本集群,配置也比较简单,这里说的高可用是指,每个分片具有2个或以上副本,当某个节点挂掉时,该节点分片仍可以由其他机器上的副本替代工作,所以这样实现的分布式集群可以在挂掉至少1个节点时机器正常运行,随着集群节点数量的增加,则集群挂掉2个节点或以上可提供服务的概率也越大,至少能避免单点故障问题,集群的稳定性也更高。

       clickhouse集群的理想方案是如下所示:

   这里有3个集群,每个集群n个节点,每个节点的数据依靠zookeeper协调同步,比如cluster1提供服务,如果cluster1里面挂掉多台机器那么cluster2的副本可以切换过来提供服务,如果cluster2的分片再挂了,那么cluster3中的副本也可以提供服务,cluster1~3同时挂掉的概率就非常小了,所以集群的稳定性可以非常高,其中单个集群的节点个数n决定了clickhouse的性能,性能是可以线性扩展的,具体副本集群的个数根据机器资源配置.

    如果机器资源确实特别少,想每个节点都用上提供服务的话,那么可以每个节点存储两个以上的副本,即提供服务的分片和其他机器的副本,实现相互备份,但是clickhouse不支持单个节点多个分片的配置,我们可以人为设置在每个节点上启动两个实例来实现,设计图如下:

 可以看出来3个节点每个节点的tcp 9000对外提供服务,9001提供副本,其中2提供1的备份,3提供2的备份,1提供3的备份,这样假设挂掉1个节点,集群也可以正常使用,但是挂掉2个几点,就不正常了,这样的话是机器越多越稳定一些.

    上面两种方案,官网上还是推荐的第一种方案可用性最高,这里为了演示采用第二种方式配置,其实两种方式的配置是完全一样的,第二种配置反而更繁琐一些,下面详细说一下配置的流程,软件包结构就采用上一篇文章打包好的.

     zookeeper 需要单独部署在其他机器上,以免clickhouse 节点挂掉,引起zookeeper 挂掉。

    0. 高可用原理:zookeeper + ReplicatedMergeTree(复制表) + Distributed(分布式表)

    1. 前提准备:所有节点防火墙关闭或者开放端口;所有节点建立互信(免密码登录);hosts表和主机名一定要集群保持一致正确配置,因为zookeeper返回的是主机名,配置错误或不配置复制表时会失败.

     clickhouse测试节点3个:10.121.8.6  dc-server06(clickhouse1), 10.121.8.7  dc-server07 (clickhouse2),10.121.8.8  dc-server08 (clickhouse3)

     zookeeper测试节点1个:10.121.8.8  dc-server08  (zookeeper)

     配置方案:3个节点点各配置两个clickhouse实例,相互备份.

    dc-server06: 实例1, 端口: tcp 9000, http 8123, 同步端口9009, 类型: 分片1, 副本1

    dc-server06: 实例2, 端口: tcp 9001, http 8124, 同步端口9010, 类型: 分片3, 副本3 (clickhouse3的副本)

    dc-server07: 实例1, 端口: tcp 9000, http 8123, 同步端口9009, 类型: 分片2, 副本1

    dc-server07: 实例2, 端口: tcp 9001, http 8124, 同步端口9010, 类型: 分片1, 副本2 (clickhouse1的副本)

    dc-server08: 实例1, 端口: tcp 9000, http 8123, 同步端口9009, 类型: 分片3, 副本1

    dc-server08: 实例2, 端口: tcp 9001, http 8124, 同步端口9010, 类型: 分片2, 副本2 (clickhouse2的副本)

 

二,环境准备

1)主机配置(根据自身情况)

10.121.8.6  dc-server06  centos 6.4/6.6    32G   200G

10.121.8.7  dc-server07  centos 6.4/6.6    32G   200G

10.121.8.8  dc-server08  centos 6.4/6.6    32G   200G

2)hosts表和主机名

3)所有节点防火墙关闭或者开放端口;

# 1.关闭防火墙

  service iptables stop

  chkconfig iptables off

  chkconfig ip6tables off

# 2.关闭selinux
  vi /etc/sysconfig/selinux
    修改内容:【SELINUX=disabled】

4)所有节点建立互信(免密码登录);

1、在各节点通过ssh-keygen生成RSA密钥和公钥
ssh-keygen -q -t rsa  -N "" -f  ~/.ssh/id_rsa
2、将所有的公钥文件汇总到一个总的授权key文件中,在M01机器执行如下命令,必须逐行执行:
ssh deserver06 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ssh deserver07 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ssh deserver08 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3、设置授权key文件的权限,在M01机器执行如下命令:
chmod 600 ~/.ssh/authorized_keys
4、分发授权key文件到所有服务器,必须逐行执行:
scp ~/.ssh/authorized_keys  deserver06:~/.ssh/

scp ~/.ssh/authorized_keys  deserver07:~/.ssh/

scp ~/.ssh/authorized_keys  deserver08:~/.ssh/

三,安装包准备

说明: 

1)当系统为centos  6.4  时 ,需要安装libicu-4.2.1-14.el6.x86_64.rpm 包,clickhouse-common-static-18.14.12-1.el6.x86_64.rpm依赖此包。

2)当系统为centos  6.6  时 ,不需要安装libicu-4.2.1-14.el6.x86_64.rpm包,直接安装其他包即可。

3) 安装资源获取:   https://packagecloud.io/Altinity/clickhouse。

4)也可以直接在csdn 下载:https://download.csdn.net/download/u013205003/10968848

四,安装clickhouse(centos 6.4 为例)

1) 分别在个服务器上进行如下安装和配置

2)安装clickhouse

   安装 libicu

    mkdir -p /usr/local/icu/
    cd  /usr/local/icu/libicu-4.2.1-14.el6.x86_64.rpm
    rpm -ivh  libicu-4.2.1-14.el6.x86_64.rpm

安装clickhouse

rpm -ivh  clickhouse-server-common-18.14.12-1.el6.x86_64.rpm
rpm -ivh  clickhouse-compressor-1.1.54336-3.el6.x86_64.rpm
rpm -ivh  clickhouse-common-static-18.14.12-1.el6.x86_64.rpm   
rpm -ivh  clickhouse-server-18.14.12-1.el6.x86_64.rpm
rpm -ivh  clickhouse-client-18.14.12-1.el6.x86_64.rpm
rpm -ivh  clickhouse-test-18.14.12-1.el6.x86_64.rpm
rpm -ivh  clickhouse-debuginfo-18.14.12-1.el6.x86_64.rpm

 3) 修改启动脚本和配置文件

    首先将启动脚本复制一个出来,除了上一篇文章说的外,主要修改配置文件位置和pid文件位置,如下:

    启动脚本路径:/etc/init.d/clickhouse-server

   复制

修改

这里配置文件比如使用config1.xml,pid使用clickhouse-server-1.pid

    然后进入到配置文件目录,将原有配置文件拷贝一份,这里是config1.xml,然后修改配置:

    主要修改内容是:日志文件(和之前不要冲突)、http端口、tcp端口、副本同步端口(这个改完之后clickhouse按照当前实例的端口自动和其他实例同步)、数据文件和tmp目录、users.xml(这个如果都一样可以用同一个)、最后就是集群配置了,下面重点叙述:

    集群配置默认为:<remote_servers incl="clickhouse_remote_servers" />

    zookeeper默认为:<zookeeper incl="zookeeper-servers" optional="true" />

    macros默认为:<macros incl="macros" optional="true" />

首先是集群分片的配置,这个配置所有节点的所有实例完全保持一致:

<remote_servers>
     <distable>
        <shard>
            <!-- Optional. Shard weight when writing data. Default: 1. -->
            <weight>1</weight>
            <!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
            <internal_replication>true</internal_replication>
            <replica>
                <host>10.121.8.6</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>10.121.8.7</host>
                <port>9001</port>
            </replica>
        </shard>
        <shard>
            <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>10.121.8.7</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>10.121.8.8</host>
                <port>9001</port>
            </replica>
        </shard>
		<shard>
            <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>10.121.8.8</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>10.121.8.6</host>
                <port>9001</port>
            </replica>
        </shard>
    </distable>
</remote_servers>

 配置里面的<distable>是分布式标识标签,可以自定义,到最后创建分布式表的时候会用到;然后weight是分片权重,即写数据时有多大的概率落到此分片,因为这里所有分片权重相同所有都设置为1,然后是internal_replication,表示是否只将数据写入其中一个副本,默认为false,表示写入所有副本,在复制表的情况下可能会导致重复和不一致,所以这里一定要改为true,clickhouse分布式表只管写入一个副本,其余同步表的事情交给复制表和zookeeper来进行,然后是replica配置这个好理解,就是一个分片下的所有副本,这里副本的分布一定要手动设计好,保证相互备份,然后再次说明是所有的节点配置一致. 此部分配置严格按照官网配置,参考链接:https://clickhouse.yandex/docs/en/operations/table_engines/distributed/

    然后是zookeeper配置,这个也是所有示例配置都一样:

<zookeeper>
    <node index="1">
        <host>10.121.8.8</host>
        <port>2181</port>
    </node>
</zookeeper>

 这里zookeeper只有一个,如果多个的话继续往下写,就像官网上给出的一样,参考下图:

 然后是复制标识的配置,也称为宏配置,这里唯一标识一个副本名称,每个实例都要配置并且都是唯一的,这里配置如下:

clickhouse1 9000 分片1, 副本1:

<macros>
    <layer>01</layer>
    <shard>01</shard>
    <replica>cluster01-01-1</replica>
</macros>

  clickhouse1 9001 分片3, 副本2:

<macros>
    <layer>01</layer>
    <shard>03</shard>
    <replica>cluster01-03-2</replica>
</macros>

  clickhouse2 9000 分片2, 副本1:

<macros>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值