clickhouse(二)集群搭建-三分片两副本模式

环境说明:三台centos7服务器+clickhouse20.8.3.18+jdk1.8

架构图:

机器准备:

IP 端口 服务 配置文件
192.168.85.126(local126) 2181 zookeeper zoo.cfg
192.168.85.127(local127) 2181 zookeeper zoo.cfg
192.168.85.128(local128) 2181 zookeeper zoo.cfg
192.168.85.126(local126) 29000/28123 clickhouse客户端、服务端

config.xml、users.xml、metrika.xml

192.168.85.126(local126) 29002/28124 clickhouse客户端、服务端

config2.xml、users2.xml、metrika2.xml

192.168.85.127(local127) 29000/28123 clickhouse客户端、服务端

config.xml、users.xml、metrika.xml

192.168.85.127(local127) 29002/28124 clickhouse客户端、服务端

config2.xml、users2.xml、metrika2.xml

192.168.85.128(local128) 29000/28123 clickhouse客户端、服务端

config.xml、users.xml、metrika.xml

192.168.85.128(local128) 29002/28124 clickhouse客户端、服务端

config2.xml、users2.xml、metrika2.xml

 

 

1. 准备工作(三台机器同步)

1)关闭firewalld和SELINUX

systemctl stop firewalld && systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2)配置hosts域名解析,方便后续使用主机名

vim /etc/hosts,如:

 #为利于服务器间文件传输,可进一步做免密登录

2. 搭建zookeeper集群(三台机器同步)

 1)官网下载地址:http://mirror.bit.edu.cn/apache/zookeeper/

tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local   //文件解压
cd /usr/local/ && mv zookeeper-3.4.14 zookeeper  //文件夹重命名
cd zookeeper && mkdir data logs    //创建数据目录和日志目录
cd conf/ && cp zoo_sample.cfg zoo.cfg    //进入conf文件夹下将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg 文件

2)编辑zoo.cfg文件,我的配置如下:

 参数说明:

  • tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime
  • dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。
  • dataLogDir:   该配置需手动添加,用于存储产生的日志,使用专用的日志存储设备能够大大提高系统的性能。
  • client:监听客户端连接的端口。
  • initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
  • syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
  • server.A=B:C:D

        A:其中 A 是一个数字,表示这个是服务器的编号;

        B:是这个服务器的 ip 地址;

        C:Zookeeper服务器之间的通信端口;

        D:Leader选举的端口。

优化自动清理snapshot和事务日志的功能:

autopurge.purgeInterval=1       //这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。
autopurge.snapRetainCount=48    //这个参数指定了需要保留的文件数目。默认是保留3个。

 

3)创建myid文件

cd /usr/local/zookeeper/data       //进入zookeeper数据目录
echo 1 > myid     //里面的配置和zoo.cfg的server.x配置保持一致,如本机器编号为1

4)启动zookeeper

cd /usr/local/zookeeper/bin/
./zkServer.sh start    //启动服务
./zkServer.sh status    //查看状态
#./zkServer.sh stop //停止服务
#./zkServer.sh restart //重启服务

 如图,可以看到,三台机器,一主两从。

3. 搭建clickhouse集群

1)下载并安装clickhouse包

直接点击下载或用如下命令下载

wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-common-static-20.8.3.18-1.el7.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-common-20.8.3.18-1.el7.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-20.8.3.18-1.el7.x86_64.rpm/download.rpm
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-client-20.8.3.18-1.el7.x86_64.rpm/download.rpm

安装软件包

rpm -ivh clickhouse-common-static-20.8.3.18-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-common-20.8.3.18-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-20.8.3.18-1.el7.x86_64.rpm
rpm -ivh clickhouse-client-20.8.3.18-1.el7.x86_64.rpm
//按顺序安装

 2)创建数据目录、日志目录、临时目录

默认的目录为:

/var/lib/clickhouse          //数据目录
/var/lib/clickhouse/tmp      //临时目录
/var/log/clickhouse-server   //日志目录

实际生产环境中,这些目录通常放在数据盘而不是系统盘,如下创建目录:

mkdir -p /weblogic/clickhouse/{data1,data2,logs1,logs2,tmp1,tmp2}
//单台机器运行两个节点,故创建两份目录
chown -R clickhouse:clickhouse /weblogic/clickhouse/ 
//给目录赋权

3)修改调整配置

vim /etc/clickhouse-server/config.xml,如下仅供参考:

  • 目录修改

  •  端口修改,不与现有程序冲突即可

 

 

  • 修改监听IP为本机所有ipv4地址

  • 调整metrika.xml文件地址,默认为/etc/metrika.xml

  • 分布式DDL语句在zookeeper中的目录:

 

  • 不管多大的分区表都可以删除(应用于需要删除表或分区的情况,默认是删除50GB以上的分区表会报错)

  • 最大并发处理数(包括insert、select等,默认为100,根据机器性能调整)

 

