高可用与容灾

PolarDB PostgreSQL轻量版支持集群高可用与跨机房的容灾能力,保障系统持续运行和数据安全,提升业务可靠性和应对突发情况的能力。

ClusterManager作为数据库集群的高可用组件,在主节点出现宕机或故障时,能够即时选择可用只读节点进行切换,也支持手动切换。ClusterManager组件使用三节点形态部署,利用Raft协议保障自身的高可用。

自动切换(Failover)

正常情况下,高可用组件ClusterManager将对数据库进行每3秒一次的探活操作,针对主节点进行可写探活,针对只读节点进行只读探活。一旦探活出现异常,在探活超时的情况下,将结合Monitor Agent采集的数据,判断探活异常原因。

  • 当确认是由于CPU资源占满所导致,则不会优先尝试切换。

  • 当主节点进程发生崩溃的情况(例如误关闭),将优先在主节点尝试重启实例以进行恢复。

  • 对于主节点宕机、断电、网络异常等场景导致的故障,ClusterManager会选择其中一个处于同步状态的只读节点提升为主节点。切换后会尝试将原主节点以只读节点角色加回集群。

  • 当只读节点故障时,ClusterManager会尝试重启只读节点数据库进程,长时间异常时会自动对备库进行重建。

手动切换(Switchover)

支持使用pdbcli进行主备节点手动切换。详细步骤如下:

  1. 查看所有可切换的只读节点。

    pdbcli failover --list

    返回结果如下:

    Cluster Status:
    {
      "phase": "RunningPhase", 
      "master": 
      {
        "endpoint": "10.X.X.1:1521", 
        "phase": "RUNNING",
        "start_at": "2020-09-24 23:32:07", 
        "sync_status": "SYNC"
      }, 
      "standby": 
      [
        {
          "endpoint": "10.X.X.2:1521",
          "phase": "RUNNING",
          "start_at": "2020-09-24 23:32:10", 
          "sync_status": "SYNC"
        }, 
        {
          "endpoint": "10.X.X.3:1521",
          "phase": "RUNNING",
          "start_at": "2020-09-24 23:32:10", 
          "sync_status": "SYNC"    
        } 
      ]
    }
  2. 使用目标Standby节点的endpoint进行手动切换。

    pdbcli failover --target <endpoint>

完成主备节点切换后可执行pdbcli status验证,如每个节点的phase均为RUNNING,则表明手动切换成功。