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
- 调整metrika.xml文件地址,默认为/etc/metrika.xml
- 分布式DDL语句在zookeeper中的目录:
- 不管多大的分区表都可以删除(应用于需要删除表或分区的情况,默认是删除50GB以上的分区表会报错)
- 最大并发处理数(包括insert、select等,默认为100,根据机器性能调整)
vim /etc/clickhouse-server/users.xml,如下仅供参考:
//在default用户下新建一个用户 mc123 1 "networks" replace="replace"> ::/0 default default
4)扩展配置文件metrika.xml(三台机器同步创建,酌情修改)
vim /etc/clickhouse-server/metrika.xml
//集群名,可自行调整 true //同一时刻是否只将数据写入其中一个副本local126 29000 local127 29002 true local127 29000 local128 29002 true local128 29000 local126 29002 "1"> local126 2181 "2"> local127 2181 "3"> local128 2181 //如下是引擎参数的变量 01 //分片名称,相同值则互为副本local126-01 //副本名称,每个节点不同::/0 //对外开放所有地址<case> 10000000000 0.01 lz4 case>
注意:为什么要新建一个metrika.xml扩展文件,其实如果仔细看过clickhouse的配置文件/etc/clickhouse-server/config.xml就能明白
//如果元素具有'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
//修改该段配置03 //分片名称,填与其互为副本的节点所在的分片名local126-02 //副本名称,每个节点不同
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