Skip to content

OceanBase 手动切换

手动切换场景

计划性维护

  1. 节点维护:对主节点进行硬件升级、软件更新等维护操作
  2. 可用区维护:对主可用区进行网络升级、电力维护等操作
  3. 集群升级:进行集群版本升级、配置变更等操作

故障处理

  1. 预判性故障:发现主节点存在潜在故障,提前进行切换
  2. 自动切换失败:自动故障切换失败时,手动进行切换
  3. 网络分区:发生网络分区时,手动切换到可用分区

性能优化

  1. 负载均衡:当主节点负载过高时,切换到负载较低的节点
  2. 就近访问:根据业务访问模式,切换主可用区到离业务更近的位置
  3. 资源调整:调整资源分配后,切换到新的主节点

手动切换类型

副本级切换

  1. 单个分区切换:切换单个分区的主副本到指定节点
  2. 表级切换:切换整个表的主副本到指定节点
  3. 数据库级切换:切换整个数据库的主副本到指定节点

可用区级切换

  1. primary zone 切换:切换租户的 primary zone 到指定可用区
  2. 全可用区切换:将所有租户的 primary zone 切换到指定可用区

集群级切换

  1. 主备集群切换:在双活或灾备架构中,切换到备集群
  2. 集群角色切换:切换集群的主备角色

手动切换操作

副本级切换

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;

手动切换最佳实践

切换前准备

  1. 评估切换影响:评估切换对业务的影响,制定详细的切换计划
  2. 备份数据:在切换前进行数据备份,确保数据安全
  3. 通知相关方:通知业务方、运维团队等相关人员
  4. 准备回滚方案:制定详细的回滚方案,确保切换失败时可以快速恢复
  5. 检查系统状态:检查集群、节点、副本的状态,确保系统正常

切换过程

  1. 避开业务高峰期:选择业务低峰期进行切换,减少对业务的影响
  2. 逐步切换:对于大型集群,建议逐步切换,避免一次性切换带来的风险
  3. 监控切换过程:密切监控切换过程中的系统状态、性能指标和业务指标
  4. 验证切换结果:切换完成后,验证业务是否正常,数据是否一致
  5. 记录切换过程:详细记录切换过程、时间、操作和结果

切换后验证

  1. 验证业务连续性:确保业务能够正常访问,没有中断
  2. 验证数据一致性:验证切换前后数据一致,没有丢失
  3. 验证性能指标:验证系统性能正常,没有明显下降
  4. 验证主备状态:验证新的主节点、主可用区或主集群状态正常
  5. 通知相关方:通知相关人员切换完成,业务恢复正常

手动切换注意事项

风险防控

  1. 避免频繁切换:频繁切换可能导致系统不稳定,影响业务性能
  2. 确保足够的副本数:切换前确保有足够的可用副本,避免数据丢失
  3. 检查网络连接:确保切换目标节点的网络连接正常
  4. 监控资源使用:确保切换目标节点有足够的资源处理业务负载
  5. 遵循最小影响原则:尽量减少切换对业务的影响

性能优化

  1. 优化切换顺序:根据业务优先级,先切换非核心业务,再切换核心业务
  2. 优化切换时间:选择业务低峰期进行切换,减少对业务的影响
  3. 优化切换速度:根据系统规模和业务需求,调整切换速度
  4. 优化资源配置:确保切换目标节点有足够的资源处理业务负载

安全考虑

  1. 严格权限控制:只有具有切换权限的管理员才能执行切换操作
  2. 记录操作日志:详细记录切换操作的时间、人员、操作内容和结果
  3. 验证操作结果:切换完成后,验证操作结果是否符合预期
  4. 准备应急方案:制定详细的应急方案,应对切换过程中可能出现的问题

常见问题(FAQ)

Q1: 手动切换会导致数据丢失吗?

A1: 正常情况下,手动切换不会导致数据丢失。OceanBase 基于 Paxos 协议实现数据一致性,切换过程中会确保数据同步完成。但在极端情况下,如网络分区或节点故障,可能会导致数据丢失。建议在切换前进行数据备份。

Q2: 手动切换需要多长时间?

A2: 手动切换的时间取决于集群规模、数据量和网络环境。一般来说:

  • 副本级切换:几秒到几分钟
  • 可用区级切换:几分钟到几十分钟
  • 集群级切换:几十分钟到几小时

Q3: 如何回滚手动切换?

A3: 可以通过以下方式回滚手动切换:

  1. 重新执行切换操作,切换回原来的主节点、主可用区或主集群
  2. 如果切换过程中出现问题,可以执行回滚命令
  3. 按照预先制定的回滚方案进行操作
sql
-- 回滚可用区级切换
ALTER TENANT tenant_name SET primary_zone = 'original_zone_list';

Q4: 手动切换和自动切换有什么区别?

A4: 手动切换和自动切换的主要区别:

  1. 触发方式:手动切换由管理员主动触发,自动切换由系统自动触发
  2. 适用场景:手动切换适用于计划性维护、预判性故障等场景,自动切换适用于突发故障场景
  3. 可控性:手动切换可控性更高,可以在合适的时间进行,自动切换响应更快,但可控性较低
  4. 影响范围:手动切换可以精确控制影响范围,自动切换影响范围较大

Q5: 如何优化手动切换的性能?

A5: 可以通过以下方式优化手动切换的性能:

  1. 优化网络配置,减少网络延迟
  2. 确保目标节点有足够的资源
  3. 调整切换速度参数
  4. 避开业务高峰期
  5. 逐步切换,避免一次性切换带来的压力
sql
-- 调整切换速度
ALTER SYSTEM SET switch_speed = 50;