原作者:银醇超
- 适用范围
- 问题概述
- 问题原因
- 解决方案
- 参考文档
适用范围
mogdb2.0及以上
问题概述
客户反馈,mogdb2.0,一主一备,安装有mogha,客户期望实现高可用,但在一些场景中未达预期,其中一个场景是,当备库宕机(直接关主机),主库就变得不可用了(表现为应用界面一直刷新,无法完成登录),预期的结果应该是备库不可用,但主库不受影响;另一种场景是,当主机宕机(异常关机)后,备库应切换成新的主库(包含VIP的切换),然后新主库可用,但实际现象为,备库切换成新主库了,但新主库却不可用(表现为应用界面一直刷新,无法完成登录,如图所示:


问题原因
从两个场景的现象看,估计是同一个问题,就是集群出现异常时,主库处于一种受保护的阻塞模式,mogdb中有一个参数most_available_sync又叫“最大可用模式”,就有可能产生这样的阻塞;
所以,这一个参数需要首先进行检查,经查发现,这个参数确实没有设置,那么直接设置这个参数,能否解决问题呢?
使用gs_guc进行了参数调整:
gs_guc reload -N all -I all -c “most_available_sync=on”
gs_guc check -N all -I all -c “most_available_sync”
从检查的结果看,这个参数已经on了,此时再做了一次测试,把备库异常关机,结果发现主库仍然不可用,并没有达到预期的结果;
所以重新检查了环境,发现了几个细节问题:
1、主库的mogha在一个月前已关闭:

2、主库中查集群,只显示主库,未显示备库:

3、查看备库的配置,发现IP是不对的,经查,最初部署备库时这个IP就是错的,但后面用新的IP弄好了备库,然后配置信息却没有完全更新;
因此,当前集群的配置还存在不当信息,状态不是完全正常,需要首先处理好这些问题;
针对集群的配置,是利用集群名称(printenv GS_CLUSTER_NAME),日志目录,GAUSSHOME,GPHOME,PGHOST等几个参数,重新生成配置XML文件,具体命令为:gs_om -t generateconf -X <XML文件> --distribute;
配置更新后验证,显示的IP正确了,主库也能正确显示备库信息了;
此时,重新验证,当备库宕机时,主库依然可写;当主库宕机时,能切换到备库,并且备库可用;
解决方案
首先要保证集群配置正确,状态正常,然后确认已打开最大可用模式参数;
参考文档
mogdb官方文档




