外观
OceanBase 手动切换
手动切换场景
计划性维护
- 节点维护:对主节点进行硬件升级、软件更新等维护操作
- 可用区维护:对主可用区进行网络升级、电力维护等操作
- 集群升级:进行集群版本升级、配置变更等操作
故障处理
- 预判性故障:发现主节点存在潜在故障,提前进行切换
- 自动切换失败:自动故障切换失败时,手动进行切换
- 网络分区:发生网络分区时,手动切换到可用分区
性能优化
- 负载均衡:当主节点负载过高时,切换到负载较低的节点
- 就近访问:根据业务访问模式,切换主可用区到离业务更近的位置
- 资源调整:调整资源分配后,切换到新的主节点
手动切换类型
副本级切换
- 单个分区切换:切换单个分区的主副本到指定节点
- 表级切换:切换整个表的主副本到指定节点
- 数据库级切换:切换整个数据库的主副本到指定节点
可用区级切换
- primary zone 切换:切换租户的 primary zone 到指定可用区
- 全可用区切换:将所有租户的 primary zone 切换到指定可用区
集群级切换
- 主备集群切换:在双活或灾备架构中,切换到备集群
- 集群角色切换:切换集群的主备角色
手动切换操作
副本级切换
sql
-- 切换单个分区的主副本
ALTER SYSTEM SWITCH PARTITION partition_name OF table_name TO 'server_ip:port';
-- 切换表的主副本
ALTER SYSTEM SWITCH TABLE table_name TO 'server_ip:port';
-- 切换数据库的主副本
ALTER SYSTEM SWITCH DATABASE db_name TO 'server_ip:port';可用区级切换
sql
-- 切换租户的 primary zone
ALTER TENANT tenant_name SET primary_zone = 'new_zone_list';
-- 示例:将租户的 primary zone 从 zone1 切换到 zone2
ALTER TENANT tenant_name SET primary_zone = 'zone2';
-- 示例:将租户的 primary zone 切换到多个可用区
ALTER TENANT tenant_name SET primary_zone = 'zone2,zone3,zone1';集群级切换
sql
-- 在双活架构中切换主备集群
ALTER SYSTEM SWITCH CLUSTER TO 'cluster_name';
-- 切换集群的主备角色
ALTER SYSTEM SWITCH CLUSTER ROLE TO 'standby';查看切换状态
sql
-- 查看租户的当前 primary zone
SELECT tenant_name, primary_zone FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'tenant_name';
-- 查看分区的主副本分布
SELECT * FROM oceanbase.DBA_OB_PARTITION_LOCATIONS WHERE table_name = 'table_name';
-- 查看切换操作的历史记录
SELECT * FROM oceanbase.DBA_OB_EVENT_HISTORY WHERE event_type = 'switch' ORDER BY gmt_create DESC;手动切换最佳实践
切换前准备
- 评估切换影响:评估切换对业务的影响,制定详细的切换计划
- 备份数据:在切换前进行数据备份,确保数据安全
- 通知相关方:通知业务方、运维团队等相关人员
- 准备回滚方案:制定详细的回滚方案,确保切换失败时可以快速恢复
- 检查系统状态:检查集群、节点、副本的状态,确保系统正常
切换过程
- 避开业务高峰期:选择业务低峰期进行切换,减少对业务的影响
- 逐步切换:对于大型集群,建议逐步切换,避免一次性切换带来的风险
- 监控切换过程:密切监控切换过程中的系统状态、性能指标和业务指标
- 验证切换结果:切换完成后,验证业务是否正常,数据是否一致
- 记录切换过程:详细记录切换过程、时间、操作和结果
切换后验证
- 验证业务连续性:确保业务能够正常访问,没有中断
- 验证数据一致性:验证切换前后数据一致,没有丢失
- 验证性能指标:验证系统性能正常,没有明显下降
- 验证主备状态:验证新的主节点、主可用区或主集群状态正常
- 通知相关方:通知相关人员切换完成,业务恢复正常
手动切换注意事项
风险防控
- 避免频繁切换:频繁切换可能导致系统不稳定,影响业务性能
- 确保足够的副本数:切换前确保有足够的可用副本,避免数据丢失
- 检查网络连接:确保切换目标节点的网络连接正常
- 监控资源使用:确保切换目标节点有足够的资源处理业务负载
- 遵循最小影响原则:尽量减少切换对业务的影响
性能优化
- 优化切换顺序:根据业务优先级,先切换非核心业务,再切换核心业务
- 优化切换时间:选择业务低峰期进行切换,减少对业务的影响
- 优化切换速度:根据系统规模和业务需求,调整切换速度
- 优化资源配置:确保切换目标节点有足够的资源处理业务负载
安全考虑
- 严格权限控制:只有具有切换权限的管理员才能执行切换操作
- 记录操作日志:详细记录切换操作的时间、人员、操作内容和结果
- 验证操作结果:切换完成后,验证操作结果是否符合预期
- 准备应急方案:制定详细的应急方案,应对切换过程中可能出现的问题
常见问题(FAQ)
Q1: 手动切换会导致数据丢失吗?
A1: 正常情况下,手动切换不会导致数据丢失。OceanBase 基于 Paxos 协议实现数据一致性,切换过程中会确保数据同步完成。但在极端情况下,如网络分区或节点故障,可能会导致数据丢失。建议在切换前进行数据备份。
Q2: 手动切换需要多长时间?
A2: 手动切换的时间取决于集群规模、数据量和网络环境。一般来说:
- 副本级切换:几秒到几分钟
- 可用区级切换:几分钟到几十分钟
- 集群级切换:几十分钟到几小时
Q3: 如何回滚手动切换?
A3: 可以通过以下方式回滚手动切换:
- 重新执行切换操作,切换回原来的主节点、主可用区或主集群
- 如果切换过程中出现问题,可以执行回滚命令
- 按照预先制定的回滚方案进行操作
sql
-- 回滚可用区级切换
ALTER TENANT tenant_name SET primary_zone = 'original_zone_list';Q4: 手动切换和自动切换有什么区别?
A4: 手动切换和自动切换的主要区别:
- 触发方式:手动切换由管理员主动触发,自动切换由系统自动触发
- 适用场景:手动切换适用于计划性维护、预判性故障等场景,自动切换适用于突发故障场景
- 可控性:手动切换可控性更高,可以在合适的时间进行,自动切换响应更快,但可控性较低
- 影响范围:手动切换可以精确控制影响范围,自动切换影响范围较大
Q5: 如何优化手动切换的性能?
A5: 可以通过以下方式优化手动切换的性能:
- 优化网络配置,减少网络延迟
- 确保目标节点有足够的资源
- 调整切换速度参数
- 避开业务高峰期
- 逐步切换,避免一次性切换带来的压力
sql
-- 调整切换速度
ALTER SYSTEM SET switch_speed = 50;