【ClickHouse】集群安装部署流程(踩坑解决)
ClickHouse集群安装部署
Fisrt
第一次写博客,有些地方不一定对,有问题的话自己尝试解决吧。
自己亲手实践安装,踩了很多坑!!!
1、安装之前
1.1、SSE 4.2 指令集
ClickHouse通过向量化执行引擎来加速查询,向量化执行可以简单的看作一项消除程序中循环的优化,为了实现向量化需要利用 CPU 的 SIMD (Single Instruction Multiple Data)指令,通过单条指令可以实现操作多条数据。在现代计算机中是通过数据并行来提高性能,其原理就是在 CPU 寄存器层面实现数据的并行操作。ClickHouse 目前通过 SSE 4.2 指令集实现向量化执行的。
下面是检查当前CPU是否支持SSE 4.2的命令:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
如果返回SSE 4.2 supported表示支持:
1.2、设置用户的文件句柄数
调整一下CentOS系统对打开文件数的限制,在/etc/security/limits.conf、/etc/security/limits.d/*-nproc.conf这2个文件的末尾加入以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
# 或者配置 clickhouse 用户的文件句柄数,clickhouse 会以 clickhouse 用户运行
#clickhouse soft nofile 262144
#clickhouse hard nofile 262144
修改完毕之后,SSH工具重新连接,再次登录后,执行如下命令查看,如果输出的值是我们设置的则表示已生效。
# 查看
ulimit -n
2、单节点方式
在ClickHouse官方文档中有很多安装方式,本文采用其中二种方式介绍,更多方法的详细内容请参见官方文档:ClickHouse官方中文文档
2.1、yum方式安装RPM安装包方式一
如果服务器可以连接网络,则可以直接通过yum方式安装,执行如下命令,如果是普通用户需要有sudo权限。
2.1.1、推荐使用CentOS、RedHat和所有其他基于rpm的Linux发行版的官方预编译rpm包。
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
如果您想使用最新的版本,请用testing替代stable(我们只推荐您用于测试环境)。prestable有时也可用。
2.1.2、查看安装包命令:
yum list | grep clickhouse
主要有以下三个包:
clickhouse-client.noarch 21.3.4.25-2 @repo.clickhouse.tech_rpm_stable_x86_64
clickhouse-common-static.x86_64 21.3.4.25-2 @repo.clickhouse.tech_rpm_stable_x86_64
clickhouse-server.noarch 21.3.4.25-2 @repo.clickhouse.tech_rpm_stable_x86_64
2.1.3、然后运行命令安装:
sudo yum install clickhouse-server clickhouse-client
2.2、yum方式安装RPM安装包方式二
2.2.1、安装curl工具
yum install -y curl
2.2.2、添加clickhouse的yum镜像
curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash
2.2.3、检查镜像情况
yum list | grep clickhouse
主要有以下三个包:
clickhouse-client.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
clickhouse-server.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
clickhouse-common-static.x86_64 20.8.3.18-1.el7 Altinity_clickhouse
2.2.4、安装clickhouse的服务端和客户端
yum install -y clickhouse-server clickhouse-client
2.3、启动服务端
2.3.1、启动服务端:
service clickhouse-server start
2.3.2、如果没有service ,可以运行如下命令在后台启动服务:
sudo /etc/init.d/clickhouse-server start
2.3.3、如果提示: Init script is already running 则使用下面命令启动:
systemctl start clickhouse-server
日志文件将输出在/var/log/clickhouse.server/文件夹。
2.3.4、查看服务状态:
systemctl status clickhouse-server
2.3.5、如果服务没有启动,检查/etc/clickhouse-server/config.xml中的配置。您也可以手动从控制台启动服务:
clickhouse-server --config -file=/etc/clickhouse-server/config.xml
日志文件将直接输出在控制台。
2.4、启动交互式客户端(在机器根目录下启动)
2.4.1、启动命令:
clickhouse-client
启动成功如下:
[root@bigdata01 ~]# clickhouse-client
ClickHouse client version 21.3.4.25 (official build).
Connecting to localhost:9001 as user default.
Connected to ClickHouse server version 21.3.4 revision 54447.bigdata01 😃 q;
Bye.
[root@bigdata01 ~]#
退出命令:q;
2.4.2、客户端常见参数:
[root@bigdata01 ~]# clickhouse-client -help
Main options:
--help produce help message
-C [ --config-file ] arg config-file path
-c [ --config ] arg config-file path (another shorthand)
-h [ --host ] arg (=localhost) server host
--port arg (=9000) server port
-s [ --secure ] Use TLS connection
-u [ --user ] arg (=default) user
--password arg password
未设置密码时 --database / -d 登录的数据库
–help 查看帮助信息
–host / -h 服务端地址,默认是 localhost,如果修改 config.xml 中的 listen_host 值后可以使用此参数指定访问的 ip
–multiline / -m 支持SQL多行语句,而不是回车就执行
–multiquery / -n 允许一次执行多条 SQL 语句 --password 登录的密码,默认值为空
–port 服务端的 TCP 端口,默认值为 9000
–query / -q 指定 SQL 语句
–time / -t 打印每条 SQL 的执行时间
–user / -u 登录的用户名,默认值为 default
–version / -V 查看版本信息
2.4.3、多行输入 (加上-m 之后,在客户端可以多行输入):
clickhouse-client -m
2.5、升级
如果需要在原有 ClickHouse 的基础上升级也是非常方便,直接下载新版本的 RPM 包,执行如下命令安装升级(可以不用关闭 ClickHouse 服务),升级的过程中,原有的 config.xml 等配置均会被保留,也可以参考官方资料使用其它方式升级 ClickHouse。
2.5.1、查看当前版本
clickhouse-server --version
2.5.2、升级命令:
rpm -Uvh clickhouse-*-20.8.3.18-1.el7.x86_64.rpm
安装的过程可以看到,新包中的配置以 .rpmnew 后缀,旧的配置文件保留
2.6、目录结构
/etc/clickhouse-server
:服务端的配置文件目录,包括全局配置 config.xml和用户配置 users.xml
/var/lib/clickhouse
:默认的数据存储目录,如果是生产环境可以将其修改到空间较大的磁盘挂载路径。可以通过修改 /etc/clickhouse-server/config.xml 配置文件中path、tmp_path和user_files_path标签值来设置。
/var/log/clickhouse-server
:默认的日志保存目录。同样可以通过修改 /etc/clickhouse-server/config.xml 配置文件中log和errorlog标签值来设置。
/etc/cron.d/clickhouse-server
:clickhouse server 的一个定时配置,用于恢复因异常中断的 ClickHouse 服务进程。
~/.clickhouse-client-history
:client 执行的 sql 历史记录。
2.7、服务端clickhouse-server常用命令
2.7.1、启动
systemctl start clickhouse-server
可以在/var/log/clickhouse-server/目录中查看日志。
或者基于指定的配置文件启动服务。使用此命令时注意权限
clickhouse-server --config-file=/etc/clickhouse-server/my_config.xml
2.7.2、查看状态
systemctl status clickhouse-server
2.7.3、重启
systemctl restart clickhouse-server
2.7.4、关闭
systemctl stop clickhouse-server
3、集群方式
例如在三个节点(bigdata01、bigdata02、bigdata03)的机器上安装部署ClickHouse,CentOS 7系统的防火墙和SELINUX已经关闭或禁止或端口已开放。集群的方式需要依赖ZooKeeper服务,因此先要保证ZooKeeper服务正常启动。
3.1、每个节点都采用单节点方式安装ClickHouse服务
过程看上面,此处略。
3.2、集群配置
3.2.1、开启远程访问权限
因为集群之间需要互相访问其它节点的服务,需要开放ClickHouse服务的ip和端口
进入机器的根目录下 /etc/clickhouse-server/ 目录下
vi config.xml;
进入配置文件中,查找到<listen_host>标签(注释里)
如果集群ipv4和ipv6地址都支持,将:
<listen_host>::</listen_host> 取消注释
如果集群支持ipv4和不支持ipv6,将:
<listen_host>0.0.0.0</listen_host> 取消注释
下面这种方式我没有成功,应该是我的服务器没有设置支持ipv6
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>
至于怎么看主机是否支持ipv4和ipv6以及如何开启,可以去这里了解
查看服务器是否支持ipv6(Linux)
添加我们后面需要创建的metrika.xml文件的路径:
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
再添加以下内容:
<remote_servers incl="clickhouse_remote_servers" optional="true" />
<zookeeper incl="zookeeper-servers" optional="true" />
然后保存退出
3.2.2、添加集群配置文件
ClickHouse 支持原生的分布式集群。ClicHouse集群的节点需要借助zookeeper 进行通信。要注意的是,ClickHouse 集群与 Zookeeper集群不是紧密耦合的。他们通过接口来通信。因此,Zookeeper 集群和Clickhouse 集群部署不要求部署在相同的服务器上,也不需要有相同数量的节点。
先在bigdata01节点配置/etc/clickhouse-server/metrika.xml(需要自己创建,默认为 /etc/metrika.xml,自己制定时需要在config.xml中指明),这个文件主要将ClickHouse各个服务的host和port、ZooKeeper集群的各个节点配置到文件中。bigdata02和bigdata03也同样配置,只不过需要将macros标签下的replica标签中的值改为自己节点的主机名或者ip。
metrika.xml内容如下(复制过去请将里面所有的中文注释删掉,否则会报编码错误,我们放这里是为了方便理解,不删的话把编码格式改为utf-8即可):
<yandex>
<!-- /etc/clickhouse-server/config.xml 中配置的remote_servers的incl属性值,需要在config.xml中指定,默认为remote_servers-->
<clickhouse_remote_servers>
<clickhouse_cluster><!-- 自定义的集群名 -->
<!-- 数据分片1 -->
<shard>
<internal_replication>true</internal_replication>
<!-- 分片1的副本,只设置一个,就是它本身 -->
<replica>
<host>bigdata01</host>
<port>9000</port>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>bigdata02</host>
<port>9000</port>
</replica>
</shard>
<!-- 数据分片3 -->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>bigdata03</host>
<port>9000</port>
</replica>
</shard>
</clickhouse_cluster><!-- 自定义的集群名 -->
</clickhouse_remote_servers>
<!-- 本节点副本名称 -->
<macros>
<replica>bigdata01</replica>
</macros>
<!-- 监听网络-->
<networks>
<ip>::/0</ip>
</networks>
<!-- /etc/clickhouse-server/config.xml 中配置的zookeeper的incl属性值,需要在config.xml中指定,默认为zookeeper-->
<!--zookeeper相关配置-->
<zookeeper-servers>
<!-- index是连接zookeeper的顺序,zookeeper中节点的index顺序需要与主机名或者ip匹配,不一定一一对应,可以去查看一下你部署的zookeeper主机映射,保证节点映射匹配-->
<node index="1">
<host>bigdata02</host>
<port>2181</port>
</node>
<node index="2">
<host>bigdata03</host>
<port>2181</port>
</node>
<node index="3">
<host>bigdata01</host>
<port>2181</port>
</node>
</zookeeper-servers>
<!-- 数据压缩算法 -->
<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>
划重点:
使用这种方法需要在/etc/clickhouse-server/config.xml中指定你创建的metrika.xml文件路径,还要指定remote_servers和zookeeper的incl属性值,比较麻烦,所以可以直接在全局配置文件/etc/clickhouse-server/config.xml中修改即可。
我采用的就是直接修改config.xml。
这里有个坑需要注意,如果你开始是用了配置metrika.xml文件的方式,失败了,然后想换用直接修改config.xml的方式,clickhouse-server重启服务时一直失败,查看日志就发现,明明我删掉了指定路径,怎么在重启的时候它还是会去寻找metrika.xml文件,因为默认路径已经被修改到了你指定的路径,不管在config.xml中怎么改,它都会去加载metrika.xml配置,如果metrika.xml原本就没配置对的话,就会一直报错。
解决办法有两种:
第一种:全部节点卸载clickhouse,怎么卸载请自行百度,这里就不给出了,网上很多,然后重新安装,再按照上面我说的直接修改config.xml的方法开始部署,当然这种方法比较笨,不建议,但我是这么做的。🙃
第二种:删掉你的metrika.xml文件,哪怕默认路径是这里,没有文件的话它就不会加载metrika.xml 了,在config.xml中直接删掉指定路径没有用,或者你也可以直接将指定路径改为默认路径/etc/metrika.xml并删掉你的metrika.xml文件,再重启即可。本人觉得这样可行,但是没试过,我是直接删库重来的,慎用。
3.2、用户配置(设置用户名和密码)
3.2.1、clickhouse的密码有2种形式,一种是明文,一种是写sha256sum的Hash值
官方不建议直接写明文密码,可以用以下方法生成密码
方法一随机密码,命令:
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD";
echo -n "$PASSWORD" | sha256sum | tr -d '-'
方法二自定义密码,例如对密码123456进行SHA256加密:
echo -n 123456 | openssl dgst -sha256
3.2.2、cilckhouse的配置文件默认地址 /etc/clickhouse-server
vim users.xml,找到 users --> default --> 标签下的password修改成password_sha256_hex,并把密文填进去
<password_sha256_hex>密码密文</password_sha256_hex>
3.2.3、添加密码后,命令行启动的方式为
clickhouse-client -h ip地址 -d default -m -u default --password 密码明文
3.3、重启clickhouse-server服务
在三个节点的服务器上分别启动ClickHouse服务。
启动时请保证每个节点的9000端口未被占用
netstat -tunlp | grep 9000
如果占用请修改/etc/clickhouse-server/config.xml文件中的端口(<tcp_port>9000</tcp_port>),同时记得/etc/clickhouse-server/metrika.xml中(<clickhouse_remote_servers>)的端口号也要统一。
如果你跟我一样是直接修改/etc/clickhouse-server/config.xml的方式的话,其中(<remote_servers>)的端口号也要统一。
3.3.1、重启服务命令
systemctl restart clickhouse-server
3.3.2、查看服务状态
systemctl status clickhouse-server
如果Active 显示的为 active,且信息中没有错误,则表示启动成功。
3.3.3、登录客户端验证
clickhouse-client -m
如果你的9000端口被占用,换成了其他端口 那么登录客户端的时候要指定端口号:- -port 端口号
例如你设置的9001,登录命令为:
clickhouse-client --port 9001
当然你也可以修改客户端的默认端口,一劳永逸。
clickhouse-client查找配置文件的顺序:
1)通过–config-file指定的配置文件。
2)./clickhouse-client.xml
3)~/.clickhouse-client/config.xml
4)/etc/clickhouse-client/config.xml
不指定端口时,默认有以下端口
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 340/clickhouse-serv
tcp 0 0 127.0.0.1:9004 0.0.0.0:* LISTEN 340/clickhouse-serv
tcp 0 0 127.0.0.1:9009 0.0.0.0:* LISTEN 340/clickhouse-serv
tcp 0 0 127.0.0.1:8123 0.0.0.0:* LISTEN 340/clickhouse-serv
vim /etc/clickhouse-server/config.xml
修改:
<tcp_port>9001</tcp_port>
三个结点的都改好后,重新登录客户端
clickhouse-client
查看集群信息
[root@bigdata01 ~]# clickhouse-client
ClickHouse client version 21.3.4.25 (official build).
Connecting to localhost:9001 as user default.
Connected to ClickHouse server version 21.3.4 revision 54447.
bigdata01 :) SELECT * FROM system.clusters
SELECT *
FROM system.clusters
Query id: d53821ac-d362-419d-9c51-c3772e6a1e33
┌─cluster────────────┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name─┬─host_address─┬─port─┬─is_local─┬─user────┬─default_database─┬─errors_count─┬─estimated_recovery_time─┐
│ clickhouse_cluster │ 1 │ 1 │ 1 │ bigdata01 │ xx.xx.xx.xx │ 9001 │ 1 │ default │ │ 0 │ 0 │
│ clickhouse_cluster │ 2 │ 1 │ 1 │ bigdata02 │ xx.xx.xx.xx │ 9001 │ 0 │ default │ │ 0 │ 0 │
│ clickhouse_cluster │ 3 │ 1 │ 1 │ bigdata03 │ xx.xx.xx.xx │ 9001 │ 0 │ default │ │ 0 │ 0 │
└────────────────────┴───────────┴──────────────┴─────────────┴───────────┴──────────────┴──────┴──────────┴─────────┴──────────────────┴──────────────┴─────────────────────────┘
3 rows in set. Elapsed: 0.002 sec.
End
参考文章
参考文章:
[1]: ClickHouse官方中文文档
[2]: ClickHouse介绍及安装(含集群方式)和使用
[3]: ClickHouse之入门学习-单节点安装 / 集群的建立 / 基本命令操作-日志系列引擎(2 )