首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
鲲鹏+麒麟V10编译ClickHouse 21.8.14:依赖检查、部署与避坑指南
📅 2026/10/16 6:45:25
✍️ 爱科研究院
👁 阅读 3,247
简介本资源为在华为鲲鹏920处理器与麒麟V10操作系统上编译完成的ClickHouse 21.8.14安装包面向需要在国产化信创环境中搭建OLAP分析平台的运维与开发人员。包内共20个文件以可执行二进制程序为主涵盖clickhouse-server、clickhouse-client、clickhouse-keeper、clickhouse-copier、clickhouse-benchmark等核心组件另含config.xml、users.xml配置文件及install.sh、uninstall.sh一键安装脚本压缩包约115.69MB。已有2147人学习下载。借助安装脚本用户可自动完成环境检查、依赖库安装、系统用户创建、服务配置与开机自启等流程快速在麒麟V10上部署可用的ClickHouse服务省去跨架构编译与依赖适配的繁琐工作适合用于大数据分析、日志检索等自主可控场景的快速验证与落地。1. 鲲鹏麒麟V10上跑ClickHouse为什么现成rpm包大概率装不上如果你手头有一台鲲鹏服务器系统是麒麟V10想直接拿ClickHouse官方或者社区编译好的aarch64 rpm包往上装大概率会在依赖检查或者启动阶段翻车。原因不复杂麒麟V10虽然基于较新的内核但它的glibc版本、OpenSSL库路径、systemd单元文件命名习惯跟主流CentOS/openEuler的aarch64发行版有细微差别。ClickHouse官方预编译包通常针对特定glibc版本和CPU指令集优化而鲲鹏920的ARMv8.2指令集支持情况又跟飞腾、Ampere这些ARM服务器不完全一样。所以这份“鲲鹏服务器麒麟V10操作系统编译”的ClickHouse 21.8.14安装包本质上解决的是二进制兼容性问题——它是在目标环境里从源码编译出来的链接的是麒麟V10自带的运行时库CPU指令集也按鲲鹏的微架构做了适配。适合谁用就是那些在信创环境里做数据平台、日志分析、实时数仓的团队手头只有鲲鹏机器系统锁死麒麟V10又不想花两天时间从零编译ClickHouse的人。21.8.14这个版本属于LTS分支社区维护周期长生产环境求稳的话比追新版本更靠谱。2. 拆开安装包看结构文件布局与依赖关系拿到一个编译好的ClickHouse安装包别急着rpm -ivh或者tar zxvf。先看清楚里面装了什么依赖哪些系统库后面排错才有方向。这份安装包通常以tar.gz或者rpm集合的形式提供具体格式取决于打包者的习惯。我一般会先解压到临时目录用file和ldd把关键二进制过一遍。2.1 安装包内部文件清单与用途假设你拿到的是tar.gz包解压后典型目录结构如下tar -tzf clickhouse-21.8.14-kunpeng-kylin-v10.tar.gz | head -30输出大概会包含这些路径路径用途./usr/bin/clickhouse主二进制单文件包含server、client、local等子命令./usr/bin/clickhouse-server软链接或包装脚本指向clickhouse server./usr/bin/clickhouse-client软链接或包装脚本指向clickhouse client./etc/clickhouse-server/config.xml主配置文件定义监听端口、数据目录、日志路径./etc/clickhouse-server/users.xml用户与权限配置./etc/clickhouse-server/config.d/配置片段目录方便覆盖默认值./etc/clickhouse-server/users.d/用户配置片段目录./usr/lib/systemd/system/clickhouse-server.servicesystemd单元文件麒麟V10兼容版本./var/lib/clickhouse/默认数据目录安装后为空./var/log/clickhouse-server/默认日志目录如果拿到的是rpm包用rpm -qlp看文件列表逻辑一样。重点确认三件事二进制是否动态链接了麒麟V10自带的libssl、libcrypto、libzsystemd单元文件里的ExecStart路径是否跟实际安装路径一致config.xml里listen_host默认是不是::或者0.0.0.0麒麟V10的防火墙策略可能跟CentOS不同。2.2 用ldd验证动态库依赖是否闭环这一步是判断安装包能不能在你机器上跑起来的关键。把主二进制拿出来跑一遍ldd# 解压后进入目录 cd clickhouse-21.8.14-kunpeng-kylin-v10 # 对主二进制做动态库依赖检查 ldd ./usr/bin/clickhouse | grep -E not found|正常输出里不应该出现not found。如果看到libssl.so.1.1 not found或者libcrypto.so.1.1 not found说明打包时链接的OpenSSL版本跟你系统里的不一致。麒麟V10通常自带OpenSSL 1.1.1系列但有些最小化安装的镜像可能只带了1.0.2或者干脆没装openssl-devel。解决办法是yum install openssl或者apt install libssl1.1取决于麒麟V10用的是yum还是apt源。另一个容易翻车的是libicuClickHouse对ICU库版本敏感如果系统里的ICU版本低于编译时用的版本启动会直接报undefined symbol。提示ldd输出里如果某个库指向了/usr/local/lib或者/opt/xxx/lib这种非系统路径说明打包环境里装了第三方库目标机器上不一定有。这种情况要么把库一起打包要么在目标机器上补装。2.3 检查CPU指令集是否匹配鲲鹏920ClickHouse编译时如果开了-marchnative或者针对ARMv8.2的CRC、AES指令做了优化换到不支持这些指令的ARM CPU上会直接Illegal instruction。鲲鹏920支持ARMv8.2包括CRC32和AES但早期鲲鹏916只到ARMv8.0。确认方法# 查看CPU支持的指令集特性 cat /proc/cpuinfo | grep -m1 Features输出里应该有crc32、aes、sha1、sha2这些。如果没有crc32而ClickHouse二进制又用了CRC指令做校验和计算启动就会崩。这份安装包既然是针对鲲鹏编译的理论上已经处理了这个问题但如果你把它挪到别的ARM机器上就得重新确认。3. 部署实操从解压到systemd托管的完整步骤确认依赖没问题之后就可以正式部署了。我一般不走rpm -ivh自动安装而是手动解压到目标路径再配systemd这样出问题好回滚也不会把系统包管理器搞乱。3.1 手动解压与目录归位假设安装包是tar.gz格式目标安装路径按FHS标准来# 创建临时解压目录 mkdir -p /tmp/ch-install tar -xzf clickhouse-21.8.14-kunpeng-kylin-v10.tar.gz -C /tmp/ch-install # 把二进制复制到/usr/bin sudo cp /tmp/ch-install/usr/bin/clickhouse /usr/bin/ sudo chmod x /usr/bin/clickhouse # 创建配置目录和数据目录 sudo mkdir -p /etc/clickhouse-server/config.d /etc/clickhouse-server/users.d sudo mkdir -p /var/lib/clickhouse /var/log/clickhouse-server # 复制配置文件 sudo cp /tmp/ch-install/etc/clickhouse-server/config.xml /etc/clickhouse-server/ sudo cp /tmp/ch-install/etc/clickhouse-server/users.xml /etc/clickhouse-server/ # 设置目录权限ClickHouse默认以clickhouse用户运行 sudo useradd -r -s /sbin/nologin clickhouse 2/dev/null || true sudo chown -R clickhouse:clickhouse /var/lib/clickhouse /var/log/clickhouse-server这里的关键参数是/var/lib/clickhouse和/var/log/clickhouse-server的属主。如果权限不对ClickHouse启动时会报Cannot create directory或者Permission denied。另外config.xml里默认的path是/var/lib/clickhouse/tmp_path是/var/lib/clickhouse/tmp/这两个目录都要确保clickhouse用户可写。3.2 调整config.xml适配麒麟V10麒麟V10的默认文件描述符限制、内存映射策略跟CentOS略有不同直接拿默认配置跑可能在高并发写入时遇到Too many open files。我一般会在config.d/下加一个覆盖片段!-- /etc/clickhouse-server/config.d/kylin-override.xml -- yandex !-- 监听所有地址麒麟V10默认防火墙可能只放行特定端口 -- listen_host0.0.0.0/listen_host !-- 日志级别调到information排错时够用生产环境可改warning -- logger levelinformation/level log/var/log/clickhouse-server/clickhouse-server.log/log errorlog/var/log/clickhouse-server/clickhouse-server.err.log/errorlog size500M/size count5/count /logger !-- 最大打开文件数按需调整 -- max_open_files262144/max_open_files !-- 后台合并线程池鲲鹏核心多的话可以适当调大 -- background_pool_size16/background_pool_size /yandexmax_open_files这个值要跟系统ulimit -n配合。麒麟V10默认可能是1024或者65535如果config里设了262144但系统限制没放开ClickHouse启动时会警告并回退到系统值。改系统限制# 查看当前限制 ulimit -n # 临时生效 ulimit -n 262144 # 永久生效编辑/etc/security/limits.conf echo clickhouse soft nofile 262144 | sudo tee -a /etc/security/limits.conf echo clickhouse hard nofile 262144 | sudo tee -a /etc/security/limits.conf3.3 systemd单元文件与启动验证麒麟V10用的是systemd但单元文件路径和依赖关系跟标准systemd发行版基本一致。安装包里如果自带了clickhouse-server.service直接复制到/usr/lib/systemd/system/sudo cp /tmp/ch-install/usr/lib/systemd/system/clickhouse-server.service /usr/lib/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable clickhouse-server sudo systemctl start clickhouse-server启动后别急着连先看状态和日志# 查看服务状态 sudo systemctl status clickhouse-server # 查看最近50行日志 sudo tail -50 /var/log/clickhouse-server/clickhouse-server.log如果状态是active (running)日志里出现Application: Ready for connections说明服务起来了。如果状态是failed日志里通常会给出具体原因比如Address already in use端口被占、Cannot allocate memory内存不足、Config parsing error配置文件语法错。注意麒麟V10可能默认开了SELinux或者类似的强制访问控制如果ClickHouse进程被拦截日志里会出现Permission denied但文件权限看起来没问题。临时排查可以setenforce 0生产环境建议加策略而不是直接关。3.4 客户端连接与基础查询验证服务起来之后用clickhouse-client连上去跑几条命令确认功能正常# 本地连接默认用户default无密码 clickhouse-client --host 127.0.0.1 --port 9000 # 在client里执行 SELECT version(); SELECT * FROM system.build_options WHERE name LIKE %ARCH%;version()应该返回21.8.14.xsystem.build_options里能看到编译时的架构信息。如果连不上先检查config.xml里tcp_port9000/tcp_port有没有被改再看防火墙# 麒麟V10查看防火墙状态 sudo firewall-cmd --state 2/dev/null || sudo iptables -L -n | head -20 # 放行9000和8123端口 sudo firewall-cmd --add-port9000/tcp --permanent sudo firewall-cmd --add-port8123/tcp --permanent sudo firewall-cmd --reload4. 避坑排查鲲鹏麒麟V10组合下的五个血泪教训这一章记录的是我在类似环境里实际踩过的坑每个都按“现象→原因→解决”写清楚。你如果遇到一模一样的问题直接抄解决方案就行。4.1 启动报错“Illegal instruction”现象systemctl start clickhouse-server之后服务立刻failed日志里只有一行Illegal instruction (core dumped)没有更多信息。原因二进制编译时用了鲲鹏920支持但当前CPU不支持的指令。常见的是CRC32指令如果编译时开了-marcharmv8.2-acrc但实际运行的CPU是ARMv8.0就会触发这个错误。另一个可能是AES指令ClickHouse用它做加密哈希。解决确认当前CPU的/proc/cpuinfo里有没有crc32和aes。如果没有要么换一台支持这些指令的鲲鹏机器要么找编译时没开这些优化的安装包。临时验证可以用qemu-aarch64模拟但生产环境不建议。4.2 日志报“Cannot allocate memory”但free显示内存充足现象ClickHouse启动到一半卡住日志里写Cannot allocate memory但free -h看还有几十G可用。原因麒麟V10默认的vm.overcommit_memory策略可能是2不允许超额分配而ClickHouse启动时会预留一大块虚拟内存用于mmap。另外vm.max_map_count如果太小也会导致mmap失败。解决# 查看当前值 sysctl vm.overcommit_memory vm.max_map_count # 临时调整 sudo sysctl -w vm.overcommit_memory1 sudo sysctl -w vm.max_map_count262144 # 永久生效 echo vm.overcommit_memory1 | sudo tee -a /etc/sysctl.conf echo vm.max_map_count262144 | sudo tee -a /etc/sysctl.conf sudo sysctl -p4.3 客户端连接被拒“Connection refused”现象clickhouse-client连本地9000端口报Connection refused但systemctl status显示服务running。原因config.xml里listen_host默认可能是::1或者127.0.0.1但麒麟V10的IPv6栈可能没开或者客户端走的是IPv4而服务只监听了IPv6。另一个可能是tcp_port被改成了别的值。解决在config.d/下加覆盖片段强制监听0.0.0.0yandex listen_host0.0.0.0/listen_host /yandex然后systemctl restart clickhouse-server。如果还不行用ss -tlnp | grep clickhouse看实际监听的地址和端口。4.4 数据目录权限正确但写入失败现象/var/lib/clickhouse属主是clickhouse权限755但插入数据时报Cannot write to data directory。原因麒麟V10可能启用了文件系统级别的强制访问控制比如fapolicyd或者自定义的SELinux策略拦截了clickhouse用户对数据目录的写入。另外如果数据目录挂载在NFS或者某些分布式文件系统上O_DIRECT标志可能不被支持。解决先看dmesg | tail有没有AVC拒绝记录。如果有用audit2allow生成策略模块。如果是NFS在config.xml里把storage_configuration里的use_direct_io设为false或者把数据目录换到本地ext4/xfs分区。4.5 版本升级后旧数据打不开现象从更早的ClickHouse版本升级到21.8.14之后启动时报Unknown data format或者Cannot read metadata。原因ClickHouse的元数据格式在版本间有变化21.8.14可能不兼容太老的版本比如20.x早期生成的数据目录。另外如果之前用的是别的架构编译的版本数据文件的字节序或者对齐方式可能不同。解决跨大版本升级前用clickhouse-client把数据导出成CSV或者Native格式升级完再导入。如果数据量太大至少备份/var/lib/clickhouse/metadata/目录出问题可以回滚。同架构同版本重新编译的安装包数据目录通常可以直接复用但保险起见还是先备份。5. 进阶技巧用systemd资源限制和配置片段做精细控制部署完成之后如果想让ClickHouse在鲲鹏麒麟V10上跑得更稳可以进一步用systemd的资源控制能力和ClickHouse的配置片段机制做调优。这一章不讲大而全的调参只讲两个我常用的具体技巧。5.1 用systemd cgroup限制内存和CPU麒麟V10的systemd支持cgroup v2可以在单元文件里直接限制ClickHouse的资源使用防止它把整台机器吃满。编辑/etc/systemd/system/clickhouse-server.service.d/override.conf[Service] # 限制内存上限超过会被OOM killer干掉但比拖垮整机好 MemoryMax32G MemoryHigh28G # 限制CPU配额按鲲鹏核心数调整这里假设64核给一半 CPUQuota3200% # 限制IO权重避免影响其他服务 IOWeight50改完systemctl daemon-reload systemctl restart clickhouse-server。MemoryHigh是软限制超过会触发回收MemoryMax是硬限制超过直接OOM。生产环境建议MemoryMax设成物理内存的70%左右留余量给页缓存和系统进程。5.2 用config.d片段覆盖默认参数ClickHouse的配置加载顺序是config.xml→config.d/*.xml→users.xml→users.d/*.xml。后加载的会覆盖先加载的同名参数。我一般把调优参数都放在config.d/下按功能拆成多个文件比如memory.xml、merge_tree.xml、query_log.xml。这样升级时只需要替换主config.xml自定义调优不会丢。一个典型的merge_tree.xml片段yandex merge_tree !-- 鲲鹏920的NVMe盘顺序读写性能不错可以适当调大合并线程 -- max_bytes_to_merge_at_max_space_in_pool161061273600/max_bytes_to_merge_at_max_space_in_pool number_of_free_entries_in_pool_to_lower_max_size_of_merge8/number_of_free_entries_in_pool_to_lower_max_size_of_merge !-- 麒麟V10的页缓存策略偏保守调大这个值让合并更积极 -- merge_max_block_size8192/merge_max_block_size /merge_tree /yandexmax_bytes_to_merge_at_max_space_in_pool控制单次合并的最大数据量默认150G调到150G以上适合大宽表场景。merge_max_block_size影响合并时的内存占用8192是默认值如果内存紧张可以降到4096。5.3 验证调优效果的具体方法调优之后怎么知道有没有效果我一般看三个指标查询延迟、合并队列长度、内存使用曲线。用ClickHouse自带的system.metrics和system.events表-- 查看当前合并任务队列 SELECT * FROM system.metrics WHERE metric LIKE %Merge%; -- 查看内存跟踪 SELECT * FROM system.metrics WHERE metric LIKE %Memory%; -- 查看查询延迟分布 SELECT query_duration_ms, count() FROM system.query_log WHERE event_time now() - 3600 AND type QueryFinish GROUP BY query_duration_ms ORDER BY query_duration_ms DESC LIMIT 10;如果Merge队列持续大于10说明合并跟不上写入速度需要调大background_pool_size或者降低写入频率。如果MemoryTracking接近MemoryMax说明内存吃紧要检查是不是有超大查询或者合并任务堆积。从那以后我每次在信创环境部署ClickHouse都会先把ldd、/proc/cpuinfo、sysctl这三样过一遍再动手解压安装。这套流程帮我省掉了至少三次“服务起不来但日志看不出原因”的返工。希望帮到你。本文还有配套的精品资源点击获取
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/16 6:45:25
基于MTCNN实现人脸检测:完整代码与三级级联架构解析
2026/10/16 6:45:25
YOLOv5双目测距实战:从目标检测到距离估计的完整流程
2026/10/16 6:45:25
YOLO-World开放词汇检测实战:从YOLOv8+CLIP到自定义目标识别
2026/10/16 7:35:28
crontab做持久化反弹Shell:原理、实验与防御排查指南
2026/10/16 7:35:28
MySQL事务隔离级别深度解析:MVCC、锁机制与线上实战
2026/10/16 7:35:28
电动车体验短板与燃油车反扑:购车决策背后的技术逻辑与市场博弈
2026/10/16 7:35:28
free-claude-code:开源可自托管的AI编程助手客户端实战
2026/10/16 7:35:28
AI生成3D模型落地Unity工作流:闭合网格修复与游戏资产转换
2026/10/16 7:30:28
Hook不够用时怎么办?JSReverser-MCP断点、单步与暂停执行的完整实战指南
2026/10/16 0:04:49
HCIA-AI V3.5 模拟题库从零搭建:知识点标签、组卷算法与错题分析
2026/10/16 0:04:49
游戏项目Shader清理实战:静态扫描与动态验证双轨并行
2026/10/16 0:04:49
比特币白皮书深度拆解:从双重支付到共识机制的核心设计
2026/10/16 1:17:36
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/16 1:17:35
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/16 1:17:35
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/16 1:17:35
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/15 5:07:59
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/15 8:10:01
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)