ClickHouse集群搭建踩坑实录:Ubuntu/CentOS双系统配置与密码安全那些事儿

张开发
2026/4/3 20:25:10 15 分钟阅读
ClickHouse集群搭建踩坑实录:Ubuntu/CentOS双系统配置与密码安全那些事儿
ClickHouse集群搭建实战Ubuntu与CentOS混合环境下的避坑指南第一次在混合Linux环境中部署ClickHouse集群时我踩过的坑可能比成功执行的命令还多。Ubuntu和CentOS这对欢喜冤家在文件路径、依赖管理和服务配置上的差异让集群搭建过程变成了一场持续48小时的调试马拉松。本文将分享从零开始构建生产级ClickHouse集群的关键步骤特别针对双系统环境中的典型陷阱提供解决方案。1. 环境准备跨越系统差异的鸿沟在混合操作系统环境中第一个拦路虎往往是基础依赖的差异。Ubuntu 22.04默认使用apt管理软件包而CentOS 7则坚守yum的阵地。这种差异会导致安装脚本无法通用需要为每个系统准备独立的安装流程。关键差异对比表组件Ubuntu 22.04位置CentOS 7位置配置文件目录/etc/clickhouse-server//etc/clickhouse-server/数据存储目录/var/lib/clickhouse//var/lib/clickhouse/服务管理命令systemctlsystemctl默认时区设置需手动配置需手动配置安装过程中最易忽略的是时区配置。ClickHouse默认使用UTC时间这会导致查询结果与本地时间不符。解决方法是在custom.xml中统一配置clickhouse timezoneAsia/Shanghai/timezone /clickhouse提示所有节点必须保持时区一致否则分布式查询会出现时间维度数据混乱2. 密码安全从明文到SHA256的进化之路安装过程中最危险的时刻莫过于密码设置。很多教程会直接让你在配置文件中写入明文密码这相当于给黑客发了张VIP通行证。更安全的做法是使用SHA256加密存储密码。生成加密密码的正确姿势# 生成随机密码并加密 PASSWORD$(head -c16 /dev/urandom | base64 | head -c16) echo 明文密码: $PASSWORD echo 加密密码: $(echo -n $PASSWORD | sha256sum | awk {print $1})将加密后的密码填入users.xml时务必注意XML格式users default password_sha256_hex加密密码字符串/password_sha256_hex networks ip::/0/ip /networks /default /users我曾在三个节点上使用了不同的密码策略结果集群死活无法通信。血泪教训所有节点的default用户密码必须相同否则内部通信会立即失败。3. 网络配置防火墙背后的暗礁当所有服务都启动却无法组成集群时问题通常出在网络层。混合环境下的防火墙管理尤其棘手因为Ubuntu使用ufw而CentOS默认使用firewalld。必须开放的端口清单TCP 9000客户端通信端口TCP 9009跨服务器数据复制TCP 8123HTTP接口TCP 9181ClickHouse Keeper端口CentOS下开放端口的正确命令sudo firewall-cmd --permanent --add-port9000/tcp sudo firewall-cmd --permanent --add-port9009/tcp sudo firewall-cmd --reloadUbuntu则需要sudo ufw allow 9000/tcp sudo ufw allow 9009/tcp sudo ufw enable注意不要依赖ping测试网络连通性ClickHouse集群通信需要特定端口。建议使用telnet或nc工具验证端口开放情况4. 集群配置告别ZooKeeper的新时代ClickHouse 24.x的重大改进是内置了ClickHouse Keeper完全兼容ZooKeeper协议但性能更优。这意味着我们不再需要额外维护ZooKeeper集群降低了运维复杂度。keeper.xml配置的核心要点keeper_server server_id1/server_id !-- 每个节点必须唯一 -- tcp_port9181/tcp_port raft_configuration server id1/id hostnamenode1.cluster/hostname port9444/port /server !-- 其他节点配置 -- /raft_configuration /keeper_server常见陷阱server_id重复会导致选主失败未配置raft_configuration会使Keeper无法形成集群防火墙未开放9444端口会导致RAFT协议通信中断验证Keeper集群状态的命令echo stat | nc localhost 91815. 性能调优从能用走向好用默认配置下的ClickHouse可能连一半硬件性能都发挥不出来。经过多次压力测试我总结出这些关键参数调整config.d/performance.xml:clickhouse max_connections4096/max_connections max_concurrent_queries200/max_concurrent_queries background_pool_size16/background_pool_size max_memory_usage12884901888/max_memory_usage !-- 12GB -- /clickhouseusers.d/limits.xml:clickhouse profiles default max_memory_usage_for_all_queries10737418240/max_memory_usage_for_all_queries max_threads16/max_threads /default /profiles /clickhouse这些配置需要根据实际硬件调整每核CPU对应1-2个background_pool_sizemax_memory_usage建议设为物理内存的80%分布式查询需要更多max_threads6. 监控看板集群健康的晴雨表没有监控的集群就像没有仪表的飞机。GrafanaClickHouse的组合可以提供完美的可视化监控方案。关键监控指标查询性能QPS、查询延迟、慢查询资源使用CPU、内存、磁盘IO复制状态落后副本数、队列长度合并操作正在进行的merge数量导入官方Dashboard的SQLCREATE DATABASE grafana ON CLUSTER {cluster}; CREATE TABLE grafana.metrics ON CLUSTER {cluster} ( time DateTime, metric String, value Float64 ) ENGINE Distributed({cluster}, grafana, metrics_local, rand());配置Prometheus采集的scrape_configs:scrape_configs: - job_name: clickhouse static_configs: - targets: [node1:9363, node2:9363]在Grafana中导入ID号「882」的官方看板就能获得完整的集群监控视图。

更多文章