## pacemaker + corosync
提前准备三台红旗7.6,
主机名:pgnode1/2/3
IP:10.3.6.71/72/73
root配置好互信,以下步骤默认root操作,step1-13在所有节点执行,step14在第一节点验证即可。
目录


1. 主机名解析


2. 创建用户


3. 创建PG相关文件系统


4. 解压

5. 修改权限

6. 开始编译安装

7. 版本软连接

8. 创建 ha 用户和组


9. Linux 配置





10. 安装HA需要的软件包


11. Asianux-7.6.iso 挂载到 /mnt 方式,此次安装PG集群不需要

12. 开机启动


13. 安装 pg_pathman 插件 (可选)




15. 验证pg集群


16. 添加环境变量 /etc/profile

17. 验证pg集群(第一个节点执行)


18. 查看集群 (第一个节点执行)





19. 启动集群 (第一个节点执行)

20. 集群其他命令参考

21. 常见问题一:pg数据库idle或idle in transaction状态会话过多
1、用postgres用户登录告警的数据库节点;
2、登录数据库,检查idle或idle in transaction状态的会话pid:

3、根据情况杀掉过多的idle或idle in transaction状态的会话:

如果上述命令无法正常kill掉会话,则继续执行

4、检查主机资源使用是否恢复正常,视情况决定是否继续kill相关进程。
22. 常见问题二:pg数据库某表、某字段无法modify
1、用postgres用户登录告警的数据库节点;
2、数据库日志相关锁检查;
标准安装的数据库,在当数据库自身检查到死锁时会在数据库日志中留存记录,关键字信息为:“40P01” 侦测到死锁(DEADLOCK DETECTED),可以通过cat 数据库日志名 | grep 40P01来查看是否有数据库自身侦测到的死锁。数据库pg_stat_activity 发现有wait_event_type字段为lock的记录且长时间不消失。使用psql命令登陆到具体数据库“查锁”,看里面的语句和应用提供的表和语句进行对比。如果有一致的,询问应用是否杀语句。如果没有,可能就和锁无关了。可以通过查询topsql确认是否在一直运行某个语句,如果应用确认需要杀语句,则进入下一步杀语句。
3、针对某表查询锁情况
执行语句:
根据上面查出来的pid去表pg_stat_activity查询一下该锁对应的SQL语句:

与应用确认,可以杀语句后,执行以下命令杀掉语句:

23. 常见问题三:pg数据库集群状态异常无主节点
1、用root用户登录数据库集群任一节点;
2、检查集群状态:cls_status,发现无主节点;
3、可执行脚本由集群根据各数据库的时间线选择出主

4、如果原主数据库故障后不能以备的方式加入集群,以重建备库的方式加入集群

5、查看数据库集群状态是否正常,流复制是否正常建立:

24. 常见问题四:pg数据库备节点状态异常备节点状态为stop或alone
一般为集群间心跳超时导致,现象为集群有fail-count失败数告警。
1、用root用户登录数据库集群任一节点;
2、检查集群状态:cls_status;

3、一般情况下会有fail-count告警,可以尝试通过resource cleanup 恢复异常节点的集群状态:

4、如果异常节点集群状态未恢复,可能为集群主备发生切换,需要清理异常节点的锁文件,可以尝试删除锁文件后再执行第3步的命令:

5、如果还是不成功,则可能是数据库的baseline发生变化,或主节点的wal日志文件以及归档,备节点启动时无法找到文件,可以查看数据库日志分析具体原因:
数据库日志目录:
pg10.5:/pgdb/pgdata/log
pg11.6:/pglog
pg12.5:/pglog
则需要重构异常备节点:

关于pg集群脑裂问题分析请微信搜索“安图特”公众号,查看发表于2023年10月31日关于某业务平台pg数据库集群脑裂问题分析的文章。