【德哥说库系列】-Clickhouse集群部署(3分片2副本)

2023-12-13 04:58:31

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
? 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
??????感谢各位大可爱小可爱!??????

前言

近期大数据平台在选型分布式数据库,本文详细讲解了Clickhouse集群部署(3分片2副本)

📣 1.环境准备

操作系统选择:CentOS7.8 x64,搭建一个3分片2副本Clickhouse集群
本次部署6台服务器,生产上推荐每台配置如下:
内存:64G+ CPU:32core+ 硬盘500G+
–ClickHouse的主要应用场景:
电信行业用于存储数据和统计数据使用
用户行为数据记录与分析
信息安全日志分析
商业智能与广告网络价值数据挖掘分析
网络游戏以及物联网的数据处理与分析

在这里插入图片描述

节点Hostnameip地址分片
1clickhouse1172.18.12.2片1
2clickhouse2172.18.12.3片1
3clickhouse3172.18.12.4片2
4clickhouse4172.18.12.5片2
5clickhouse5172.18.12.6片3
6clickhouse6172.18.12.7片3

📣 2.系统部署JDK

##在所有节点均部署
1.下载Linux环境下的jdk1.8
https://www.oracle.com/java/technologies/downloads/#java8
2.rpm安装
[root@clickhouse1 /]# rpm -ivh jdk-8u381-linux-x64.rpm
warning: jdk-8u381-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ad986da3: NOKEY
Preparing… ################################# [100%]
Updating / installing…
1:jdk-1.8-2000:1.8.0_381-9 ################################# [100%]
–安装好后通常默认安装是在/usr/java目录下
[root@clickhouse1 ~]# cd /usr/java
[root@clickhouse1 java]# ll
total 0
lrwxrwxrwx. 1 root root 16 Oct 5 11:12 default -> /usr/java/latest
lrwxrwxrwx. 1 root root 31 Oct 5 11:12 jdk1.8.0-x64 -> /usr/lib/jvm/jdk-1.8-oracle-x64
lrwxrwxrwx. 1 root root 31 Oct 5 11:12 latest -> /usr/lib/jvm/jdk-1.8-oracle-x64
–编辑/etc/profile
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0-x64
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAH?OME/lib/dt.jar:JAVA_HOME/lib/tools.jar
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
–变量重新生效
source /etc/profile
3.确认安装是否成功
[root@clickhouse1 /]# java -version
java version “1.8.0_381”
Java? SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot? 64-Bit Server VM (build 25.381-b09, mixed mode)

📣 3.zookeeper集群部署

直接从这个网址下载即可:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
安装前注意事项:
1)zookeeper节点必须是奇数个,因为zookeeper选举的规则:leader选举,要求可用节点数量必须大于总节点数量/2
2)zookeeper 是使用 java 来运行的,所以需要依赖 JDK,所以安装 zookeeper 之前需要安装部署 JDK
3) 注意关闭节点服务器的防火墙
这里要注意!!!官网上有两个tar.gz文件,bin名称结尾的包就是我们要下载的,可以直接使用。里面有编译好的二进制包,上一个普通的tar.gz包只包含源码,不能直接使用。
在这里我们下载的是3.8.2版本
仅在clickhouse1,clickhouse3,clickhouse5 上面部署即可

? 3.1 解压安装

tar -zxvf apache-zookeeper-3.8.2-bin.tar.gz
mv apache-zookeeper-3.8.2-bin /usr/local/zookeeper

? 3.2 环境变量

添加我们需要的配置信息,ZOOKEEPER_HOME 为你安装的zookeeper目录
vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
##使环境变量生效
source /etc/profile
##查看是否生效
echo $ZOOKEEPER_HOME

? 3.3 集群配置

1)创建相关目录
mkdir -p /usr/local/zookeeper/data
mkdir -p /usr/local/zookeeper/log
2)zookeeper配置文件
cd /usr/local/zookeeper/conf
cp zoo_sample.cfg zoo.cfg 

vi zoo.cfg
##修改以下内容
# 心跳时间
tickTime=2000
# follow连接leader的初始化连接时间,表示tickTime的倍数
initLimit=10
# syncLimit配置表示leader与follower之间发送消息,请求和应答时间长度。
如果followe在设置的时间内不能与leader进行通信,那么此follower将被丢弃,tickTime的倍数
syncLimit=5
# 客户端连接端口
clientPort=2181
# 节点数据存储目录,需要提前创建,注意myid添加,用于标识服务器节点
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
server.1=172.18.12.2:2888:3888
server.3=172.18.12.4:2888:3888
server.5=172.18.12.6:2888:3888

3)每台机器配置节点id
##每台机器分别执行
在机器1上执行:
echo 1 >/usr/local/zookeeper/data/myid

在机器3上执行:
echo 3 >/usr/local/zookeeper/data/myid

在机器5上执行:
echo 5 >/usr/local/zookeeper/data/myid

? 3.4 启动zookeeper

