Clickhouse笔记(二) 集群搭建
0.集群规划
操作系统使用ubuntu2204server,8C8G100G。
节点 | 分片 | 部署 |
---|---|---|
192.168.50.5 | 分片1副本1 | clickhouse-server/clickhouse-client/keeper |
192.168.50.6 | 分片1副本2 | clickhouse-server/clickhouse-client/keeper |
192.168.60.7 | 分片2副本1 | clickhouse-server/clickhouse-client/keeper |
192.168.50.25 | 分片2副本2 | clickhouse-server/clickhouse-client |
四台主机都作为数据分片,每个数据分片有两个副本。keeper 部署到三个节点上,奇数节点用于实现 ClickHouse Keeper 中要求的票选数。
1.准备节点
- 准备操作系统 ubuntu 或centos,尽量和你生产环境的操作系统版本一致
- 统一时区,配置NTP(测试环境可以简略,只要节点的时区统一即可)
- 配置ssh免密登录(可选)
1.1 使用指定的版本
根据实际情况安装指定版本的clickhouse.使用命令curl https://clickhouse.com/ | sh
安装的clickhouse默认是最新版本的,但是有时我们需要安装指定的稳定版本,登录 https://packages.clickhouse.com/ 可以找到clickhouse为不同linux发行版本准备的各个版本的.
1.2 使用第三方版本
也可以使用Altinity的稳定版本 https://builds.altinity.cloud/
sudo apt update
sudo apt install -y curl gnupg2 apt-transport-https ca-certificates dialog
sudo sh -c 'mkdir -p /usr/share/keyrings && curl -s https://builds.altinity.cloud/apt-repo/pubkey.gpg | gpg --dearmor > /usr/share/keyrings/altinity-archive-keyring.gpg'
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/altinity-archive-keyring.gpg] https://builds.altinity.cloud/apt-repo stable main" > /etc/apt/sources.list.d/altinity.list'
sudo apt update
sudo apt install -y clickhouse-server clickhouse-client
v24.4.1.2088-stable
🖊 上面两种安装方式任选一种,在每台服务器上安装clickhouse。
安装完成后使用下面的命令启动clickhouse.
sudo -u alfiy clickhouse server
也可以以服务的方式启动
sudo service clickhouse-server start
2.配置集群
注意,ClickHouse 要求每个分片的每个副本必须配置在单独的实例上,也就是说在整个集群范围内,一共有多少个副本,就需要创建多少个 ClickHouse 实例。最佳实践是3分片2副本6实例。
2.0 修改hosts
如果在clickhouse的配置中,使用了域名配置而不是IP地址,除非你的域名真实存在,否则需要修改本机的hosts文件。由于我同时测试了使用域名和IP两种配置方式,所以在本例中需要同时修改四个节点的hosts文件。
打开/etc/hosts
文件,添加以下内容。
192.168.50.5 node1
192.168.50.6 node2
192.168.50.7 node3
192.168.50.25 node4
修改完成后,可以使用ping node1
命令查看hosts是否生效,如果生效就能够ping的通。
2.1修改node1的配置
在node2的/etc/clickhouse-server/config.xml
文件的标签中添加以下内容。
<!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
<listen_host>0.0.0.0</listen_host>
<!-- 指定实例启用 ClickHouse Keeper。更新每台服务器的<server_id>设置,node1为1、node2为2、node3为3。-->
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>warning</raft_logs_level>
</coordination_settings>
<raft_configuration>
<server>
<id>1</id>
<hostname>192.168.50.5</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>192.168.50.6</hostname>
<port>9234</port>
</server>
<server>
<id>3</id>
<hostname>192.168.50.7</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
<!-- 指定实例所使用的 ClickHouse Keeper,可以使用域名也可以使用IP地址 -->
<zookeeper>
<node>
<host>192.168.50.5</host>
<port>9181</port>
</node>
<node>
<host>192.168.50.6</host>
<port>9181</port>
</node>
<node>
<host>192.168.60.7</host>
<port>9181</port>
</node>
</zookeeper>
<remote_servers>
<!-- cluster_2S_2R 标签为集群名称,可以自定义但集群中的节点保持一致 -->
<cluster_2S_2R>
<shard>
<replica>
<host>192.168.50.5</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>192.168.50.6</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
<shard>
<replica>
<host>192.168.50.7</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>192.168.50.25</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
</cluster_2S_2R>
</remote_servers>
<macros>
<!-- shard标签为分片数,replica为副本数 -->
<shard>01</shard>
<replica>01</replica>
</macros>
🖊 <server_id>1</server_id> 对应node1 <server_id>2</server_id>对应node2<server_id>3</server_id>对应node3
2.2 修改node2的配置
在node2的/etc/clickhouse-server/config.xml
文件的标签中添加以下内容。
<!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
<listen_host>0.0.0.0</listen_host>
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>2</server_id>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>warning</raft_logs_level>
</coordination_settings>
<!-- 指定实例启用 ClickHouse Keeper。更新每台服务器的<server_id>设置,node1为1、node2为2、node3为3。-->
<raft_configuration>
<server>
<id>1</id>
<hostname>node1</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>node2</hostname>
<port>9234</port>
</server>
<server>
<id>3</id>
<hostname>node3</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
<!-- 指定实例所使用的 ClickHouse Keeper 可以使用IP也可以使用域名,或者在hosts文件中配置域名 -->
<zookeeper>
<node>
<host>node1</host>
<port>9181</port>
</node>
<node>
<host>node2</host>
<port>9181</port>
</node>
<node>
<host>node3</host>
<port>9181</port>
</node>
</zookeeper>
<remote_servers>
<cluster_2S_2R>
<shard>
<replica>
<host>node1</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>node2</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
<shard>
<replica>
<host>node3</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>node4</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
</cluster_2S_2R>
</remote_servers>
<macros>
<shard>01</shard>
<replica>02</replica>
</macros>
2.3 修改node3的配置
在node3的/etc/clickhouse-server/config.xml
文件的标签中添加以下内容。
<!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
<listen_host>0.0.0.0</listen_host>
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>2</server_id>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>warning</raft_logs_level>
</coordination_settings>
<!-- 指定实例启用 ClickHouse Keeper。更新每台服务器的<server_id>设置,node1为1、node2为2、node3为3。-->
<raft_configuration>
<server>
<id>1</id>
<hostname>node1</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>node2</hostname>
<port>9234</port>
</server>
<server>
<id>3</id>
<hostname>node3</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
<!-- 指定实例所使用的 ClickHouse Keeper 可以使用IP也可以使用域名,或者在hosts文件中配置域名 -->
<zookeeper>
<node>
<host>node1</host>
<port>9181</port>
</node>
<node>
<host>node2</host>
<port>9181</port>
</node>
<node>
<host>node3</host>
<port>9181</port>
</node>
</zookeeper>
<remote_servers>
<cluster_2S_2R>
<shard>
<replica>
<host>node1</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>node2</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
<shard>
<replica>
<host>node3</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>node4</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
</cluster_2S_2R>
</remote_servers>
<macros>
<shard>02</shard>
<replica>01</replica>
</macros>
从以上配置文件中可以看出,node1,node2,node3的区别只是<macros></macros>
标签中的区别。
2.4 修改node4的配置
在node4的/etc/clickhouse-server/config.xml
文件的标签中添加以下内容。
<!-- 添加以下条目以允许通过网络接口进行外部通信。 -->
<listen_host>0.0.0.0</listen_host>
<!-- 指定实例所使用的 ClickHouse Keeper -->
<zookeeper>
<node>
<host>node1</host>
<port>9181</port>
</node>
<node>
<host>node2</host>
<port>9181</port>
</node>
<node>
<host>node3</host>
<port>9181</port>
</node>
</zookeeper>
<remote_servers>
<cluster_2S_2R>
<shard>
<replica>
<host>node1</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>node2</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
<shard>
<replica>
<host>node3</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
<replica>
<host>node4</host>
<port>9000</port>
<user>default</user>
<password>your_password</password>
</replica>
</shard>
</cluster_2S_2R>
</remote_servers>
<macros>
<shard>02</shard>
<replica>02</replica>
</macros>
3.查看集群
集群启动后,可以使用clickhouse client登录客户端,使用以下命令查看集群的相关信息。
SHOW CLUSTERS;
SELECT *
FROM system.zookeeper
WHERE path IN ('/', '/clickhouse');
这个查询时间有点长
SELECT
cluster,
shard_num,
replica_num,
host_name,
is_local,
user,
database_shard_name,
database_replica_name
FROM system.clusters;