2021年7月9日星期五

组建Redis集群遇到`GLIBC_2.14' not found和ps -ef 不显示用户名

RHEL6.9组建Redis sentinel集群遇到两个问题

今天在组件Redis sentinel 集群时,遇到两个问题,之前已经组建多次,都没碰到类似问题,在解决这两个问题时,耗费些时间。

问题1. ./redis-server: /lib64/libc.so.6: version `GLIBC_2.14' not found 问题

在将A服务器 RHEL6.9 上已经编译好的 Redis-3.0.3 整个目录,scp 到 RHEL6.9 服务器B上,

在 A 上能正常运行的redis-server程序,但在 B 服务器上却执行失败,在 B 服务器redis中的src目录下使用指令 ldd redis-server 可以看到如下的报错,

B 服务器ldd结果:

$ldd redis-server./redis-server: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./redis-server)  linux-vdso.so.1 => (0x00007ffd3fbc7000)  libm.so.6 => /lib64/libm.so.6 (0x0000003e49a00000)  libdl.so.2 => /lib64/libdl.so.2 (0x0000003e48a00000)  libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003e49200000)  libc.so.6 => /lib64/libc.so.6 (0x0000003e48e00000)  /lib64/ld-linux-x86-64.so.2 (0x0000003e48600000)

但是在 A 服务器上进行如上的命令,却正常,并没有not found。
A 服务器ldd结果:

$ldd redis-server  linux-vdso.so.1 (0x00007ffdcdb5b000)  libm.so.6 => /lib64/libm.so.6 (0x0000003940e00000)  libdl.so.2 => /lib64/libdl.so.2 (0x0000003940600000)  libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003940200000)  libc.so.6 => /lib64/libc.so.6 (0x000000393fe00000)  /lib64/ld-linux-x86-64.so.2 (0x000000393fa00000)

这就奇怪了,但是细心观察,就能发现 /lib64/libc.so.6 () 的值是不一样的,初步怀疑是由于在 A 机器上编译环境和 B 上是不一样的。

利用相关指令查看 libc.so.6 中是否一样:

A 服务器查看 libc.so.6 内容:

$ strings /lib64/libc.so.6 |grep GLIBC_ GLIBC_2.2.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.2GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_2.13GLIBC_2.14GLIBC_2.15GLIBC_2.16GLIBC_2.17GLIBC_PRIVATE

B 服务器查看 libc.so.6 内容:

$ strings /lib64/libc.so.6 |grep GLIBC_ GLIBC_2.2.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.2GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_PRIVATE

上述指令对比就能看出,B服务器的 GLIBC 版本较低,虽然都是RHEL6.9操作系统,但内部库还是有些不一样的地方。

对应的解决方法有如下几种:

  1. 在 B 的环境中,直接进行 redis 源码编译,生成的可执行文件能在 B 中成功运行。
  2. 可以找到与 B 一样的 strings /lib64/libc.so.6 |grep GLIBC_ 的操作系统环境,在其上编译之后,直接将可执行文件拷贝到B上运行。
  3. 升级 B 服务器的 GLIBC。
  4. 可在redis源码中添加约束,显式指定所依赖的memcpy函数的GLIBC版本,需添加的约束代码如下:
    __asm__(".symver memcpy,memcpy@GLIBC_2.2.5");,【注意】只需在调用函数memcpy的源文件中加入此约束,该方法读者可以自行验证,后面参考链接中有相关博客介绍。

我是选择了方法2解决的上述报错问题,找到一个 strings /lib64/libc.so.6 |grep GLIBC_ 和 B 服务器一样的内容,重新拷贝redis相关文件到 B 服务器中,执行redis进程成功。

问题2. ps -ef 进程 uid 不显示用户名而是数字

在上述redis于 B 服务器成功执行后,ps 进程发现第一纵列不是显示用户名,而是用户名的uid一串数字

$ ps -ef|grep redis31241 129637 125617 0 17:53 pts/3 00:00:00 ./src/redis-server *:6358 31241 129866  1 0 17:55 ?  00:00:00 .......

原文转载:http://www.shaoqun.com/a/859311.html

跨境电商:https://www.ikjzd.com/

kk馆:https://www.ikjzd.com/w/1713

中国邮政邮乐网:https://www.ikjzd.com/w/1776

淘粉:https://www.ikjzd.com/w/1725


RHEL6.9组建Redissentinel集群遇到两个问题今天在组件Redissentinel集群时,遇到两个问题,之前已经组建多次,都没碰到类似问题,在解决这两个问题时,耗费些时间。问题1../redis-server:/lib64/libc.so.6:version`GLIBC_2.14'notfound问题在将A服务器RHEL6.9上已经编译好的Redis-3.0.3整个目录,sc
淘粉:https://www.ikjzd.com/w/1725
分享7个亚马逊选品小妙招!:https://www.ikjzd.com/articles/126793
确定了!亚马逊印度站Prime Day将于8月初率先举办,美国待定!:https://www.ikjzd.com/articles/126771
亚马逊仓库开始收取长期仓储费:https://www.ikjzd.com/articles/126763
店铺被跟卖,为何平台不禁止反而纵容?如果我被跟卖,该怎么办?:https://www.ikjzd.com/articles/126804
在外打工的换妻故事经历:http://lady.shaoqun.com/m/a/66921.html
口述实录:我和父亲那难以启齿的秘密:http://www.30bags.com/m/a/249613.html
口述:邻居在电梯里夺走我第一次:http://www.30bags.com/m/a/249264.html
女海王阵型!不告诉男朋友就勾搭富二代!数百万粉丝,Tik Tok女人,网络名人,做了很多轮:http://lady.shaoqun.com/a/410933.html
清迈的一个天桥小舒林成同志,被居民举报:http://lady.shaoqun.com/a/410934.html
女人为什么选择"暧昧"?倾听中年妇女的心声:http://lady.shaoqun.com/a/410935.html
独立站高昂流量成废品,如何操作才能起死回生?(上):https://www.ikjzd.com/articles/146487

没有评论:

发表评论