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

组建Redis集群遇到`GLIBC_2.14′ not found和ps -ef 不显示用户名RHEL6.9组建Redis sentinel集群遇到两个问题 今天在组件Redis sentinel 集群时,遇到两个问题,之前已经组建多次,都没碰到类似问题,在解决这两个问题时,耗费些时间。 问题

组建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.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE

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

$ strings /lib64/libc.so.6 |grep GLIBC_  
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_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 redis
31241    129637 125617  0 17:53 pts/3    00:00:00 ./src/redis-server *:6358   
31241    129866      1  0 17:55 ?        00:00:00 ./src/redis-sentinel *:16358 [sentinel]

在使用linux有一段时间,没遇到过这种现象,一般显示都直接是用户名,这样ps就知道该进程是哪个用户启动并有权限停止的。linux中是严格区分用户,不同非root用户对不同进程文件目录等有不同操作权限,可以使得多用户使用同一台服务器时的安全。

通过man命令查看ps命令的说明: 8位用户名的账户能够显示完整的用户名,9位用户名的账户就显示了UID。
当用户名的长度(用户名字符串的字符个数)大于8(默认)时,只会显示用户的UID, ps的这个长度可以自定义,如下命令:

ps -o ruser=thereisusername -e -o pid,ppid,c,stime,tty,time,cmd|grep xxx

说明:“thereisusername”是自定义填写的字符串,Linux会自动检查此字符串的长度,用户名长度比该字符串小的都会显示用户名。

在Redis使用和学习中,遇到上述问题,特此总结记录,加深影响,一点一滴积累Redis和Linux相关知识。

参考链接:

https://blog.csdn.net/Jin_Kwok/article/details/80319441?utm_source=blogxgwz7

https://blog.csdn.net/weixin_34294649/article/details/91699158

本人才疏学浅,如有错误不当之处,请批评指正,如有侵权,请立即联系我进行删除。
如果能为您带来一点点帮助,我将十分高兴,也多谢您关注:hongmaolinux 和转发推荐,谢谢!

image

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6040.html

(0)
上一篇 2023-04-18
下一篇 2023-04-18

相关推荐

  • pgpool-II 用户手册[通俗易懂]

    pgpool-II 用户手册[通俗易懂]简单通俗的来讲,pgpool-II 是一个位于 PostgreSQL 服务器和 PostgreSQL 数据库客户端之间的中间件。pgpool-II主要提供负载均衡、连接池、复制、并行查询等等功能。Pg

    2023-04-27
    210
  • Python Class:定义和使用类来组织代码

    Python Class:定义和使用类来组织代码Python是一种简单易学的编程语言。使用Python开发应用程序,涉及到的代码量往往比其他语言要少,提高了程序的开发效率。在Python中,类是一种非常重要而且强大的机制,它可以帮助开发者组织代码并且降低代码的重复性。类的使用方式类似于其他面向对象的编程语言,比如Java、C++等。

    2024-01-20
    52
  • 数智时代基石,阿里云推出新一代云原生数据仓库与数据湖[亲测有效]

    数智时代基石,阿里云推出新一代云原生数据仓库与数据湖[亲测有效]6月9日, 在2020阿里云峰会上,阿里巴巴副总裁、阿里云计算平台事业部高级研究员贾扬清宣布推出新一代云原生数据仓库和数据湖解决方案。基于创新的技术架构,新一代云原生数据仓库可支持PB级数据关联分析…

    2023-03-10
    96
  • 使用Python编写优雅的网络爬虫

    使用Python编写优雅的网络爬虫网络爬虫已经成为数据获取的主要手段之一,而Python作为当前最流行的编程语言之一,自然也是网络爬虫开发者的首选。Python提供了许多网络爬虫开发库和框架,代码简洁,易于维护,爬虫开发效率大大提高。本文将从以下方面对如何使用Python编写优雅的网络爬虫进行详细阐述。

    2023-12-29
    55
  • excel 截取 字符串_excel 字符串比较

    excel 截取 字符串_excel 字符串比较怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符.如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作,另外,怎么样从右边截取字符,就是和left()函数相反的那个功能.=find(“.”,a2)返回在数字中字符(小数点)的位置。具体公式如下:字符(小数点)前三位=MID(A2,FIND(“.”,A2)-3,3)字符(小数点)后三个=MID(A2,FIND(“.”,A2)+1,3)字符(小数点)前面的所有数字=LEFT(A2,FIND(“

    2023-03-02
    107
  • mysql 使用函数和使用表连接的快慢区别是什么_函数变化的快慢顺序

    mysql 使用函数和使用表连接的快慢区别是什么_函数变化的快慢顺序要执行 0.146 秒左右,如果有 70 多个 ,就要 10秒钟; 改用表连接, 70 多个总共才需要 0.36秒

    2022-12-17
    87
  • 利用Python Tkinter实现图形用户界面

    利用Python Tkinter实现图形用户界面在计算机软件开发中,图形用户界面(GUI,Graphical User Interface)是一种用户界面,它使用图像、图标和视觉方式呈现给用户,使用户与软件进行交互。Python作为功能强大且易于上手的编程语言,其标准库中包含的Tkinter模块可以用于创建GUI应用程序。通过使用Tkinter,可以为Python程序添加强大的、易于使用的图形化用户界面。

    2024-01-18
    76
  • Postgesql 空间点聚合查询实验

    Postgesql 空间点聚合查询实验聚合效果:根据范围四至获取区域内的聚合点数据。 aggregate_build_data /***创建测试空间点数据库***/ create table tpoint( gid serial pri…

    2023-01-27
    104

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注