##启动zookeeper,在这里我们可以只启动节点1、节点3、节点5,或者5个节点启动都行
cd /usr/local/zookeeper/bin/
./zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg
Starting zookeeper … STARTED
##查看zookeeper启动状态
sh zkServer.sh status
##验证zookeeper
启动成功后可以随便选择一个节点尝试连接另一个节点验证
sh zkCli.sh -server 172.18.12.2:2181
成功进入后显示:
[zk: 172.18.12.2:2181(CONNECTED) 0]

📣 4.ClickHouse集群部署

? 4.1 安装前准备

1)指令集检查
ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。
官方预构建的二进制文件通常针对x86_64进行编译,并利用SSE 4.2指令集。
检查当前CPU是否支持SSE 4.2的命令:
[root@clickhouse1 /]# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported

2)文件数限制修改
调整CentOS系统对打开文件数的限制,在/etc/security/limits.conf和/etc/security/limits.d/20-nproc.conf文件的末尾加上
soft nofile 65536
hard nofile 65536
soft nproc 131072
hard nproc 131072


cat >> /etc/security/limits.conf <<EOF
soft nofile 65536
hard nofile 65536
soft nproc 131072
hard nproc 131072
EOF

cat >> /etc/security/limits.d/20-nproc.conf <<EOF
soft nofile 65536
hard nofile 65536
soft nproc 131072
hard nproc 131072
EOF

? 4.2 RPM包安装

推荐使用CentOS、RedHat和所有其他基于rpm的Linux发行版的官方预编译rpm包。
##安装依赖
yum install -y yum-utils
yum install -y libtool
yum install -y unixODBC
##上传下载好的rpm包安装即可
rpm -ivh clickhouse-common-static-23.9.1.1854.x86_64.rpm
rpm -ivh clickhouse-client-23.9.1.1854.x86_64.rpm
rpm -ivh clickhouse-server-23.9.1.1854.x86_64.rpm

? 4.3 修改配置文件

ClickHouse提供了非常高级的基于zookeeper的表复制方式,同时也提供了基于Cluster的复制方式,本次我们使用表复制方式,所有节点均作相同的设置

## 修改config.xml
cd /etc/clickhouse-server/
vim config.xml

1)配置 listen_host
更改监听让所有正常ip可连接
<listen_host>0.0.0.0</listen_host>

2)配置zookeeper
host改成你自己的zookeeper 内网ip地址

<zookeeper>
        <node index="1">
            <host>172.18.12.2</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>172.18.12.4</host>
            <port>2181</port>
        </node>
        <node index="5">
            <host>172.18.12.6</host>
            <port>2181</port>
        </node>
</zookeeper>

3)密码设置
vi users.xml

-----
<password>ck123.com</password>
<networks>
	<ip>::/0</ip>
</networks>
-----


4)配置 remote_server
<remote_servers>
        <!--ck_cluster是集群名字,自己命名就可以,建库建表需要用到-->
        <ck_cluster> 
            <!-- 数据分片1  -->
            <shard>
                <weight>1</weight>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>172.18.12.2</host>
                    <port>9000</port>
                    <user>default</user>
					<password>ck123.com</password>
                </replica>
                <replica>
                    <host>172.18.12.3</host>
                    <port>9000</port>
                    <user>default</user>
					<password>ck123.com</password>
                </replica>
            </shard>
            <!-- 数据分片2  -->
            <shard>
            		<weight>1</weight>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>172.18.12.4</host>
                    <port>9000</port>
                    <user>default</user>
					<password>ck123.com</password>
                </replica>
                <replica>
                    <host>172.18.12.5</host>
                    <port>9000</port>
                    <user>default</user>
					<password>ck123.com</password>
                </replica>
            </shard>
            <!-- 数据分片3  -->
            <shard>
                 <weight>1</weight>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>172.18.12.6</host>
                    <port>9000</port>
                    <user>default</user>
					<password>ck123.com</password>
                </replica>
                <replica>
                    <host>172.18.12.7</host>
                    <port>9000</port>
                    <user>default</user>
					<password>ck123.com</password>
                </replica>
            </shard>
        </ck_cluster>
</remote_servers>


5)配置macros

根据每台机器的分片副本配置,如第3分片的第1副本这样配置,每个服务器配置不相同
<macros>
        <layer>02</layer>
        <shard>03</shard>
        <replica>172.18.12.6</replica>
</macros>

? 4.4. 启动集群

yum install sudo
[root@clickhouse1 ~]# /etc/init.d/clickhouse-server start

/etc/init.d/clickhouse-server status
[root@clickhouse1 ~]# /etc/init.d/clickhouse-server status

在这里插入图片描述

–验证集群状
[root@clickhouse1 ~]# clickhouse-client
clickhouse1 ) select * from system.clusters;
clickhouse1 ) select cluster,host_name from system.clusters;
clickhouse1 ) select * from system.macros;

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_41645135/article/details/133621734
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。