#yasboot election
仲裁选主是在主备高可用部署的情况下,当主节点发生异常不能对外服务时,系统通过yasom仲裁,将备节点升为主节点,并将原主节点降为备节点。
YashanDB支持在如下部署模式下启用yasom仲裁,且仅在yasom和备节点的yasagent进程在线时生效,具体配置操作请查阅yasom仲裁选主。
单机一主一备部署
主备集群部署
DN组内节点为一主一备的存算一体分布式集群部署
Caution:
需开启操作系统认证(遵循标准安装步骤时默认已开启)才能正常使用yasom仲裁选主功能。
yasom仲裁选主与yasom自修复互斥,yasboot process yasom repair on时,无法使用yasom仲裁选主。
# election enable on
本命令用于启用基于yasom的仲裁选主。开启仲裁选主前,可通过election config set命令按需配置仲裁选主相关参数。
| 选项 | 含义 |
|---|---|
| -c, --cluster | 部署YashanDB的集群名(必传参数) |
| --group-ids | 组ID(可以通过yasboot cluster status命令查看,nodeid中短横线前的数值为group-id,例如1-1:1的组ID为1),多个ID间使用逗号分隔单机部署中本参数不生效;存算一体分布式集群部署中本参数不填写表示所有DN组 |
| -u, --username | 指定数据库用户,不指定则默认使用sys用户 |
| -p, --password | 数据库用户的密码 若使用sys用户且已开启操作系统认证(安装后默认开启)则无需指定密码 |
| -h,--help | 查看当前命令的帮助信息 |
Note:
开启前,须确保主备节点状态正常,且保护模式相同。
开启yasom仲裁选主会修改数据库的心跳间隔和心跳超时参数。
示例
$ yasboot election enable on -c yashandb
# election enable off
本命令用于禁用yasom仲裁选主。
| 选项 | 含义 |
|---|---|
| -c, --cluster | 部署YashanDB的集群名(必传参数) |
| --group-ids | 组ID(可以通过yasboot cluster status命令查看,nodeid中短横线前的数值为group-id,例如1-1:1的组ID为1),多个ID间使用逗号分隔单机部署中本参数不生效;存算一体分布式集群部署中本参数不填写表示所有DN组 |
| -f, --force | 强制禁用,忽略离线的数据库节点的参数重置。不使用--force选项关闭仲裁,会重置所有节点的选举参数,必须保证所有节点在线 |
| -u, --username | 指定数据库用户,不指定则默认使用sys用户 |
| -p, --password | 数据库用户的密码 若使用sys用户且已开启操作系统认证(安装后默认开启)则无需指定密码 |
| -h,--help | 查看当前命令的帮助信息 |
Note:
- 当某些节点离线时,可以使用--force选项,忽略离线节点的参数重置,后续需要手动重置该节点的参数OM_ELECTION_ENABLE为FALSE,否则数据库启动时,可能因为无法确认角色而启动失败。
- 禁用yasom仲裁选主,不会还原开启yasom仲裁选主前的心跳超时时间和保护模式。
示例
$ yasboot election enable off -c yashandb
$ yasboot election enable off --force -c yashandb
# election status
本命令用于展示仲裁选主的运行状态。
| 选项 | 含义 |
|---|---|
| -c, --cluster | 部署YashanDB的集群名(必传参数) |
| -node | 数据库节点 |
| --group-ids | 组ID(可以通过yasboot cluster status命令查看,nodeid中短横线前的数值为group-id,例如1-1:1的组ID为1),支持多个,使用逗号分隔单机部署中本参数不生效;存算一体分布式集群部署中本参数不填写表示所有DN组 |
| -u, --username | 指定数据库用户,不指定则默认使用sys用户 |
| -p, --password | 数据库用户的密码 若使用sys用户且已开启操作系统认证(安装后默认开启)则无需指定密码 |
| -h,--help | 查看当前命令的帮助信息 |
示例
$ yasboot election status -c yashandb
回显信息中的各字段含义如下表所示。
| 字段 | 含义 |
|---|---|
| group n cluster | 参与yasom仲裁的对象类型: - cluster:表示当前为集群级别的yasom仲裁,即环境为共享集群部署 - group n:表示当前为节点级别的yasom仲裁,即环境为单机部署或存算一体分布式集群部署,n为节点所属组的ID |
| Protection Mode | yasom记录的主节点保护模式。 |
| Members | 参与仲裁的节点/组信息,包括节点状态、节点角色、备节点传输延迟、回放延迟和回放速率等。 |
| Database Error(s) | 记录高可用相关异常,例如某个备库的redo日志与主库不匹配。 |
| Automatic Failover | yasom仲裁选主的开启状态: - DISABLED:yasom仲裁选主已关闭。 - Enabled in Potential Data Loss Mode:普通模式的yasom仲裁选主已开启。 - Enabled in Zero Data Loss Mode:零丢失模式的yasom仲裁选主已开启。 - Enabled in Zero Data Loss Mode (NOT ALLOWED):零丢失模式的yasom仲裁选主已开启,但数据库的保护模式不是最大保护,无法自动切换。 |
# election config set
本命令用于设置仲裁选主相关的参数,仅允许在仲裁选主未启用的情况下设置选举参数。
| 选项 | 含义 |
|---|---|
| -c, --cluster | YashanDB的集群名(必传参数) |
| -k, --key | 设置参数的名称(必传参数) |
| -v, -value | 设置参数key对应的值(必传参数) |
| --group-ids | 组ID(可以通过yasboot cluster status命令查看,nodeid中短横线前的数值为group-id,例如1-1:1的组ID为1),多个ID间使用逗号分隔单机部署中本参数不生效;存算一体分布式集群部署中本参数不填写表示所有DN组 |
| -h,--help | 查看当前命令的帮助信息 |
仲裁选主相关的参数如下表所示。
| 参数名 | 默认值 | 取值范围/格式 | 含义 |
|---|---|---|---|
| FailoverThreshold | 9 | [2, 1000] | 备节点心跳超时时间,到达该时间后,yasom将执行failover切换流程 |
| FailoverTarget | - 主:所有备(非级联备) - 备:主 | 格式为group|node n:(x,y,z…) | 指定备升主的目标候选组/节点及其优先级顺序 - group:用于标识后续配置的数值编号是组ID,适用于共享集群部署。可通过cluster status命令查看,nodeId短横线前的数值为组ID - node:用于标识后续配置的数值编号是节点ID,适用于单机部署、存算一体分布式集群部署。可通过cluster status命令查看,nodeId短横线前为节点ID - n:(x,y,z…):使用相应ID值指定具体的目标组/节点及其优先级顺序,优先级遵循配置时的先后顺序。若括号内置空n:()则表示将n从所有组/节点的FailoverTarget默认值中移除例如, node 1:(2,3)表示节点1的故障转移候选为节点2和节点3,且第一优先级为节点2 |
| 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
# 在共享集群中,需用组ID配置FailoverTarget参数
$ yasboot election config set -k FailoverTarget -v "group 1:(2,3)" -c yashandb
# 在单机部署、存算一体分布式集群部署中,需用节点ID配置FailoverTarget参数
$ yasboot election config set -k FailoverTarget -v "node 1:(2,3)" -c yashandb
# election config show
本命令用于展示仲裁选主的参数设置,条件切换配置和运行状态。
| 选项 | 含义 |
|---|---|
| -c, --cluster | 部署YashanDB的集群名(必传参数) |
| --group-ids | 组ID(可以通过yasboot cluster status命令查看,nodeid中短横线前的数值为group-id,例如1-1:1的组ID为1),多个ID间使用逗号分隔单机部署中本参数不生效;存算一体分布式集群部署中本参数不填写表示所有DN组 |
| -u, --username | 指定数据库用户,不指定则默认使用sys用户 |
| -p, --password | 数据库用户的密码 若使用sys用户且已开启操作系统认证(安装后默认开启)则无需指定密码 |
示例
$ yasboot election config show -c yashandb
回显信息中的各字段含义如下表所示。
| 字段 | 含义 |
|---|---|
| group n cluster | 参与yasom仲裁的对象类型: - cluster:表示当前为集群级别的yasom仲裁,即环境为共享集群部署 - group n:表示当前为节点级别的yasom仲裁,即环境为单机部署或存算一体分布式集群部署,n为节点所属组的ID |
| Protection Mode | yasom记录的主节点保护模式。 |
| Members | 参与仲裁的节点/组信息,包括节点状态、节点角色、备节点传输延迟、回放延迟和回放速率等。 |
| Database Error(s) | 记录高可用相关异常,例如某个备库的redo日志与主库不匹配。 |
| Properties | 当前已生效的参数信息。 |
| Configurable Failover Conditions | 主库的条件故障切换配置项,Health Conditions对应于主库的配置参数FAILOVER_HEALTH_CONDITION,Error Code Conditions对应于主库的配置参数FAILOVER_ERROR_CONDITION,并且只显示有效的错误码,更多详情请查阅配置条件故障切换。 |
| Automatic Failover | yasom仲裁选主的开启状态: - DISABLED:yasom仲裁已关闭。 - Enabled in Potential Data Loss Mode:普通模式的yasom仲裁选主已开启。 - Enabled in Zero Data Loss Mode:零丢失模式的yasom仲裁选主已开启。 - Enabled in Zero Data Loss Mode (NOT ALLOWED):零丢失模式的yasom仲裁选主已开启,但数据库的保护模式不是最大保护,无法自动切换。 |
# election config unset
本命令用于重置仲裁选主相关的参数为默认值。
| 选项 | 含义 |
|---|---|
| -c, --cluster | YashanDB的集群名(必传参数) |
| -k, --key | 设置参数的名称(必传参数) |
| --group-ids | 组ID(可以通过yasboot cluster status命令查看,nodeid中短横线前的数值为group-id,例如1-1:1的组ID为1),多个ID间使用逗号分隔单机部署中本参数不生效;存算一体分布式集群部署中本参数不填写表示所有DN组 |
| -h,--help | 查看当前命令的帮助信息 |
示例
$ yasboot election config unset -k FailoverThreshold -c yashandb
# election event show
本命令用于查看仲裁选主相关的事件,包括事件名、发生时间、处理时间以及处理是否成功等。
| 选项 | 含义 |
|---|---|
| -c, --cluster | YashanDB的集群名(必传参数) |
| --group-ids | 组ID(可以通过yasboot cluster status命令查看,nodeid中短横线前的数值为group-id,例如1-1:1的组ID为1),多个ID间使用逗号分隔单机部署中本参数不生效;存算一体分布式集群部署中本参数不填写表示所有DN组 |
| -h,--help | 查看当前命令的帮助信息 |
示例
$ 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处理need repair事件超过3次并且全部失败后,后续相同事件会被忽略,并在最近一次事件记录里增加ignore字段的值。当被忽略的事件超过1分钟不上报时,会重置忽略状态,下次将继续处理。
# election target show
本命令用于查看yasom仲裁选主的候选备库集配置(FailoverTarget参数)。
| 选项 | 含义 |
|---|---|
| -c, --cluster | 部署YashanDB的集群名(必传参数) |
示例
$ yasboot election target show -c yashandb
cluster
+------------------------------------+
| group id | target group id | seted |
+------------------------------------+
| 1 | 2 | false |
+----------+-----------------+-------+
| 2 | 1 | false |
+----------+ +-------+
| 3 | | true |
+----------+-----------------+-------+
seted字段用于标识该配置是否为手动配置:
seted = true表示该配置项由用户手动配置。
seted = false表示该配置项取值为系统默认值。

