1、Clickhouse 单节点与集群部署

发布时间 2023-04-04 18:33:54作者: Cuckoo_Yang

图片

一、单节点部署

1.1、修改文件描述符

 vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

 vim /etc/security/limits.d/20-nproc.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

1.2、安装依赖

yum install -y libtool
yum install -y *unixODBC*

1.3、CentOS 取消 SELINUX

vim /etc/selinux/config
SELINUX=disabled

1.4、下载安装包

官网:https://repo.yandex.ru/clickhouse/rpm/testing/x86_64/

1、clickhouse-server:

https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-server-22.2.2.1-2.noarch.rpm

2、clickhouse-common-static:

https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-common-static-22.2.2.1-2.x86_64.rpm

3、clickhouse-client:

https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-client-22.2.2.1-2.noarch.rpm

4、clickhouse-common-static-dbg

https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/clickhouse-common-static-dbg-22.2.2.1-2.x86_64.rpm

1.5、安装

rpm -ivh *.rpm

1.6、修改配置文件(/etc/clickhouse-server/config.xml)

注释打开,这样的话才能让 ClickHouse 被除本机以外的服务器访问

ipv6:
<listen_host>::</listen_host>
ipv4:
<listen_host>0.0.0.0</listen_host>

在这个文件中,有 ClickHouse 的一些默认路径配置,比较重要的

数据文件路径:
<path>/var/lib/clickhouse/</path>
日志文件路径:
<log>/var/log/clickhouse-server/clickhouse-server.log</log>

启动

systemctl start clickhouse-server

注意:clickhouse默认以clickhouse用户启动,所有的相关文件、文件夹属主属组都需要修改成clickhouse

1.7、拓展:yum 部署,(一般不用)

yum  -y install yum-utils
rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/clickhouse.repo
yum -y  install clickhouse-server clickhouse-client

/etc/init.d/clickhouse-server start   -- 启动服务

1.8、ck目录介绍

/etc/clickhouse-server:
服务端的配置文件目录,包括全局配置config.xml 和用户配置users.xml等。

/var/lib/clickhouse:
默认的数据存储目录(通常会修改默认路径配置,将数据保存到大容量磁盘挂载的路径)。

/var/log/clickhouse-server
默认保存日志的目录(通常会修改路径配置,将日志保存到大容量磁盘挂载的路径)。

/usr/bin 默认添加进系统环境变量中
clickhouse:主程序的可执行文件。 
clickhouse-client:一个指向ClickHouse可执行文件的软链接,供客户端连接 使用。 
clickhouse-server:一个指向ClickHouse可执行文件的软链接,供服务端启动 使用。
clickhouse-compressor:内置提供的压缩工具,可用于数据的正压反解。 

ClickHouse的底层访问接口支持TCP和HTTP两种协议,其中,TCP 协议拥有更好的性能,其默认端口为9000,主要用于集群间的内部通信及CLI客户端;而HTTP协议则拥有更好的兼容性,可以通过REST服务的形式被广泛用于JAVA、Python等编程语言的客户端,其默认端口为8123。通常而言,并不建议用户直接使用底层接口访问ClickHouse,更为推荐的方式是通过CLI和JDBC这些封装接口,因为它们更加简单易用!

二、集群部署

clickhouse集群是非主从结构,各个节点是相互独立的。我们可以根据配置灵活配置集群。

clickhouse集群概念:主要用于分布式表和表的副本

clickhouse集群底层依赖于zookeeper,来实现集群副本之间的同步。

2.1、部署3台单节点clickhouse,不启动

参照上述

2.2、部署zookeeper集群

zookeeper在clickhouse中主要用在副本表数据的同步(ReplicatedMergeTree引擎)以及分布式(Distributed)的操作上。

2.2.1、安装jdk

在安装zookeeper之前要先安装jdk,因为zookeeper是需要JDK来编译的。

下载地址:
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

解压安装jdk
tar -zxvf jdk-8u11-linux-x64.tar.gz -C /usr/local/java/

修改配置文件,添加以下内容(jdk的路径)
#vi /etc/profile
 
#java
JAVA_HOME=/usr/local/java/jdk1.8.0_11
export PATH=$PATH:$JAVA_HOME/bin

#source /etc/profile

2.2.2、配置zookeeper集群

官网:

https://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz

mkdir /usr/local/zookeeper(创建zookeeper安装目录)
cd /usr/local/zookeeper
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -xvf apache-zookeeper-3.7.0-bin.tar.gz

vim /etc/profile
#zookeeper
export ZK_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZK_HOME/bin

source /etc/profile

创建配置:

cp /usr/local/zookeeper/zookeeper-3.7.0/pache-zookeeper-3.7.0-bin/conf/zoo_sample.cfg /usr/local/zookeeper/zookeeper-3.7.0/pache-zookeeper-3.7.0-bin/conf/zoo.cfg

修改配置参数(config.xml)

#vim /usr/local/zookeeper/zookeeper-3.7.0/conf/zoo.cfg
 
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
 
server.1=ip1:2888:3888
server.2=ip2:2888:3888 
server.3=ip3:2888:3888

(ip1,ip2,ip3为三台机器的ip地址,为主机之间建立互信做准备)

每台创建不一样的server id标识

vim /usr/local/zookeeper/data/myid(ip1输入1, ip2输入2, ip3输入3)

启动zk

/usr/local/zookeeper/zookeeper-3.7.0/bin/zkServer.sh start

