YashanDB 仲裁选主功能配置与管理指南
功能概述
YashanDB 仲裁选主(Election)功能是基于 yasom 进程实现的高可用自动故障切换机制,适用于一主一备部署架构。当主库发生故障无法提供服务时,系统通过 yasom 协调将备库升级为主库,同时将原主库降级为备库,实现快速故障恢复,保障业务连续性。
核心特性
- 自动故障转移:主库宕机后,备库可自动升级为新主库
- 角色确认机制:主库重启时需向
yasom确认角色,有效避免脑裂 - 智能保护模式:
- 零数据丢失模式:确保 RPO=0,对备库状态要求严格
- 普通模式:提供更灵活的切换策略,可能存在少量数据丢失
重要提示:仲裁选主功能仅在
yasom和备库的yasagent进程均正常运行状态下生效。
环境要求
前置条件
- 部署架构:一主一备部署,备库数量仅允许1个
- 版本一致性:主备库数据库版本必须一致
- 资源配置:主备库各项资源参数建议保持一致
- 身份认证:需开启操作系统身份认证(默认安装时已开启)
- 部署建议:建议将 yasom 部署在独立服务器,不与主/备库同机部署
命令详解
1. 启用仲裁选主功能
yasboot election enable on -c <cluster_name>
使用示例:
yasboot election enable on -c yashandb
# 验证启用状态
yasboot election config show -c yashandb
2. 禁用仲裁选主功能
yasboot election enable off -c <cluster_name>
使用示例:
# 正常关闭
yasboot election enable off -c yashandb
# 强制关闭(适用于节点离线情况)
yasboot election enable off --force -c yashandb
# 验证关闭状态
yasboot election config show -c yashandb
3. 查看仲裁状态
yasboot election status -c <cluster_name>
输出内容:
- Protection Mode:主节点保护模式
- Members:各节点角色、状态、延迟信息
- Automatic Failover:仲裁状态(DISABLED/Enabled in…)
4. 查看仲裁配置
yasboot election config show -c <cluster_name>
关键配置信息:
- Properties:当前生效参数值
- Configurable Failover Conditions:配置条件选主设置
- Automatic Failover:仲裁功能状态
5. 设置仲裁参数
yasboot election config set -k <key> -v <value> -c <cluster_name>
支持参数:
| 参数名 | 默认值 | 取值范围 | 功能说明 |
|---|---|---|---|
FailoverThreshold |
9 | [2, 1000] | 心跳超时时间(秒) |
FailoverAutoReinstate |
false | true/false | 脑裂自动修复开关 |
ZeroDataLossMode |
true | true/false | 零数据丢失模式开关 |
6. 重置仲裁参数
yasboot election config unset -k <key> -c <cluster_name>
7. 查看仲裁事件记录
yasboot election event show -c <cluster_name>
事件类型:failover、confirm role、need repair、protection demote/promote
条件故障切换配置流程
步骤一:环境检查
# 检查集群状态
yasboot cluster status -c yashandb -d
步骤二:配置条件故障切换
健康条件配置
方法1:使用 yasboot(推荐)
yasboot group config set --key FAILOVER_HEALTH_CONDITION \
--value CORRUPTED_CONTROLFILE,INACCESSIBLE_LOGFILE,STUCK_ARCHIVER,DATAFILE_WRITE_ERRORS,DATAFILE_NO_SPACE,SLICE_NO_SPACE \
--cluster yashandb --group-id 1
方法2:使用 yasql
ALTER SYSTEM SET FAILOVER_HEALTH_CONDITION = 'CORRUPTED_CONTROLFILE,INACCESSIBLE_LOGFILE,STUCK_ARCHIVER,DATAFILE_WRITE_ERRORS,DATAFILE_NO_SPACE,SLICE_NO_SPACE' SCOPE = BOTH;
# 验证配置
show parameter FAILOVER_HEALTH_CONDITION;
可配置的健康条件:
CORRUPTED_CONTROLFILE:主库写控制文件失败INACCESSIBLE_LOGFILE:主库写redo文件失败STUCK_ARCHIVER:归档磁盘满导致redo归档失败DATAFILE_WRITE_ERRORS:主库写脏页失败DATAFILE_NO_SPACE:磁盘满导致数据文件写入失败SLICE_NO_SPACE:磁盘满导致slice文件写入失败
错误码条件配置
方法1:使用 yasboot(推荐)
yasboot group config set --key FAILOVER_ERROR_CONDITION \
--value 00109,00301-28 \
--cluster yashandb --group-id 1
方法2:使用 yasql
ALTER SYSTEM SET FAILOVER_ERROR_CONDITION = '00109, 00301-28' SCOPE = BOTH;
错误码触发示例
-- 构造触发错误码00109的场景
CREATE USER regress IDENTIFIED BY regress;
GRANT DBA TO regress;
CONN regress/regress;
DROP TABLE IF EXISTS tab_om_condition;
CREATE TABLE tab_om_condition(
area_no CHAR(2),
id INT,
area VARCHAR(50),
price FLOAT,
name VARCHAR(50)
);
CREATE OR REPLACE TRIGGER trig_om_condition
BEFORE INSERT ON tab_om_condition
FOR EACH ROW
BEGIN
INSERT INTO tab_om_condition VALUES(2, 12, 'shanghai', '100', 'test');
END;
/
-- 期望触发YAS-00109错误
INSERT INTO tab_om_condition VALUES(1, 1, 'shanghai', '100', 'test');
步骤三:启用仲裁功能
yasboot election enable on -c yashandb
步骤四:验证配置
# 查看仲裁状态
yasboot election status -c yashandb
# 预期输出示例
# group 1
# Protection Mode: MAXIMUM PROTECTION
# Members:
# [1-1:1] - Primary database
# [1-2:2] - Physical standby database
# Transport Lag: 0 seconds
# Apply Lag: 0 seconds
# Apply Rate: 0.00 KByte/s
#
# Automatic Failover: Enabled in Zero Data Loss Mode
# 查看仲裁配置
yasboot election config show -c yashandb
# 预期输出示例
# group 1
# Protection Mode: MAXIMUM PROTECTION
# Members:
# [1-2:2] - Primary database
# [1-1:1] - Physical standby database
# Transport Lag: 0 seconds
# Apply Lag: 0 seconds
# Apply Rate: 5.81 MByte/s
#
# Properties:
# FailoverThreshold = 9
# FailoverAutoReinstate = false
# ZeroDataLossMode = true
#
# Configurable Failover Conditions:
# Health Conditions:
# CORRUPTED_CONTROLFILE = YES
# INACCESSIBLE_LOGFILE = YES
# STUCK_ARCHIVER = YES
# DATAFILE_WRITE_ERRORS = YES
# DATAFILE_NO_SPACE = YES
# SLICE_NO_SPACE = YES
# Error Code Conditions:
# YAS-00109: work stack overflow, try to push %d bytes
# YAS-00301 (errno 28): file operation "%s" failed, %s
#
# Automatic Failover: Enabled in Zero Data Loss Mode
触发机制说明
触发条件
- 健康条件触发:数据库检测到配置的健康异常条件
- 错误码触发:数据库遇到配置的特定错误码
- 心跳超时触发:备库检测到主库心跳超时(超过FailoverThreshold设定值)
触发流程
- yasagent 检测到触发条件后,向 yasom 报告主库异常
- yasom 协调备库进行选举,选择最合适的备库升为主库
- 新主库开始提供服务,原主库被降级为备库
- 整个过程通常在秒级完成
常见问题处理
Q1:仲裁功能启动失败
- 检查主备库连接状态
- 确认
V$DATABASE.STATUS为NORMAL - 排查网络或存储问题
Q2:无法切换到最大保护模式
- 确保备库同步正常
- 检查无网络瓶颈或存储空间不足
Q3:主库故障后无法切换
- 检查备库
Apply Lag是否过大 - 确认备库未处于
NEED REPAIR状态 - 检查零丢失模式下主库保护模式设置
Q4:强制关闭后主库启动失败
- 检查并手动调整主备库的
OM_ELECTION_ENABLE参数
最佳实践建议
- 测试验证:生产环境部署前,在测试环境充分验证所有配置
- 定期检查:定期检查仲裁状态和事件日志,确保高可用机制正常
- 监控告警:设置关键指标监控和告警,如心跳延迟、同步状态等
- 文档维护:保持配置变更记录,便于故障排查和审计
注意:本文档基于 YashanDB 23.4.1 版本,不同版本可能存在功能差异,请以实际版本文档为准。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




