外观
OceanBase 自动故障切换
自动故障切换原理
Paxos 一致性协议
OceanBase 基于 Paxos 协议实现数据一致性和自动故障切换。每个副本组通过 Paxos 选举产生主副本,当主副本不可用时,剩余副本会重新选举新的主副本。
故障检测机制
- 心跳检测:节点间通过定期发送心跳包检测存活状态
- 服务可用性检测:检测 SQL 服务、事务服务等核心服务是否正常
- 磁盘健康检测:监控磁盘 I/O、空间使用等状态
- 网络连通性检测:检测节点间网络延迟和连通性
故障切换流程
- 故障检测:通过心跳或服务检测发现主节点故障
- 状态确认:多次确认故障状态,避免误判
- 新主选举:通过 Paxos 协议选举新的主副本
- 角色切换:新主副本接管业务请求
- 同步追赶:新主副本与其他副本同步数据
- 服务恢复:对外提供正常的数据库服务
自动故障切换配置
启用自动故障切换
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 | 是否启用自动故障切换 | false | true |
| server_check_interval | 节点健康检查间隔(毫秒) | 5000 | 5000 |
| server_down_time | 节点判定为宕机的时间(毫秒) | 10000 | 10000 |
| election_timeout | 选举超时时间(毫秒) | 5000 | 5000 |
| max_election_retry_times | 最大选举重试次数 | 3 | 5 |
| observer_reconnect_interval | 节点重连间隔(毫秒) | 10000 | 10000 |
自动故障切换操作
查看自动故障切换状态
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';自动故障切换最佳实践
配置建议
- 合理设置超时参数:根据网络环境和集群规模调整故障检测和选举超时时间
- 确保足够的副本数量:建议每个分区至少配置 3 个副本,分布在不同的可用区
- 配置适当的 primary zone:根据业务需求配置 primary zone,如全可用区或指定可用区
- 启用自动平衡:确保副本分布均匀,提高故障切换的可靠性
监控与告警
- 监控故障切换事件:通过 OCP 或内置视图监控故障切换事件
- 设置告警规则:对频繁的故障切换设置告警,及时排查根本原因
- 定期演练:定期进行故障切换演练,验证自动故障切换的可靠性
性能优化
- 优化网络延迟:确保节点间网络延迟低且稳定,减少故障检测时间
- 合理配置资源:确保每个节点有足够的资源处理故障切换后的业务负载
- 优化 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: 自动故障切换失败时,可以尝试以下操作:
- 检查节点状态和网络连通性
- 查看 OceanBase 日志,分析故障原因
- 手动触发故障切换
- 如问题仍然存在,联系 OceanBase 技术支持
Q4: 如何避免误触发自动故障切换?
A4: 可以通过以下方式避免误触发:
- 合理设置故障检测超时时间,避免网络抖动导致误判
- 在进行维护操作前,临时禁用自动故障切换
- 确保监控系统准确可靠,及时发现并处理潜在问题
Q5: 自动故障切换的切换时间是多少?
A5: 自动故障切换的切换时间主要取决于以下因素:
- 故障检测时间(默认 10 秒)
- Paxos 选举时间(默认 5 秒)
- 数据同步时间(取决于数据量和网络状况)
一般情况下,自动故障切换的总时间在 15-30 秒之间。
