公司要部署clickhouse集群,然后想去网上参考参考结果全都写的不简单易懂,就像藏私一手一样,因此决定写这篇文章记录一手实际部署
前期准备
(1)yum源更改
首先是安装clickhouse,三台服务器同样操作
安装阿里源(centos 7系统2024/6/30不维护了所以要更改yum源)
mv CentOS-Base.repo CentOS-Base.repo.bak
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
yum clean all && yum makecache
yum repolist #查看是否启动阿里源
安装源
yum install -y yum-utils
yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
(2)clickhouse安装
安装clickhouse服务端与客户端
yum install -y clickhouse-server clickhouse-client
等待安装完成,统一化标准将clickhouse的数据,日志都存储到LVM的/opt路径的逻辑卷下
mkdir -p /opt/clickhouse/{access,data,format_schemas,logs,tmp,top_level_domains,user_files,caches} #创建存储文件夹
chown -R clickhouse:clickhouse /opt/clickhouse #更改所属者与所属组
进入clickhouse文件路径
cd /etc/clickhouse-server #进入路径
#对存储位置进行更改
sed -i "s#/var/lib#/opt#g" /etc/clickhouse-server/config.xml
sed -i "449s#/opt/clickhouse#/opt/clickhouse/data#g" /etc/clickhouse-server/config.xml
sed -i "s#/var/log/clickhouse-server#/opt/clickhouse/logs#g" /etc/clickhouse-server/config.xml
启动
systemctl start clickhouse-server
systemctl enable clickhouse-server
这样三台单点搭建完毕了
ZK分布式集群部署
现在进行zookeeper搭建,集群间通信是通过zookeeper实现的,三点的clickhouse即可
部署zookeeper集群部署
第一步:JDK部署
本次将JDK放在/opt目录下 本次资源先unzip解压再用tar解压
#JAVA_HOME=/opt/jdk1.8.0_202 这里的JDK路径根据你实际的写
cat >> /etc/profile << EOF
JAVA_HOME=/opt/jdk1.8.0_202
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
EOF
source /etc/profile
java -version
如果不好使请更换使用该方式
JAVA_HOME=/opt/jdk1.8.0_202
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export PATH
或者使用clickhouse用户
vim /home/clickhouse/.bashrc
放入上面的变量
并声明
第二步:部署zk分布式集群
(1)更改主机名
#更改主机名
hostnamectl set-hostname k8s1 && su
hostnamectl set-hostname k8s2 && su
hostnamectl set-hostname k8s3 && su
(2)解压压缩包并配置
tar -zxvf zookeeper-3.4.14.tar.gz -C /opt && mv zookeeper-3.4.14 zookeeper
mkdir /opt/zookeeper/{logs,data} && chmod 755 /opt/zookeeper/{logs,data}
mv /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
cat > /opt/zookeeper/conf/zoo.cfg << EOF
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
syncLimit=5
initLimit=10
tickTime=2000
server.1=k8s1:2888:3888 #这里的k8s1,k8s2,k8s3换成你的主机名
server.2=k8s2:2888:3888
server.3=k8s3:2888:3888
EOF
#这里的是把你的IP地址和对应主机名写入里面
cat >> /etc/hosts << EOF
10.1.1.5 k8s1
10.1.1.6 k8s2
10.1.1.7 k8s3
EOF
#在K8S1中执行
echo "1" > /opt/zookeeper/data/myid
#在K8S2中执行
echo "2" > /opt/zookeeper/data/myid
#在K8S3中执行
echo "3" > /opt/zookeeper/data/myid
cat >> /etc/profiler << EOF
export ZOOKEEPER_HOME=/opt/zookeeper/bin/
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$ZOOKEEPER_HOME
EOF
source /etc/profile
#依次启动
cd /opt/zookeeper/bin && ./zkServer.sh start
clickhouse集群搭建
(1)编辑配置文件
vim /etc/clickhouse-server/config.xml
#在297行处添加以下内容
<listen_host>0.0.0.0</listen_host>
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
<remote_servers incl="clickhouse_remote_servers" />
<zookeeper incl="zookeeper-servers" optional="true" />
<macros incl="macros" optional="true" />
(2)添加配置文件metrika
touch /etc/clickhouse-server/metrika.xml
vim metrika.xml
#将一下内容放入
<yandex>
<clickhouse_remote_servers>
<cyy_ck_1shards_3replicas> <!-- 自定义集群名称 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>k8s1</host> #你的主机名
<port>9000</port>
<user>你的用户</user>
<password>你的密码</password>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>k8s2</host>
<port>9000</port>
<user>你的用户</user>
<password>你的密码</password>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>k8s3</host>
<port>9000</port>
<user>你的用户</user>
<password>你的密码</password>
</replica>
</shard>
</cyy_ck_1shards_3replicas>
</clickhouse_remote_servers>
<!--zookeeper相关配置 -->
<zookeeper-servers>
<node index="1">
<host>k8s1</host>
<port>2181</port>
</node>
<node index="2">
<host>k8s2</host>
<port>2181</port>
</node>
<node index="3">
<host>k8s3</host>
<port>2181</port>
</node>
</zookeeper-servers>
<macros>
<replica>k8s1</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>
#传输该文本文件给k8s2与k8s3主机 修改该处,其余地方一致
<macros>
<replica>k8s2</replica> #写你当前主机名
</macros>
<macros>
<replica>k8s3</replica> #写你当前主机名
</macros>
(3)用户账号密码添加
#clickhouse使用的是sha256加密后的密码,账户密码信息存储在users.xml文件中
#举例
echo -n xqweeqsad123213sdfsf | openssl dgst -sha256 #生成加密密码
vim /etc/clickhouse-server/users.xml
#给default用户添加密码
<password_sha256_hex>加密后的密码</password_sha256_hex>这里存放default的管理用户密码
#以为添加用户tongbu为例
<tongbu>
<password_sha256_hex>生成的加密密码</password_sha256_hex>
<networks>
<ip>IP地址</ip> #允许这个账户登录的地址
</networks>
<profile>default</profile>
<quota>default</quota>
</tongbu>
(4)启动
#三台服务器同时启动
systemctl start clickhouse-server
(5)验证
clickhouse-client
#输入default密码
#查看集群的命令是否搭建成功
select * from system.macros;
select * from system.clusters;