主备库是 OceanBase 数据库基于日志复制技术的高可用特性,它的出现让 OceanBase 数据库可以提供更加灵活的高可用选项。在一个主备库的配置当中,可以包含一个主集群和一个或多个备用集群。主备库工作流程

    根据事务日志传输方式和提供的数据保护级别不同,主备库提供最大保护模式和最大性能模式:

    • 最大保护模式

      这种模式可以确保主集群出现故障时不会发生数据丢失。在这种保护模式下,事务在提交之前需要将对应的事务日志发送给备集群,并且保存到备集群的 clog 日志后才能提交成功。

      目前 OceanBase 数据库在每个主备库配置中只支持一个备集群运行在最大保护模式下。如果运行在最大保护模式下的备集群停机,为了确保数据不丢失,则主集群会停止对数据进行修改的相应请求。

    • 最大性能模式

      这种模式不能确保主集群出现故障时不丢失数据,但是可以在最大限度地确保主集群性能的同时,还能保护用户的数据。在这种模式下,主集群的事务在本地 clog 上持久化成功就可以提交成功、事务日志会被异步的发送到备集群。主集群与备集群之间的事务日志不同步不会影响主集群提交事务,并且备集群异常停机也不会影响主集群的运行。在每个主备库配置中,支持多个备集群运行在最大性能模式,且这种模式是默认的保护模式。

      用户可以通过下面的命令来在两种模式之间进行切换:

      1. obclient>ALTERSYSTEM SET STANDBY CLUSTER TO <PROTECTION LEVEL>;

    主备库还提供 Switchover 和 Failover 两种集群角色切换能力。通常情况下,当系统需要进行维护操作时,用户可以通过 Switchover 操作切换主、备集群的角色,在 Switchover 的过程中不会有数据丢失。如果主集群因为某些异常情况无法提供服务,主备库提供的 Failover 能力可以确保处于最大保护模式的备集群无损的切换成为主集群。

    用户可以通过访问系统提供的各种视图来获取主备库的更多信息。

    查看主集群状态

    1. obclient>select cluster_role, cluster_status from v$ob_cluster;
    2. +--------------+----------------+
    3. | cluster_role | cluster_status |
    4. +--------------+----------------+
    5. | PRIMARY | VALID |
    6. +--------------+----------------+
    7. 1 row in set (0.00 sec)

    查看备集群信息

    1. obclient>select cluster_id, cluster_role, cluster_status, current_scn, usec_to_time(current_scn) from v$ob_standby_status;
    2. +------------+------------------+----------------+------------------+----------------------------+
    3. | cluster_id | cluster_role | cluster_status | current_scn | usec_to_time(current_scn) |
    4. +------------+------------------+----------------+------------------+----------------------------+
    5. | 2 | PHYSICAL STANDBY | VALID | 1582181186147741 | 2020-02-20 14:46:26.147741 |
    6. | 3 | PHYSICAL STANDBY | VALID | 1582181186548901 | 2020-02-20 14:46:26.548901 |
    7. +------------+------------------+----------------+------------------+----------------------------+
    8. 2 rows in set (0.01 sec)

    用户也可以通过 OCP 来对主备库进行更多的管理操作,如下图所示。通过 OCP 管理主备库