#yasboot election

与基于RAFT协议的自动选举不同,本模式是通过yasom仲裁,在主库故障的情况下,将备库切换为新的主库。

YashanDB仅支持在一主一备单机部署下进行仲裁选举。

# election enable on

本命令用于启用基于yasom的仲裁选举。

选项 含义
-c, --cluster 部署YashanDB的集群名(必传参数)

Caution

  1. 须保证yasom和备库的yasagent进程正常在线。
  2. 主备状态正常,并且主备保护模式相同(非零丢失模式下,仅支持最大性能和最大可用模式)。
  3. 开启仲裁选举会修改数据库心跳间隔和心跳超时参数,如果是零丢失模式,将设置主备为最大保护模式。
  4. 开启仲裁选举后,主库每次启动都会确认实际角色,如果需要降备,会直接启动为备库。确认实际角色需要连接到yasom,或者连接到备库,否则主库将启动失败。
  5. 零丢失模式下,yasom会自动管理数据库节点的保护模式。如果yasom不可用,有可能导致数据库节点保护模式无法变更,比如备机宕机时,主机的保护模式无法从最大保护变为最大可用,从而导致主机业务阻塞。
  6. 备机与yasom在同一台主机上时,不建议开启仲裁开关,可能存在风险(在零丢失模式下,当yasom和备机同时挂掉时主节点会产生业务阻塞);若需要该场景开启仲裁开关,请不要使用零丢失模式。

示例

$ yasboot election enable on -c yashandb

# election enable off

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

选项 含义
-c, --cluster 部署YashanDB的集群名(必传参数)
-f, --force 强制禁用,忽略离线的数据库节点的参数重置

Caution

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

示例

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

# election config show

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

选项 含义
-c, --cluster 部署YashanDB的集群名(必传参数)

示例

$ yasboot election config show -c yashandb

  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

其中:

  1. Protection Mode:yasom记录的主库保护模式。
  2. Members:表示节点信息。包括节点状态,节点角色,备库传输延迟,回放延迟和回放速率等。
  3. Properties:当前生效的参数值。
  4. Automatic Failover:仲裁选举状态。
    1. DISABLED:选举关闭。
    2. Enabled in Potential Data Loss Mode:选举开启,并且切换可能丢失数据。
    3. Enabled in Zero Data Loss Mode:选举开启,并且不会丢失数据。
    4. Enabled in Zero Data Loss Mode (NOT ALLOWED):选举开启,但不是最大保护模式,可能有数据丢失风险,禁止自动切换。

# election config set

本命令用于设置仲裁选举相关的参数。

选项 含义
-c, --cluster YashanDB的集群名(必传参数)
-k, --key 设置参数的名称(必传参数)
-v, -value 设置参数key对应的值(必传参数)

仲裁选举的参数如下:

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

Caution

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

示例

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

# election config unset

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

选项 含义
-c, --cluster YashanDB的集群名(必传参数)
-k, --key 设置参数的名称(必传参数)

示例

$ yasboot election config unset -k FailoverThreshold -c yashandb

# election event show

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

选项 含义
-c, --cluster YashanDB的集群名(必传参数)

示例

$ yasboot election event show -c yashandb

 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

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