vim /etc/clickhouse-server/users.xml,如下仅供参考:

    <mc>     //在default用户下新建一个用户
            <password>mc123</password>
            <access_management>1</access_management>
            <networks incl="networks" replace="replace">
                <ip>::/0</ip> 
            </networks>
            <profile>default</profile>
            <quota>default</quota>
    </mc>

4)扩展配置文件metrika.xml(三台机器同步创建,酌情修改)

vim /etc/clickhouse-server/metrika.xml

<yandex>
<clickhouse_remote_servers>
<perftest_3shards_2replicas>               //集群名,可自行调整

<shard>
<internal_replication>true</internal_replication>    //同一时刻是否只将数据写入其中一个副本
<replica>
<host>local126</host>
<port>29000</port>
</replica>
<replica>
<host>local127</host>
<port>29002</port>
</replica>
</shard>

<shard>
<replica>
<internal_replication>true</internal_replication>
<host>local127</host>
<port>29000</port>
</replica>
<replica>
<host>local128</host>
<port>29002</port>
</replica>
</shard>

<shard>
<internal_replication>true</internal_replication>
<replica>
<host>local128</host>
<port>29000</port>
</replica>
<replica>
<host>local126</host>
<port>29002</port>
</replica>
</shard>

</perftest_3shards_2replicas>
</clickhouse_remote_servers>

<!--zookeeper相关配置-->
<zookeeper-servers>
<node index="1">
<host>local126</host>
<port>2181</port>
</node>
<node index="2">
<host>local127</host>
<port>2181</port>
</node>
<node index="3">
<host>local128</host>
<port>2181</port>
</node>
</zookeeper-servers>

<macros>    //如下是引擎参数的变量
<share>01</share>         //分片名称,相同值则互为副本
<replica>local126-01</replica>   //副本名称,每个节点不同
</macros>

<networks>
<ip>::/0</ip>   //对外开放所有地址
</networks>

<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>

</yandex>

注意:为什么要新建一个metrika.xml扩展文件,其实如果仔细看过clickhouse的配置文件/etc/clickhouse-server/config.xml就能明白

<!-- If element has 'incl' attribute, then for it's value will be used corresponding substitution from another file.
         By default, path to file with substitutions is /etc/metrika.xml. It could be changed in config in 'include_from' element.
         Values for substitutions are specified in /yandex/name_of_substitution elements in that file.
      -->
//如果元素具有'incl'属性,则对其值将使用来自另一个文件的相应替换。默认情况下,替换文件的路径是/etc/metrika.xml。它可在'include_from'元素的配置中更改。替换的值在该文件的/yandex/name_of_substitution元素中指定。

5)为节点2复制相关文件

cd /etc/clickhouse-server/ && cp users.xml users2.xml && cp config.xml config2.xml && cp metrika.xml metrika2.xml   //为节点2复制配置文件
cd /etc/init.d && cp clickhouse-server clickhouse-server2  //为节点2复制一份启动脚本
vim clickhouse-server2    //编辑修改节点2的启动脚本

更改配置:

  • CLICKHOUSE_CONFIG=$CLICKHOUSE_CONFDIR/config2.xml
  • CLICKHOUSE_PIDFILE="$CLICKHOUSE_PIDDIR/$PROGRAM-2.pid"

 6)为节点2修改配置文件

vim /etc/clickhouse-server/metrika2.xml

//修改该段配置
<macros>    
<share>03</share>         //分片名称,填与其互为副本的节点所在的分片名
<replica>local126-02</replica>   //副本名称,每个节点不同
</macros>

vim /etc/clickhouse-server/config2.xml

  • 目录修改
sed -i 's/data1/data2/g;s/logs1/logs2/g;s/tmp1/tmp2/g' /etc/clickhouse-server/config2.xml
  • users.xml文件目录调整

  • metrka.xml文件目录调整

  • 修改端口
sed -i 's/28123/28124/g;s/29000/29002/g;s/29004/29005/g;s/29009/29010/g' /etc/clickhouse-server/config2.xml 

7)启动节点

/etc/init.d/clickhouse-server start && /etc/init.d/clickhouse-server2 start
/etc/init.d/clickhouse-server status && /etc/init.d/clickhouse-server2 status 
ps -ef|grep clickhouse

 如上每台机器启动有两个节点。

 4.客户端连接测试

clickhouse-client -h local126 --port 29000 -u mc --password -m

参数说明:

-h    //IP或主机名
--port   //客户端监听端口
-u    //用户名
--password   //密码
-m   //支持回车换行,以`;`结束sql

 

posted @ 2021-08-10 19:27  半生徒然  阅读(2655)  评论(0编辑  收藏  举报