安装 clickhouse
首先,访问官网 https://clickhouse.com/#quick-start 根据你主机的类型,下载clickhouse
我这里是centos8,因此采用如下方式
sudo yum install yum-utils -y
sudo rpm --import https://repo.clickhouse.com/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.com/rpm/clickhouse.repo
sudo yum install clickhouse-server clickhouse-client
sudo /etc/init.d/clickhouse-server start -y
clickhouse-client
修改数据存储目录
查看 clickhouse-server 的配置文件,默认的数据存储目录为 /var/lib/clickhouse
。可以修改为你自己的目录,但是必须保证目录的磁盘空间足够大
查看运行状态
有两种方式可以查看运行状态,一种是clickhouse自带的方法,还有一种是systemctl工具
/etc/init.d/clickhouse-server status
clickhouse 自带了查看启动状态的命令。对于其它命令,可以使用help
参数进行查看。如果正在运行,会打印 running 和 pid
systemctl status clickhouse-server
使用系统服务命令,可以查看 clickhouse-server 服务是否正在运行。正在运行的话,状态为 active(running);如果处于停止状态,则是 inactive(dead)。此外还会打印主进程PID,占用内存,启动参数等信息
单机模式
- 启动
/etc/init.d/clickhouse-server start
- 停止
/etc/init.d/clickhouse-server stop
- 重启
/etc/init.d/clickhouse-server restart
- client 连接 server
/usr/bin/clickhouse-client --host localhost --port 9000
集群模式
搭建zookeeper
由于服务器资源有限,zookeeper只需要部署一台机即可,并不需要做集群
下载并解压 zookeeper(https://downloads.apache.org/zookeeper/current/),然后进入bin目录,执行如下命令
# 启动zookeeper
sh zkServer.sh start ../conf/zoo_sample.cfg
# 查看zookeeper的运行状态
./zkServer.sh status ../conf/zoo_sample.cfg
# 查看zookeeper线程
jps
可以看到,启动的模式为 standalone,即单例模式
搭建clickhouse
网上搜到常见的做法是新建/etc/metrika.xml
文件,添加如下内容(所有的IP改为你集群中的IP)。除了macros节点需要为每台主机分别进行配置外,其它都是一样的。Zookeeper 可以单独部署,也可以与 clickhouse 部在同一台服务器上
所需机器个数 shard * (replica + 1)
即 分片个数 * (副本个数 + 1)
- 1zookeeper-3shard-0replica(需要3台机)
/etc/clickhouse-server/metrika/metrika_1z3s0r.xml
<yandex>
<!-- 集群配置 -->
<clickhouse_remote_servers>
<!-- 集群名称 -->
<ch_3s_0r>
<!-- 数据分片1 -->
<shard>
<!-- 数据分片的数据权重 -->
<weight>1</weight>
<!-- 是否启用内部复制。true 代表写入数据时选择第一个健康的副本进行写入,其余副本以该表本身进行复制,保证复制表的一致性。false(默认) 代表将数据直接写入所有副本,因为没有检查复制表的一致性,随着时间的推移,它们将包含略微不同的数据。 -->
<internal_replication>true</internal_replication>
<replica>
<!-- 数据分片远程服务地址(支持IPv6)或域名 -->
<host>192.168.100.101</host>
<port>9000</port>
<user>default</user>
<password></password>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.100.102</host>
<port>9000</port>
<user>default</user>
<password></password>
</replica>
</shard>
<!-- 数据分片3 -->
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.100.103</host>
<port>9000</port>
<user>default</user>
<password></password>
</replica>
</shard>
</ch_3s_0r>
</clickhouse_remote_servers>
<!-- 本节点副本名称 (这里只配置单副本)-->
<macros>
<!-- 集群名称 -->
<layer>ch_layer</layer>
<!-- 分片的编号 -->
<shard>01</shard>
<!-- 副本的名称,通常与主机名相同 -->
<replica>192.168.100.101</replica>
</macros>
<!-- 监听网络 -->
<networks>
<!-- ::/0代表监听所有ip -->
<ip>::/0</ip>
</networks>
<!-- zoookeeper的配置(单机或集群均可)-->
<zookeeper-servers>
<node index="1">
<host>192.168.100.101</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>
- 1zookeepers-1shards-1replicas(需要2台机)
/etc/clickhouse-server/metrika/metrika_1z1s1r.xml
<yandex>
<!-- 集群配置 -->
<clickhouse_remote_servers>
<!-- 集群名称 -->
<ch_1s_1r>
<!-- 数据分片1 -->
<shard>
<!-- 数据分片的数据权重 -->
<weight>1</weight>
<!-- 是否启用内部复制。true 代表写入数据时选择第一个健康的副本进行写入,其余副本以该表本身进行复制,保证复制表的一致性。false(默认) 代表将数据直接写入所有副本,因为没有检查复制表的一致性,随着时间的推移,它们将包含略微不同的数据。 -->
<internal_replication>true</internal_replication>
<replica>
<!-- 数据分片远程服务地址(支持IPv6)或域名 -->
<host>192.168.100.101</host>
<port>9000</port>
<user>default</user>
<password></password>
</replica>
<replica>
<host>192.168.100.102</host>
<port>9000</port>
<user>default</user>
<password></password>
</replica>
</shard>
</ch_1s_1r>
</clickhouse_remote_servers>
<!-- 本节点副本名称 (这里只配置单副本)-->
<macros>
<!-- 集群名称 -->
<layer>ch_layer</layer>
<!-- 分片的编号 -->
<shard>01</shard>
<!-- 副本的名称,通常与主机名相同 -->
<replica>192.168.100.101</replica>
</macros>
<!-- 监听网络 -->
<networks>
<!-- ::/0代表监听所有ip -->
<ip>::/0</ip>
</networks>
<!-- zoookeeper的配置(单机或集群均可)-->
<zookeeper-servers>
<node index="1">
<host>192.168.100.101</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>
如果zookeeper用的是集群,则需要将 zookeeper-servers节点改为
<zookeeper-servers>
<node index="1">
<host>192.168.100.101</host>
<port>2181</port>
</node>
<node index="2">
<host>192.168.100.101</host>
<port>2181</port>
</node>
<node index="3">
<host>192.168.100.101</host>
<port>2181</port>
</node>
</zookeeper-servers>
然而,仅创建 /etc/metrika.xml
文件并不能使集群生效,我们查看 /etc/clickhouse-server/config.xml
- include_from 配置文件的默认位置在
/etc/metrika.xml
,可以设置此参数来改变它的位置 - remote_servers 配置分片及副本
- zookeeper 配置zookeeper的IP和端口
- macros 指定当前主机
- compression 配置压缩块的大小及压缩算法
在如图(左上角)位置加上下面这段(另外,必须删除 /etc/clickhouse-server/config.xml
中的 remote_servers 节点,不然若是在前面配的,会被覆盖掉,导致集群无效)
<include_from>/etc/metrika_1z3s1r.xml</include_from>
<remote_servers incl="clickhouse_remote_servers"/>
<zookeeper incl="zookeeper-servers" optional="true" />
<macros incl="macros" optional="true" />
<compression incl="clickhouse_compression" optional="true" />
启动 clickhouse-server,然后用 clickhouse-clicent 连上去
#启动server
/etc/init.d/clickhouse-server start
#或者
systemctl start clickhouse-server.service
#查看server状态
/etc/init.d/clickhouse-server status
#使用client连接server
/usr/bin/clickhouse-client --host localhost --port 9000
查询集群信息 select * from system.clusters
(若仅有 test 打头的字段,表示集群搭建失败)
- 1zookeepers-3shards-0replicas
- 1zookeepers-1shards-1replicas