clickhouse如何解决GLIBC不兼容问题

简介: clickhouse如何解决GLIBC不兼容问题

介绍


首先解释下为什么会有GLIBC不兼容问题:在clickhouse的编译环境中ubuntu版本是20, 而运行环境中是16,不同ubuntu版本支持的GLIBC版本不一样,因此将ubuntu20上编译出来的ck放在ubuntu16下运行时,便会出现兼容性问题。虽然ck编译时绝大部分库都是静态链接的,但是glibc却是个例外。


$ ldd ./clickhouse    
 linux-vdso.so.1 (0x00007ffcc9f7a000)
 libpthread.so.0 => /usr/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2e84b57000)
 librt.so.1 => /usr/lib/x86_64-linux-gnu/librt.so.1 (0x00007f2e84b4c000)
 libdl.so.2 => /usr/lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2e84b46000)
 libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e84954000)
 libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x00007f2e84805000)
 /lib64/ld-linux-x86-64.so.2 (0x00007f2e84b7c000)



解决方法有几个思路:


  • 将编译环境改成ubuntu16:系统版本太老,很多必要的依赖无法成功安装,影响编译。不可行



  • 将运行环境改成ubuntu20: 生产环境不是说动就动的,不可行


  • 编译时静态链接glibc:副作用较多


  • 将glibc相关的共享库随ck binary一块打包:需要升级打包脚本,代价相对较小

接下来我们总结如何根据最后一种思路解决GLIBC的兼容性问题



解决


打包动态库


vim copylib.sh

#!/bin/bash
# copylib.sh
LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
do
 cp "$Variable" $LibDir
done



上述脚本首先通过ldd得到binary依赖的动态库,然后将so文件复制到./lib目录

./copylib.sh clickhouse

结果如下

$ ll ./lib                                            
total 3728
-rw-r--r-- 1 root root   40040 Oct 31 16:45 librt.so.1
-rwxr-xr-x 1 root root  157224 Oct 31 16:45 libpthread.so.0
-rw-r--r-- 1 root root   18816 Oct 31 16:45 libdl.so.2
-rwxr-xr-x 1 root root 2029224 Oct 31 16:45 libc.so.6
-rw-r--r-- 1 root root 1369352 Oct 31 16:45 libm.so.6
-rwxr-xr-x 1 root root  191472 Oct 31 16:45 ld-linux-x86-64.so.2



修改ELF


首先安装patchelf (https://github.com/NixOS/patchelf.git)

使用patchelf工具修改clickhouse二进制文件的ELF信息

patchelf --set-rpath <prefix>/lib  clickhouse
patchelf --set-interpreter <prefix>/lib/ld-linux-x86-64.so.2 clickhouse



其中应当是clickhouse运行环境中lib所在的目录

完成修改后,结果如下:

$ ldd ./clickhouse
 linux-vdso.so.1 =>  (0x00007ffddf3dc000)
 libc.so.6 => /data/services/clickhouse/lib/libc.so.6 (0x00007fbf1533f000)
 /data/services/clickhouse/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fbf1530d000)
 libm.so.6 => /data/services/clickhouse/lib/libm.so.6 (0x00007fbf151be000)
 librt.so.1 => /data/services/clickhouse/lib/librt.so.1 (0x00007fbf15334000)
 libpthread.so.0 => /data/services/clickhouse/lib/libpthread.so.0 (0x00007fbf1519b000)
 libdl.so.2 => /data/services/clickhouse/lib/libdl.so.2 (0x00007fbf15195000)



运行clickhouse


过程略

相关文章
|
C语言
clickhouse如何解决GLIBC不兼容问题--终篇
clickhouse如何解决GLIBC不兼容问题--终篇
366 0
clickhouse如何解决GLIBC不兼容问题--终篇
|
存储 运维 Kubernetes
国内首个云上容器ATT&CK攻防矩阵发布,阿里云助力企业容器化安全落地
本文对云上容器ATT&CK攻防矩阵做了详细阐述,希望能帮助开发和运维人员了解容器的安全风险和落地安全实践。
13168 1
国内首个云上容器ATT&CK攻防矩阵发布,阿里云助力企业容器化安全落地
|
4天前
|
存储 Cloud Native 大数据
国内独家|阿里云瑶池发布ClickHouse企业版:云原生Serverless新体验
全面升级为云原生架构,支持云原生按需弹性Serverless能力,解决了长期困扰用户的集群扩展效率和平滑性问题。
国内独家|阿里云瑶池发布ClickHouse企业版:云原生Serverless新体验
|
4天前
|
存储 容灾 Cloud Native
阿里云ClickHouse企业版正式商业化,为开发者提供容灾性更好、性价比更高的实时数仓
2024年4月23日,阿里云联合 ClickHouse Inc. 成功举办了企业版商业化发布会。阿里云 ClickHouse 企业版是阿里云和 ClickHouse 原厂 ClickHouse. Inc 独家合作的存算分离的云原生版本,支持资源按需弹性 Serverless,帮助企业降低成本的同时,为企业带来更多商业价值。
392 1
|
4天前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
|
4天前
|
SQL 运维 关系型数据库
阿里云DTS踩坑经验分享系列|如何使用DTS进行MySQL->ClickHouse同步
在使用阿里云DTS 进行MySQL->ClickHouse同步时,从准备工作,到创建任务,再到后期运维处理,新手可能会感到茫然和不知所措。为了帮助新手顺利过渡,本文将介绍使用阿里云DTS在进行MySQL到ClickHouse迁移时的最佳实践以及常见踩坑问题, 我们希望通过这篇文章,让您能无忧使用阿里云DTS进行数据迁移,享受ClickHouse带来的高效数据分析体验。
98359 12
阿里云DTS踩坑经验分享系列|如何使用DTS进行MySQL->ClickHouse同步
|
8月前
|
存储 缓存 Cloud Native
阿里云 ClickHouse 企业版首发邀测&云原生 ClickHouse 技术揭秘
云数据库 ClickHouse 企业版是阿里云和 ClickHouse, Inc 战略合作打造的云原生ClickHouse 产品。企业版推出专属 SharedMergeTree 云原生引擎,支持存算分离,Serverless 秒级实时弹性,集群吞吐和查询效率线性扩展及 Lightweight update 实时更新能力。本文将详细揭秘 SharedMergeTree 实现机制,实时弹性扩展实现原理,lightweight update 技术实现原理,同时对企业版和开源版进行详细的性能测试对比。
|
8月前
|
存储 缓存 Cloud Native
阿里云 ClickHouse 企业版云原生 ClickHouse 技术揭秘
云数据库 ClickHouse 企业版是阿里云和 ClickHouse, Inc 战略合作打造的云原生ClickHouse 产品。企业版推出专属 SharedMergeTree 云原生引擎,支持存算分离,Serverless 秒级实时弹性,集群吞吐和查询效率线性扩展及 Lightweight update 实时更新能力。本文将详细揭秘 SharedMergeTree 实现机制,实时弹性扩展实现原理,lightweight update 技术实现原理,同时对企业版和开源版进行详细的性能测试对比。
1577 1
阿里云 ClickHouse 企业版云原生 ClickHouse 技术揭秘
|
8月前
|
SQL 分布式计算 测试技术
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris 迁移实践:有赞查询提速近 10 倍,OLAP 分析更实时高效!
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
|
8月前
|
SQL Java Maven
使用阿里云的 flink-connector-clickhouse 插件
使用阿里云的 flink-connector-clickhouse 插件
615 2

热门文章

最新文章