#yasboot election

仲裁选主是在一主一备的情况下,当主节点发生异常不能对外服务时,系统通过yasom仲裁,将备节点升为主节点,并将原主节点降为备节点。

YashanDB支持在如下部署模式下启用yasom仲裁,且仅在yasom和备节点的yasagent进程在线时生效。

  • 单机部署一主一备。

  • 分布式部署DN组一主一备。

开启仲裁选主后,主节点启动前会连接yasom或备节点确认实际角色,若连接失败则主节点启动失败。如需降备,原主节点会直接以备节点角色启动。

仲裁的模式分为零丢失模式和普通模式,具体表现如下:

  • 零丢失模式(ZeroDataLossMode=true):主备保护模式支持最大保护和最大可用,开启零丢失模式的仲裁选主后,yasom会自动将保护模式改为最大保护。处于最大保护模式的场景下,主节点发生故障时yasom会执行自动failover切换。若某个备节点异常,主节点会降为最大可用模式,若此时主节点异常,为确保备节点不丢数据(即RPO=0),yasom不会自动failover。

  • 普通模式(ZeroDataLossMode=false):主备保护模式支持最大可用和最大性能。切换限制少,但不保证RPO=0,该模式可能会导致数据丢失。

Caution

  • 备节点与yasom部署于同一台服务器时,不建议使用仲裁选主,如仍需使用,推荐使用普通模式。因为在零丢失模式下,若yasom和备节点同时故障会使主节点产生业务阻塞。

  • 若yasom不可用,即使处于仲裁选主的零丢失模式,仍有可能因数据库保护模式无法变更(例如,此时备节点宕机,主节点的保护模式无法从最大保护变为最大可用),而使得主节点产生业务阻塞。

  • 需确保已开启操作系统身份认证,才能正常使用仲裁选主功能。

# election enable on

本命令用于启用基于yasom的仲裁选主。开启仲裁前,可通过election config set命令按需配置仲裁相关参数。

选项 含义
-c, --cluster 部署YashanDB的集群名(必传参数)
--group-ids 节点组ID,支持多个,使用逗号分隔(V$NODE/DV$NODE中的group_id);
单机部署中本参数不生效;分布式部署中本参数不填写表示所有DN组
-u, --username 指定数据库用户(不指定则默认使用sys用户)
-p, --password 数据库用户对应的密码

Note

  • 开启前,须确保主备节点状态正常,且保护模式相同。
  • 开启前,须确保每台服务器都开启了操作系统身份认证
  • 开启仲裁选主会修改数据库的心跳间隔和心跳超时参数。

示例

$ yasboot election enable on -c yashandb

# election enable off

本命令用于禁用基于yasom的仲裁选主。

选项 含义
-c, --cluster 部署YashanDB的集群名(必传参数)
--group-ids 节点组ID,支持多个,使用逗号分隔(V$NODE/DV$NODE中的group_id);
单机部署中本参数不生效;分布式部署中本参数不填写表示所有DN组
-f, --force 强制禁用,忽略离线的数据库节点的参数重置。不使用--force选项关闭仲裁,会重置所有节点的选举参数,必须保证所有节点在线
-u, --username 指定数据库用户(不指定则默认使用sys用户)
-p, --password 数据库用户对应的密码

Note

  • 当某些节点离线时,可以使用--force选项,忽略离线节点的参数重置,后续需要手动重置该节点的参数OM_ELECTION_ENABLE为FALSE,否则数据库启动时,可能因为无法确认角色而启动失败。
  • 禁用仲裁选主,不会还原开启仲裁选主前的心跳超时时间和保护模式。

示例

$ yasboot election enable off -c yashandb
$ yasboot election enable off --force -c yashandb

# election config show

本命令用于展示仲裁选主的参数设置和运行状态。

选项 含义
-c, --cluster 部署YashanDB的集群名(必传参数)
--group-ids 节点组ID,支持多个,使用逗号分隔(V$NODE/DV$NODE中的group_id);
单机部署中本参数不生效;分布式部署中本参数不填写表示所有DN组
-u, --username 指定数据库用户(不指定则默认使用sys用户)
-p, --password 数据库用户对应的密码

示例

$ yasboot election config show -c yashandb

group 1
  Protection Mode: MAXIMUM AVAILABILITY
  Members:
    [1-1:1] - Primary database
      [1-2:2] - Physical standby database
                  Transport Lag: 0 seconds
                  Apply Lag:     15 seconds
                  Apply Rate:    0.00 KByte/s

  Properties:
    FailoverThreshold      = 5
    FailoverAutoReinstate  = true
    ZeroDataLossMode       = false

Automatic Failover: Enabled in Potential Data Loss Mode

其中:

  • Protection Mode:yasom记录的主节点保护模式。
  • Members:表示节点信息,包括节点状态,节点角色,备节点传输延迟,回放延迟和回放速率等。
  • Properties:当前生效的参数值。
  • Automatic Failover:仲裁状态。
    • DISABLED:仲裁已关闭。
    • Enabled in Potential Data Loss Mode:普通模式的仲裁已开启。
    • Enabled in Zero Data Loss Mode:零丢失模式的仲裁已开启。
    • Enabled in Zero Data Loss Mode (NOT ALLOWED):零丢失模式的仲裁已开启,但数据库的保护模式不是最大保护,无法自动切换。

