暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL从一个搭建环境比较常见的小问题说起

数据库杂记 2024-06-05
40

前言

最近,一个非常勤奋的学生,自己动手搭起了repmgr高可用主从环境,看起来,前半个阶段还比较顺利,但是后来还是遇到了一些问题。一时不知道如何解决。

问题如下:

〖熊大〗 老师,请问下,我启动pg_ctl报错,请问如何解决?我在postgres.conf配置了 shared_preload_libraries = 'repmgr'。

光看这个问题,没有进一步的上下文环境,熊大也无从回复。

后续

学生Bob接着提示后文:


熊大,一眼就看出来有些怪怪的,一些符号居然加载不起来,那不就是repmgr与PG版本不匹配,找不着符号吗?

“看起来,像是repmgr和你的Postgresql版本不匹配。你得看下repmgr的官方文档,看它支持的PG版本分别是多少。"

Bob:

把这个去掉shared_preload_libraries = 'repmgr' 就起来了。如:


但主库加hared_preload_libraries = 'repmgr'  就能起来,备库则起不来。版本信息:pg 14.9  repmgr 5.3.3。

熊大思考了一会儿,进一步确认:”备库有什么特殊的地方吗?”

“没有理由主库能加载备库不能。两个库二进制环境一模一样吗”

Bob:“备库好像没什么特殊的,之前忘了加 shared_preload_libraries  ,clone后加就报错,数据库重启就不行了”

“如果备库只reload,启动repmgrd报错”


熊大:“配置文件改好后,重新clone。”

Bob: "重启clone,数据库还是起不来,报刚才错误"


这下熊大基本确认了:

“repmgr在从库机器上安装的位置以及版本,上边已经告诉你加载错误了”

Bob:“这文件是有的,路径很主库是一模一样的”



熊大:“你用strings -a  repmgr.so | grep  查下那个hook函数,主从节点上都查下。”

Bob:


主节点好像没有, 上面是备库,下图是主库


熊大:“所以啊,你装了不同的repmgr,慢慢细查下吧。”

Bob: “我是主库拷贝到备库的,可能是我之前装15.5后来lib不支持repmgr,我后来改成14.9是不是我没清理干净?那我这文件替换一下试试”

Bob:“谢谢熊大老师,替换一下就可以了”


总结:

作为DBA而言,日常troubleshooting, 了解一些动态库(共享库)加载的基础知识是应该的。上面就直接用到了strings -a去搜索动态库中的符号的基本技能。

潘爱民的《程序员的自我修养-链接、装载和库》这本书,无论是程序员还是系统管理人员,如果能好好的读一读,就不会惧怕稍偏底层的一些基本问题了。

参考:

我是【Sean】,  欢迎大家长按关注并加星公众号:数据库杂记。有好资源相送,同时为你提供及时更新。已关注的朋友,发送0、1到7,都有好资源相送。

往期导读: 
1. PostgreSQL中配置单双向SSL连接详解
2. 提升PSQL使用技巧:PostgreSQL中PSQL使用技巧汇集(1)
3. 提升PSQL使用技巧:PostgreSQL中PSQL使用技巧汇集(2)
4. PostgreSQL SQL的基础使用及技巧
5. PostgreSQL开发技术基础:过程与函数

文章转载自数据库杂记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论