#保护模式切换
YashanDB高可用架构中提供了最大性能模式(MAXIMIZE PERFORMANCE)、最大可用模式(MAXIMIZE AVAILABILITY)和最大保护模式(MAXIMIZE PROTECTION)三种保护模式。
使用yasboot部署YashanDB时,会自动根据组内节点数量(分布式部署中组内节点数只包括MN组和DN组)修改保护模式:
组内只有一个节点,yasboot不会修改保护模式,默认最大性能模式;
组内有两个节点,yasboot会修改保护模式为最大可用模式;
组内节点数量大于两个,yasboot会修改保护模式为最大保护模式,并且打开自选举;
每个节点实例上均存在保护模式设置且支持独立切换,但建议同一个环境中所有节点的保护模式保持一致。在主备场景中,主库的保护模式会通过心跳同步到备库,当各节点的保护模式配置不完全一致时,整个数据库环境始终以主库的保护模式为准。
通过查询V$DATABASE视图可以获取当前的保护模式信息,视图中的PROTECTION_MODE字段表示当前节点设置的保护模式,PROTECTION_LEVEL字段表示实际生效的保护模式和级别(redo日志的同步状态)。
切换保护模式需遵循如下规则:
- 分布式部署中不建议切换保护模式,如需切换只能通过直连MN或DN节点操作。
- 切换保护模式需要在数据库处于OPEN或MOUNT状态时操作。
- 最大可用或最大保护模式下,主库事务提交需要等待redo同步至相应备库(MAJORITY或自定义同步备)。因此,在数据库OPEN状态下切换保护模式时也必须保证主库redo已同步至相应备库,否则将切换失败。建议通过先切换至最大可用进行过渡,等待redo同步完成(即V$DATABASE的PROTECTION_LEVEL变为MAXIMUM AVAILABILITY)再切换至最终的目标保护模式。
示例(单机、分布式部署)
-- 切换前的保护模式
SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
--------------------------------- ---------------------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
-- 切换保护模式(分布式部署下需直连MN或DN节点)
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
-- 切换后的保护模式
SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
--------------------------------- ---------------------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE