一、单节点部署
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
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
指定登录密码