#yasom仲裁选主配置

在分布式集群DN组一主一备部署形态下,可以使用基于yasom进程的仲裁选主功能保障业务连续性,当主节点发生异常不能对外服务时,系统通过yasom仲裁将备节点升为主节点,并将原主节点降为备节点。

每个DN组的仲裁选主可以独立配置和开启,每组DN之间的仲裁选主互不影响。

# 功能介绍

开启仲裁选主后,主节点启动前会连接yasom或备节点确认实际角色,若连接失败则主节点启动失败。如需降备,原主节点会直接以备节点角色启动。正常运行中,yasom进程会对数据库状态进行监控,当主节点出现故障时,在备节点执行failover;当备节点出现故障最大保护模式下主节点业务阻塞时,将主节点保护模式降级。

仲裁选主仅在yasom和备节点的yasagent进程在线时生效。

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

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

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

# 配置步骤

# 步骤1:准备分布式高可用环境

部署分布式集群且DN组为一主一备的高可用环境,可以参考安装部署中所述的分布式部署步骤直接安装高可用环境,环境搭建过程中需注意:

  • DN组备节点数量仅允许1个。

  • DN组主备节点的各项资源参数建议报错一致,主备节点所安装的数据库版本必须一致。

  • 需开启操作系统身份认证(遵循标准安装步骤时默认已开启),才能正常使用仲裁选主功能。

  • 建议将yasom部署在独立的服务器,不要与DN组的主/备节点部署在同一服务器。

Caution

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

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

部署成功后,检查数据库状态。

$ yasboot cluster status -c yashandb -d
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| hostid   | node_type | nodeid | pid   | instance_status | database_status | database_role | listen_address   | data_path                        |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| host0001 | mn        | 1-1:1  | 56961 | open            | normal          | primary       | 192.168.1.2:1678 | /data/yashan/yasdb_data/mn-1-1   |
|          +-----------+--------+-------+-----------------+-----------------+---------------+------------------+----------------------------------+
|          | dn        | 3-2:7  | 57029 | open            | normal          | standby       | 192.168.1.2:1698 | /data/yashan/yasdb_data/dn-3-2   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+------------------+----------------------------------+
| host0002 | mn        | 1-2:2  | 57024 | open            | normal          | standby       | 192.168.1.3:1678 | /data/yashan/yasdb_data/mn-1-2   |
|          +-----------+--------+-------+-----------------+-----------------+---------------+------------------+----------------------------------+
|          | cn        | 2-1:4  | 57024 | open            | normal          | primary       | 192.168.1.3:1688 | /data/yashan/yasdb_data/cn-2-1   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+------------------+----------------------------------+
| host0003 | mn        | 1-3:3  | 57021 | open            | normal          | standby       | 192.168.1.4:1678 | /data/yashan/yasdb_data/mn-1-3   |
|          +-----------+--------+-------+-----------------+-----------------+---------------+------------------+----------------------------------+
|          | cn        | 2-2:5  | 57021 | open            | normal          | primary       | 192.168.1.4:1688 | /data/yashan/yasdb_data/cn-2-2   |
|          +-----------+--------+-------+-----------------+-----------------+---------------+------------------+----------------------------------+
|          | dn        | 3-1:6  | 57021 | open            | normal          | primary       | 192.168.1.4:1698 | /data/yashan/yasdb_data/dn-3-1   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+------------------+----------------------------------+

# 步骤2:配置仲裁选主参数

仲裁选主的参数如下:

参数名 默认值 取值范围 含义
FailoverThreshold 9 [2,1000] 备节点心跳超时时间(单位:秒),到达该时间后,yasom将执行failover切换流程
FailoverAutoReinstate false true/false 是否启用自动脑裂修复。
启用后,如果备节点发生脑裂处于NEED REPAIR状态,yasom将尝试自动修复
ZeroDataLossMode true true/false 是否启用零丢失模式。
启用后,将设置主备为最大保护模式,当主节点宕机时,备节点可自动failover;当备节点异常时,主节点将由yasom降级为最大可用模式并禁止自动failover,直到备节点恢复同步后,yasom重新将主节点升级为最大保护模式并允许自动failover
  1. 执行如下命令,配置仲裁选主参数:
# 本文仅为示例值,请根据实际需求调整
$ yasboot election config set -k FailoverThreshold -v 5 -c yashandb
$ yasboot election config set -k ZeroDataLossMode -v true -c yashandb
  1. 查看仲裁选主参数是否配置正确,数据库状态是否正常:
