ClickHouse 集群部署
本文说明如何使用 clickhouse_ansible 执行 ClickHouse 集群或单机模式部署。
文中命令默认基于绿色版 Ansible 已执行以下初始化:
cd /usr/local/dbbot/portable-ansible-v0.5.0-py3
bash setup_portable_ansible.sh
source ~/.bashrc
完成后可直接使用 ansible-playbook 和 ansible。
1. 适用范围
支持以下入口 Playbook:
playbooks/deploy_cluster.yml:集群部署。playbooks/deploy_single.yml:单机或实验环境快速部署。
默认文档示例使用 3 分片 2 副本,但 inventory 设计支持扩展到其他 x 分片 y 副本拓扑。
2. 前置条件
部署前建议完成以下准备:
- 在控制节点安装 dbbot,并完成绿色版 Ansible 注册。
- 规划好 ClickHouse 节点与 ZooKeeper / Keeper 节点。
- 确认目标节点网络、时区、磁盘目录和操作系统基线符合要求。
- 确认控制节点能够免交互 SSH 到目标主机。
- 准备 ClickHouse 安装包,或确认控制节点可联网下载所需包。
3. 推荐的 inventory 分工
clickhouse_ansible 默认按场景拆分 inventory:
inventory/hosts.deploy.ini:部署专用。inventory/hosts.dr_deploy.ini:容灾集群部署专用。inventory/hosts.backup.ini:备份专用。inventory/hosts.dr_backup.ini:容灾集群备份盘准备专用。inventory/hosts.restore.ini:恢复专用。inventory/hosts.nfs_server.ini:NFS 服务端专用。inventory/hosts.single.ini:单机验证专用。
部署场景下,建议在 [all:vars] 中设置:
dbbot_inventory_purpose=deploy
ansible_python_interpreter=auto_silent
ansible_user=root
ansible_ssh_pass="'<your_ssh_password>'"
4. 部署 inventory 最小示例
[clickhouse_deploy]
ck-131-1 ansible_host=192.0.2.131 shard=1 replica=1 instance_id=1 replica_name=ck-s1-r1 system_hostname=ck-node1
ck-131-2 ansible_host=192.0.2.131 shard=3 replica=2 instance_id=2 replica_name=ck-s3-r2 system_hostname=ck-node1
ck-132-1 ansible_host=192.0.2.132 shard=1 replica=2 instance_id=1 replica_name=ck-s1-r2 system_hostname=ck-node2
ck-132-2 ansible_host=192.0.2.132 shard=2 replica=1 instance_id=2 replica_name=ck-s2-r1 system_hostname=ck-node2
ck-133-1 ansible_host=192.0.2.133 shard=2 replica=2 instance_id=1 replica_name=ck-s2-r2 system_hostname=ck-node3
ck-133-2 ansible_host=192.0.2.133 shard=3 replica=1 instance_id=2 replica_name=ck-s3-r1 system_hostname=ck-node3
[clickhouse_cluster:children]
clickhouse_deploy
[zookeeper_deploy]
ck-131-1 zk_id=1
ck-132-1 zk_id=2
ck-133-1 zk_id=3
[zookeeper_cluster:children]
zookeeper_deploy
[all:vars]
dbbot_inventory_purpose=deploy
ansible_python_interpreter=auto_silent
ansible_user=root
ansible_ssh_pass="'<your_ssh_password>'"
说明:
instance_id建议显式填写,便于端口、目录和 service 名称推导。- 如果启用
fcs_set_hostname=true,可额外为主机行配置system_hostname。 - Keeper 模式下仍需确保协调节点定义完整。
5. 关键变量文件
部署前重点关注以下文件:
playbooks/vars/common_config.yml:版本、用户、目录、密码、Keeper 开关等通用参数。playbooks/vars/cluster_config.yml:集群名称、端口基线和拓扑相关参数。playbooks/vars/standalone_config.yml:单机模式行为。
常见需要确认的参数:
clickhouse_versionclickhouse_cluster_nameuse_clickhouse_keeperclickhouse_enable_sslclickhouse_install_debug_packageclickhouse_default_passwordfcs_allow_dbbot_default_passwdfcs_set_hostnamedeploy_require_manual_confirm
更完整的参数说明见:ClickHouse 变量与参数说明
密码守卫说明:
clickhouse_default_password的开源默认值是Dbbot_default@8888。- 默认
fcs_allow_dbbot_default_passwd: false,因此部署、备份、恢复相关 Playbook 会在pre_tasks阶段拦截这个公开默认密码。 - 实验环境如果想快速验证,可以显式设置
fcs_allow_dbbot_default_passwd: true;生产环境不建议这样做。
6. 准备安装包
如果关闭自动下载,需提前把安装包放入 downloads/:
cd /usr/local/dbbot/clickhouse_ansible/downloads
wget "https://packages.clickhouse.com/tgz/stable/clickhouse-common-static-23.6.1.1524-amd64.tgz"
wget "https://packages.clickhouse.com/tgz/stable/clickhouse-server-23.6.1.1524-amd64.tgz"
wget "https://packages.clickhouse.com/tgz/stable/clickhouse-client-23.6.1.1524-amd64.tgz"
wget "https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz"
说明:
clickhouse-common-static-dbg已改成可选项,只有在clickhouse_install_debug_package=true时才需要准备和安装。- 正式发版默认建议保持
clickhouse_install_debug_package=false,减少包体积和分发时间。
7. 执行部署
7.1 语法检查
cd /usr/local/dbbot/clickhouse_ansible/playbooks
ansible-playbook \
-i ../inventory/hosts.deploy.ini \
deploy_cluster.yml --syntax-check
7.2 集群部署
cd /usr/local/dbbot/clickhouse_ansible/playbooks
ansible-playbook \
-i ../inventory/hosts.deploy.ini \
deploy_cluster.yml
7.3 Keeper 模式部署
cd /usr/local/dbbot/clickhouse_ansible/playbooks
ansible-playbook \
-i ../inventory/hosts.deploy.ini \
deploy_cluster.yml \
-e "use_clickhouse_keeper=true"
7.4 单机模式部署
cd /usr/local/dbbot/clickhouse_ansible/playbooks
ansible-playbook \
-i ../inventory/hosts.single.ini \
deploy_single.yml
8. 系统变更项
部署 playbook 不只是安装 ClickHouse,还会对目标主机做系统侧初始化。默认可能涉及:
- 设置时区为
Asia/Shanghai - 修改 hostname 与
/etc/hosts映射 - 禁用 swap,并注释
/etc/fstab中的 swap 条目 - 调整
limits.conf/limits.d - 调整
sysctl.d下的 ClickHouse 专用参数 - 调整 THP、SELinux 和防火墙
如果你不希望某些行为生效,至少应提前评估:
fcs_set_hostnameclickhouse_uid/clickhouse_gidfcs_auto_download_packagesclickhouse_install_debug_package
9. 部署后验证
8.1 端口监听
ansible \
all -i ../inventory/hosts.deploy.ini -m shell \
-a "ss -lntp | egrep ':8123 |:8124 |:8443 |:8444 |:9000 |:9001 |:9440 |:9441 '"
8.2 集群拓扑
SELECT cluster, shard_num, replica_num, host_name, port
FROM system.clusters
WHERE cluster = 'example_3shards_2replicas'
ORDER BY shard_num, replica_num;
8.3 副本状态
SELECT table, is_readonly, queue_size, absolute_delay
FROM system.replicas
ORDER BY table;
10. 常见注意事项
- 部署默认要求
dbbot_inventory_purpose=deploy,避免误用备份或恢复 inventory。 ansible_ssh_pass建议保持"'密码'"这种写法,避免 Ansible inventory 解析异常。- 默认启用手工确认门禁,不建议在生产长期关闭。
- 若不希望修改系统 hostname,可将
fcs_set_hostname设为false。 - 若目标机已有同 UID/GID 账号,需要先调整
clickhouse_uid/clickhouse_gid。 - 如果后续要做备份或恢复,请继续阅读 ClickHouse 备份 和 ClickHouse 恢复,先完成 NFS 和备份盘准备。