# election config set

本命令用于设置仲裁选主相关的参数,仅允许在仲裁选主未启用的情况下设置选举参数。

选项 含义
-c, --cluster YashanDB的集群名(必传参数)
-k, --key 设置参数的名称(必传参数)
-v, -value 设置参数key对应的值(必传参数)
--group-ids 节点组ID,支持多个,使用逗号分隔(V$NODE/DV$NODE中的group_id);
单机部署中本参数不生效;分布式部署中本参数不填写表示所有DN组

仲裁选主的参数如下:

参数名 默认值 取值范围 含义
FailoverThreshold 9 [2, 1000] 备节点心跳超时时间,到达该时间后,yasom将执行failover切换流程
FailoverAutoReinstate false true/false 是否启用自动脑裂修复。
启用后,如果备节点发生脑裂,处于NEED REPAIR状态,yasom将尝试自动修复
ZeroDataLossMode true true/false 是否启用零丢失模式。
启用后,将设置主备为最大保护模式,当主节点宕机时,备节点可自动failover;当备节点异常时,主节点将由yasom降级为最大可用模式,并禁止自动failover,直到备节点恢复同步后,yasom重新将主节点升级为最大保护模式后,可以自动failover

Caution

  • FailoverThreshold太小,可能会因为网络抖动而发生不必要的切换,请根据网络状态设置合理的超时时间。
  • FailoverAutoReinstate启用后,会自动修复备节点脑裂问题,会使备节点与主节点有分歧的部分数据丢失,请谨慎使用
  • ZeroDataLossMode启用后,优先使用最大保护模式。在最大保护模式下,主节点宕机,备节点自动failover后,不会丢失数据。当备节点异常后,主节点会降级为最大可用模式,此时备节点有丢失数据的风险,所以自动failover将禁用,直到主节点再次恢复最大保护模式。因此零丢失模式的切换条件更严格,但是能保证数据不丢失。

示例

$ yasboot election config set -k FailoverThreshold -v 5 -c yashandb

# election config unset

本命令用于重置仲裁选主相关的参数为默认值。

选项 含义
-c, --cluster YashanDB的集群名(必传参数)
-k, --key 设置参数的名称(必传参数)
--group-ids 节点组ID,支持多个,使用逗号分隔(V$NODE/DV$NODE中的group_id);
单机部署中本参数不生效;分布式部署中本参数不填写表示所有DN组
-u, --username 指定数据库用户(不指定则默认使用sys用户)
-p, --password 数据库用户对应的密码

示例

$ yasboot election config unset -k FailoverThreshold -c yashandb

# election event show

本命令用于查看仲裁选主相关的事件,包括事件名,发生时间,处理时间,处理是否成功等。

选项 含义
-c, --cluster YashanDB的集群名(必传参数)
--group-ids 节点组ID,支持多个,使用逗号分隔(V$NODE/DV$NODE中的group_id);
单机部署中本参数不生效;分布式部署中本参数不填写表示所有DN组

示例

$ yasboot election event show -c yashandb

group 1
 Name         | Node Id | Report Time         | Process Time        | Success | Ignore | Error                                              
--------------------------------------------------------------------------------------------------------------------------------------------
 need repair  | 1-1:1   | 2023-06-14 16:35:35 | 2023-06-14 16:35:38 | Yes     | 0      |                                                    
--------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------
 failover     | 1-2:2   | 2023-06-14 16:35:31 | 2023-06-14 16:35:32 | Yes     | 0      |                                                    
--------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------
 confirm role | 1-2:2   | 2023-06-14 16:35:26 | 2023-06-14 16:35:26 | Yes     | 0      |                                                    
--------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------
 failover     | 1-1:1   | 2023-06-14 16:35:22 | 2023-06-14 16:35:22 | Yes     | 0      |                                                    
--------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------
 failover     | 1-2:2   | 2023-06-14 16:35:04 | 2023-06-14 16:35:05 | Yes     | 0      |                                                    
--------------+---------+---------------------+---------------------+---------+--------+----------------------------------------------------

仲裁选主的事件如下:

事件名 含义
failover 备节点无法连接主节点、心跳超时后,向yasom上报,通知yasom将进行仲裁选主
confirm role 主节点重启时,需要确认自己的角色,向yasom上报,通知yasom确认该节点的实际角色。如果旧主节点需要降备,将直接启动为备节点
need repair 备节点状态为NEED REPAIR,可能是非零丢失模式下,产生脑裂现象,旧主节点降备后无法继续接收日志数据,需要通知yasom修复该备节点
protection demote 零丢失模式下,当备节点异常,导致主节点事务阻塞时,主节点向yasom上报,通知yasom将主节点的保护模式降级为最大可用模式,并禁止自动切换
protection promote 零丢失模式下,当备节点恢复同步后,主节点向yasom上报,通知yasom将主节点的保护模式升级为最大保护模式,并恢复自动切换

Note

  • 同一种事件最多保存5条,超出将淘汰老的事件。
  • 在1分钟内,yasom仲裁失败3次后,将不再处理failover和need repair事件,后续的相同事件会被忽略,并在最近一次事件记录里增加Ignore字段的值。