$ yasboot election config show -c yashandb

group 3
  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  = false
    ZeroDataLossMode       = true

Automatic Failover: DISABLED

根据返回信息可知,仲裁选主相关参数已生效,并且主备状态正常,没有显示告警。

# 步骤3:开启仲裁选主

开启仲裁选主前需确保主备节点状态均正常且保护模式相同。

  1. 执行如下命令,开启仲裁选主:
$ yasboot election enable on -c yashandb
  1. 查看仲裁选主状态:
$ yasboot election config show -c yashandb

group 3
  Protection Mode: MAXIMUM PROTECTION
  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  = false
    ZeroDataLossMode       = true

Automatic Failover: Enabled in Zero Data Loss Mode

根据返回信息,“Enabled in Zero Data Loss Mode”表示已在零丢失模式下开启仲裁选主,主备的保护模式会自动改为最大保护,此状态下允许自动failover(如果主节点发生故障,备节点会自动failover升主)。

在当前配置下,数据库对故障的表现为:

  • 当备节点发生故障时,yasom会将主节点的保护模式改为最大可用,防止业务阻塞,同时将禁止自动failover(因为最大可用模式存在数据丢失风险)。直到备节点恢复正常,主备同步完成后,yasom将主节点的保护模式恢复为最大保护并允许自动failover。

  • 当主节点发生故障时,yasom会检测备节点是否连接超时,当时长超过FailoverThreshold参数值时,yasom将下发failover指令给备节点,让其升主。

  • 旧主节点宕机后重启时,会与yasom确认角色,如果确认已有新的主节点,旧主节点将以备节点角色启动。

# 常见问题

# 如何配置和管理某几个DN组的仲裁选主?

在yasboot election的命令中使用--group-ids可以指定DN组,不指定该参数选项表示对所有DN组生效。

# 如何查看仲裁选主记录?

使用yasboot election event命令可以查看仲裁选举的记录,包括failover、保护模式切换、脑裂修复以及数据库启动角色确认等。

# 仲裁选举启动失败该如何处理?

开启仲裁选举功能的前提是DN组主备节点状态正常。若功能启动失败,请检查DN组主备节点连接状态,以及每个数据库V$DATABASE的STATUS是否为NORMAL。如果数据库不正常,请通过查询V$DIAG_INCIDENT,查看告警日志,运行日志等定位,常见的故障可能有磁盘空间不足,网络故障等。

# 为什么无法切换到最大保护模式?

切换到最大保护模式时要求主节点的redo已完全同步给备节点。如果备节点故障或备节点redo接收速度慢,都会导致redo无法同步,请检查备节点状态是否正常,网络带宽是否充足,并保证足够的备节点的硬件资源。

# 备节点Apply Lag越来越大该怎么处理?

备节点回放速度慢,跟不上主节点redo产生速度时,备节点Apply Lag会越来越大。请保证备节点拥有足够的硬件资源(不要远低于主节点的资源),包括CPU、内存以及磁盘性能等。也可以尝试修改并行参数,提高并行度。

# 主节点故障后,长时间无法升主的可能原因有哪些?

  • 可能是备节点回放速度慢,有大量的redo等待回放。可以通过查询V$DATABASE的switchover_status确认备节点是否在升主,如果是,请等待redo回放完毕。

  • 备节点状态异常,不可升主。检查是否出现need repair、是否磁盘空间满。

  • 零丢失模式下,如果数据库处于最大可用模式是禁止自动failover的,如需强制failover,请强制关闭yasom仲裁后手动执行failover。

# 强制关闭yasom仲裁后,主节点重启报确认角色失败该怎么处理?

强制关闭yasom仲裁选主功能时会尝试重置每个数据库上的OM_ELECTION_ENABLE参数,如果数据库不可访问,会导致参数残留。该主节点重启后,无法通过yasom确认角色,会启动失败。

请手动修改主备的OM_ELECTION_ENABLE参数。

# 使用yasboot stop命令关闭主节点后备节点不会自动升主,但为什么使用SQL语句关闭主节点后备节点会自动升主?

yasom会将通过yasboot下发stop、restart等命令视作用户主动发起的运维操作而非故障场景,因此不会下发failover命令升主。如果直接使用SQL语句关闭数据库,因yasom无法感知,会将其一律视作故障场景,从而触发自动选主。

在启用yasom仲裁选主功能后,建议使用yasboot命令进行节点启停等运维操作,避免不必要的故障切换。

edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流