如果启动报错 it is probably not running

	1、多检查三台虚拟机zoo.cfg配置文件是否有问题
	2、检查自己myid是否写对
	3、防火墙是否已关闭
	4、确定是否都三台虚拟机都启动了集群

2.3、配置clickhouse集群

2.3.1 配置文件:在以下两个配置文件内配置均可

/etc/clickhouse-server/config.xml
/etc/clickhouse-server/config.d/metrika.xml

2.3.2 集群配置标签:

<remote_services>

2.3.3 配置详情:

<yandex>
  <clickhouse_remote_servers> 
    <!-- 自定义集群名称 --!>
	<test_cluster1>
	  <!--定义集群的分片数量,2个shard标签说明有两个节点--!>
	  <shard>
	    <!--定义分片的副本数量,这里的副本只有一个--!>
		<weight>1</weight>
		<internal_replication>true</internal_replication>
		<replica>
		  <host>hadoop129</host>
		  <port>9000</port>
		</replica>
	  </shard>
	  <shard>
	    <weight>1</weight>
		<internal_replication>true</internal_replication>
	    <replica>
		  <host>hadoop130<host>
		  <port>9000</port>
		</replica>
	  </shard>
    </test_cluster1>	
  </clickhouse_remote_servers>
  
  <zookeeper-servers>
    <node index="1">
	  <host>hadoop129</host>
	  <port>2181</port>
	</node>
  </zookeeper-servers>
  <zookeeper-servers>
    <node index="2">
	  <host>hadoop130</host>
	  <port>2181</port>
	</node>
  </zookeeper-servers>
  <macros>
    <shard>01</shard>
	<replica>master</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>

2.3.4 配置文件 users.xml

vi /etc/clickhouse-server/users.xml
#内存限制 
<max_memory_usage>30000000000</max_memory_usage>

#增加默认用户的密码,否则clickhouse不需要密码都可登录 
<users>
    <default>
        <password>密码自定义</password>
        <access_management>1</access_management>
    </default>

2.3.4 配置文件使用详解

remote_servers:

clickhouse集群配置标签,固定写法。注意:这里与之前版本不同,之前要求必须以clickhouse开头,新版本不再需要。

test_cluster1:

配置clickhouse的集群名称,可自由定义名称,注意集群名称中不能包含点号。内部可以配置集群中有几个分片,每个分片有几个副本。
分片是指包含部分数据的服务器,要读取所有的数据,必须访问所有的分片。
副本是指存储分片备份数据的服务器,要读取所有的数据,访问任意副本上的数据即可。

shard:

分片:一个clickhouse集群可以分多个分片,每个分片可以存储数据,这里分片可以理解为clickhouse机器中的每个节点,1个分片只能对应1服务节点 。这里可以配置一个或者任意多个分片,在每个分片中可以配置一个或任意多个副本,不同分片可配置不同数量的副本。如果只是配置一个分片,这种情况下查询操作应该称为远程查询,而不是分布式查询。

replica:

每个分片的副本,默认每个分片配置了一个副本。也可以配置多个,副本的数量上限是由clickhouse节点的数量决定的。如果配置了副本,读取操作可以从每个分片里选择一个可用的副本。如果副本不可用,会依次选择下个副本进行连接。该机制利于系统的可用性。

internal_replication:

默认为false,写数据操作会将数据写入所有的副本,设置为true,写操作只会选择一个正常的副本写入数据,数据的同步在后台自动进行。

zookeeper:

配置的zookeeper集群,注意:与之前版本不同,之前版本是“zookeeper-servers”。

macros:

区分每台clickhouse节点的宏配置,macros中<shard>标签代表当前节点的分片号,<replica>标签代表当前节点的副本号,这两个名称可以随意取,后期在创建副本表时可以动态读取这两个宏变量。注意:每台clickhouse节点<shard>需要配置不同名称。

networks:

这里配置ip为“::/0”代表任意IP可以访问,包含IPv4和IPv6。
注意:允许外网访问还需配置/etc/clickhouse-server/config.xml 参照第三步骤。

clickhouse_compression:

MergeTree引擎表的数据压缩设置,min_part_size:代表数据部分最小大小。min_part_size_ratio:数据部分大小与表大小的比率。method:数据压缩格式。

三、简单操作

3.1 查询集群状态

在node1、node2、node3任意一台节点进入clickhouse客户端,查询集群配置

clickhouse-client --password 

#查询集群信息,看到分片即代表集群配置成功。
master :) select * from system.clusters;
master :) select cluster,host_name from system.clusters;

3.2 客户端命令行参数

--host,-h:

clickhouse-client  -h node1
使用-h指定ip或者host名称时,需要在/etc/clickhouse-server/config.xml配置文件中114行配置:<listen_host>::</listen_host> ,代表可以任意ip可访问。配置完成后需要重启当期clickhouse节点生效。

--query,-q

只能在非交互式查询时使用,用于指定SQL语句。
clickhouse-client -q "show databases"

--database, -d:

clickhouse-client -d "system" -q "show tables"

--multiline, -m: 交互式客户端中可以执行多行函数

clickhouse-client -m

--time, -t:

在非交互式执行时,会打印每条SQL的执行时间,
clickhouse-client -t -q "show databases"

--stacktrace:

clickhouse-client --stacktrace

--multiquery,-n

在非交互式执行时,允许一次运行多条SQL语句,多条语句之间以分号间隔。
clickhouse-client  -n -q "show databases;use default;"

--user, -u

指定登录用户

--port

指定登录端口

--password

指定登录密码

3.3 基础命令