当前位置:主页 > 查看内容

ClickHouse集群安装部署流程(踩坑解决)

发布时间:2021-05-21 00:00| 位朋友查看

简介:ClickHouse集群安装部署流程踩坑解决 ClickHouse集群安装部署 Fisrt 1、安装之前 1.1、SSE 4.2 指令集 1.2、设置用户的文件句柄数 2、单节点方式 2.1、yum方式安装RPM安装包方式一 2.1.1、推荐使用CentOS、RedHat和所有其他基于rpm的Linux发行版的官方预编译……

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表示支持:
sse4_2

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" />

注释或者删除其中配置的用于测试分布式存储的分片配置:

<test_shard_localhost>
……
</test_unavailable_shard>

然后保存退出

3.2.2、添加集群配置文件

先在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>

    <!-- /etc/clickhouse-server/config.xml 中配置的zookeeper的incl属性值,需要在config.xml中指定,默认为zookeeper-->
    <!--zookeeper相关配置-->
    <zookeeper-servers>
        <!--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>
    
    <macros>
        <replica>bigdata01</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>

划重点:
使用这种方法需要在/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、重启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.2.1、重启服务命令

systemctl restart clickhouse-server

3.2.2、查看服务状态

systemctl status clickhouse-server

如果Active 显示的为 active,且信息中没有错误,则表示启动成功。

3.2.3、登录客户端验证

clickhouse-client

如果你的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 )

;原文链接:https://blog.csdn.net/m0_50638181/article/details/115500479
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