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