Skip to content

OceanBase 自动故障切换

自动故障切换原理

Paxos 一致性协议

OceanBase 基于 Paxos 协议实现数据一致性和自动故障切换。每个副本组通过 Paxos 选举产生主副本,当主副本不可用时,剩余副本会重新选举新的主副本。

故障检测机制

  • 心跳检测:节点间通过定期发送心跳包检测存活状态
  • 服务可用性检测:检测 SQL 服务、事务服务等核心服务是否正常
  • 磁盘健康检测:监控磁盘 I/O、空间使用等状态
  • 网络连通性检测:检测节点间网络延迟和连通性

故障切换流程

  1. 故障检测:通过心跳或服务检测发现主节点故障
  2. 状态确认:多次确认故障状态,避免误判
  3. 新主选举:通过 Paxos 协议选举新的主副本
  4. 角色切换:新主副本接管业务请求
  5. 同步追赶:新主副本与其他副本同步数据
  6. 服务恢复:对外提供正常的数据库服务

自动故障切换配置

启用自动故障切换

sql
-- 启用集群级别的自动故障切换
ALTER SYSTEM SET enable_auto_failover = 'true';

-- 配置故障检测超时时间(单位:毫秒)
ALTER SYSTEM SET server_check_interval = 5000;
ALTER SYSTEM SET server_down_time = 10000;

-- 配置副本选举超时时间
ALTER SYSTEM SET election_timeout = 5000;

调整故障切换参数

参数名描述默认值建议值
enable_auto_failover是否启用自动故障切换falsetrue
server_check_interval节点健康检查间隔(毫秒)50005000
server_down_time节点判定为宕机的时间(毫秒)1000010000
election_timeout选举超时时间(毫秒)50005000
max_election_retry_times最大选举重试次数35
observer_reconnect_interval节点重连间隔(毫秒)1000010000

自动故障切换操作

查看自动故障切换状态

sql
-- 查看集群级自动故障切换配置
SHOW PARAMETERS LIKE '%auto_failover%';

-- 查看节点状态
SELECT * FROM oceanbase.DBA_OB_SERVERS;

-- 查看副本状态
SELECT * FROM oceanbase.DBA_OB_PARTITION_LOCATIONS;

手动触发故障切换

在某些情况下,可能需要手动触发故障切换:

sql
-- 强制切换指定分区的主副本到指定服务器
ALTER SYSTEM SWITCH PRIMARY ZONE FOR TENANT tenant_name TO 'zone_name';

-- 强制切换所有分区的主副本
ALTER SYSTEM FORCE REBALANCE;

禁用自动故障切换

在进行维护操作时,可能需要临时禁用自动故障切换:

sql
-- 临时禁用自动故障切换
ALTER SYSTEM SET enable_auto_failover = 'false';

-- 维护完成后重新启用
ALTER SYSTEM SET enable_auto_failover = 'true';

自动故障切换最佳实践

配置建议

  1. 合理设置超时参数:根据网络环境和集群规模调整故障检测和选举超时时间
  2. 确保足够的副本数量:建议每个分区至少配置 3 个副本,分布在不同的可用区
  3. 配置适当的 primary zone:根据业务需求配置 primary zone,如全可用区或指定可用区
  4. 启用自动平衡:确保副本分布均匀,提高故障切换的可靠性

监控与告警

  1. 监控故障切换事件:通过 OCP 或内置视图监控故障切换事件
  2. 设置告警规则:对频繁的故障切换设置告警,及时排查根本原因
  3. 定期演练:定期进行故障切换演练,验证自动故障切换的可靠性

性能优化

  1. 优化网络延迟:确保节点间网络延迟低且稳定,减少故障检测时间
  2. 合理配置资源:确保每个节点有足够的资源处理故障切换后的业务负载
  3. 优化 Paxos 配置:根据集群规模调整 Paxos 相关参数

常见问题(FAQ)

Q1: 自动故障切换可能会导致数据丢失吗?

A1: 不会。OceanBase 基于 Paxos 协议实现数据一致性,只有当大多数副本确认数据已写入后,才会对外返回成功。故障切换时,新主副本会确保与其他副本同步数据后再提供服务。

Q2: 如何查看历史故障切换记录?

A2: 可以通过以下方式查看历史故障切换记录:

sql
-- 查看 OceanBase 内置的事件日志
SELECT * FROM oceanbase.DBA_OB_EVENT_HISTORY WHERE event_type = 'failover' ORDER BY gmt_create DESC;

-- 查看 OCP 中的故障切换记录
-- 登录 OCP 控制台,进入集群详情页,查看事件日志

Q3: 自动故障切换失败时如何处理?

A3: 自动故障切换失败时,可以尝试以下操作:

  1. 检查节点状态和网络连通性
  2. 查看 OceanBase 日志,分析故障原因
  3. 手动触发故障切换
  4. 如问题仍然存在,联系 OceanBase 技术支持

Q4: 如何避免误触发自动故障切换?

A4: 可以通过以下方式避免误触发:

  1. 合理设置故障检测超时时间,避免网络抖动导致误判
  2. 在进行维护操作前,临时禁用自动故障切换
  3. 确保监控系统准确可靠,及时发现并处理潜在问题

Q5: 自动故障切换的切换时间是多少?

A5: 自动故障切换的切换时间主要取决于以下因素:

  • 故障检测时间(默认 10 秒)
  • Paxos 选举时间(默认 5 秒)
  • 数据同步时间(取决于数据量和网络状况)

一般情况下,自动故障切换的总时间在 15-30 秒之间。