#yasboot election
与基于RAFT协议的自动选举不同,本模式是通过yasom仲裁,在主库故障的情况下,将备库切换为新的主库。
YashanDB仅支持在一主一备单机部署下进行仲裁选举。
# election enable on
本命令用于启用基于yasom的仲裁选举。
选项 | 含义 |
---|---|
-c, --cluster | 部署YashanDB的集群名(必传参数) |
Caution:
- 须保证yasom和备库的yasagent进程正常在线。
- 主备状态正常,并且主备保护模式相同(非零丢失模式下,仅支持最大性能和最大可用模式)。
- 开启仲裁选举会修改数据库心跳间隔和心跳超时参数,如果是零丢失模式,将设置主备为最大保护模式。
- 开启仲裁选举后,主库每次启动都会确认实际角色,如果需要降备,会直接启动为备库。确认实际角色需要连接到yasom,或者连接到备库,否则主库将启动失败。
- 零丢失模式下,yasom会自动管理数据库节点的保护模式。如果yasom不可用,有可能导致数据库节点保护模式无法变更,比如备机宕机时,主机的保护模式无法从最大保护变为最大可用,从而导致主机业务阻塞。
- 备机与yasom在同一台主机上时,不建议开启仲裁开关,可能存在风险(在零丢失模式下,当yasom和备机同时挂掉时主节点会产生业务阻塞);若需要该场景开启仲裁开关,请不要使用零丢失模式。
示例
$ yasboot election enable on -c yashandb
# election enable off
本命令用于禁用基于yasom的仲裁选举。
选项 | 含义 |
---|---|
-c, --cluster | 部署YashanDB的集群名(必传参数) |
-f, --force | 强制禁用,忽略离线的数据库节点的参数重置 |
Caution:
- 不使用--force选项时,会重置所有节点的选举参数,必须保证所有节点在线。
- 当某些节点离线时,可以使用--force选项,忽略离线节点的参数重置,后续需要手动重置该节点的参数OM_ELECTION_ENABLE为FALSE,否则数据库启动时,可能因为无法确认角色而启动失败。
- 禁用仲裁选举,不会还原开启仲裁选举前的心跳超时时间和保护模式。
示例
$ 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
其中:
- 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对应的值(必传参数) |
仲裁选举的参数如下:
参数名 | 默认值 | 取值范围 | 含义 |
---|---|---|---|
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 | 设置参数的名称(必传参数) |
示例
$ 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:
- 同一种事件最多保存5条,超出将淘汰老的事件。
- 在1分钟内,下发SQL处理失败3次后,将不再处理failover和need repair事件,后续的相同事件会被忽略,并在最近一次事件记录里增加Ignore字段的值。