#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字段的值。