常见问题
-
为什么启动MogHA服务后,通过
ps -ef|grep mogha
会看到四个进程?MogHA是使用 Python 语言进行开发的,由于Python的代码运行依赖于Python解释器和三方依赖包,为了减少部署时对于系统的过多要求,或者避免对于网络的依赖,MogHA 在发包的时候,采用了 Pyinstaller 工具来进行打包。由 Pyinstaller 打包后的执行文件在执行时,Pyinstaller 会启动一个清理进程,其余为我们实际的工作进程。
mogha: watchdog 进程是 MogHA 的主进程监控所有子进程存活状态。
mogha: heartbeat 进程是 MogHA 的心跳进程用于监控数据库进程及处理。
mogha: http-server 进程是用于 MogHA 节点间通信的 HTTP 服务进程。
-
元数据库必须配置么?
非必须。
-
为什么主备的 MogHA 服务都启动了,主心跳日志还报找不到备库的错误?
请确认主备数据库所在服务器已经开启防火墙相应端口,或者禁用防火墙,确认 agent_port 端口可以正常访问。
-
MogHA的故障检测机制是什么方式的?
对于主库实例,分为实例状态检测,网络检测和双主检测三部分。实例状态检测是通过数据库管理工具探测,支持配置自动拉起宕机的实例,可配置拉起的次数和时间;网络检测是通过和其他实例以及网关的连通性检测判断网络是否隔离,可以配置检测超时时间,判断网络故障后会自杀;双主检测是通过集群多数派确定真主,两实例时,根据元数据的时间进行判断。
对于备库实例,故障检测机制是和其他实例以及网关的连通性检测判断主库是否故障,可以配置检测超时时间。
-
MogHA 是怎样切换的?
主库检测到自己故障后,通过HTTP接口依据定义的切换顺序请求候选备库执行切换; 备库检测到主库故障后,依据定义的切换顺序自发的执行切换; 切换动作包含 failover 和挂载虚拟IP
-
主备同步复制环境中,如果无法联系到备库,主库会怎么处理以保证数据的一致性?
主备同步复制环境中,如果备库连接丢失,主库事务也会挂起,如果使用了最大可用模式,则会默认改为异步模式。 无论是同步复制还是异步复制,如果所有备库均已经故障,主库无法联系到任何一台备库,主备数据在此故障时间段就不存在一致性的说法了。但当备库恢复后,会告诉主库自己所需的起始LSN位置,获取到所有差异的WAL日志,并最终追平保持同步,主备数据仍然一致。