OceanBase 数据库支持读写分离部署,要求客户端将写请求路由到 ReadWrite Zone,将弱一致性读请求路由到ReadOnly Zone,此功能强依赖 OBProxy 的 LDC 功能。

读写分离的部署需要进行以下 4 个步骤:

  1. OceanBase 集群的 LDC 配置。

  2. OBProy 的 LDC 配置。

  3. OBProxy 的集群配置。

  4. 应用配置弱一致性读。

OceaBase 集群的 LDC 配置

  1. 在客户端中使用 root 用户登录集群的 sys 租户。

  2. 执行以下示例语句配置 LDC,其中 region 通常设置为城市名(大小写敏感)。 idc代表该 Zone 所处的机房信息,通常设置为机房名(小写),zone为当前设置的 Zone 的名称。它们的关系是一个 OceanBase 集群中有若干个 Region,一个 Region 有若干个 Zone,一个 Zone 对应一个 Zone Type 和 IDC 属性。

    1. obclient> ALTER SYSTEM MODIFY zone "z1" set region = "SHANGHAI";
    2. obclient> ALTER SYSTEM MODIFY zone "z1" set zone_type = "ReadWrite";
    3. obclient> ALTER SYSTEM MODIFY "z1" set idc = "zue";
  3. 检查 OBServer 中 LDC 设置内容是否生效,查询语句如下所示,查看返回结果中对应 Zone 的 Region Zone Type 和 IDC 项的值是否符合您的设置值。

    1. obclient> SELECT * FROM __all_zone;

OBProxy 的 LDC 配置

读写分离部署时,OBProxy仅需正确设置好 LDC 即可。OBProxy 的 LDC 配置有两种方式,其中 zue 为示例机房。

  1. OBProxy 进程启动时通过参数指定进行配置(推荐方式),示例语句如下所示。

    1. cd /opt/taobao/install/obproxy-1.5.5
    2. ./bin/obproxy -o proxy_idc_name=zue
  2. 在 OceanBase 支持的客户端工具中运行 ALTER语句修改 OBProxy 配置项,示例语句如下所示。

    1. obclient> ALTER PROXYCONFIG SET proxy_idc_name='zue';

    以示例 zue 机房为例,为 OBProxy 配置 LDC 后,如果应用部署在上海 zue 机房,当应用逻辑发起弱一致性读时,请求都是优先发往上海机房。

    为 OBProxy 配置 LDC 后可通过下述语句检查配置是否生效。

    1. obclient> SHOW PROXYINFO IDC;

    返回结果如下所示:

    读写分离 - 图1

OceanBase 集群配置

在 OceanBase 支持的客户端中使用 root 用户登录到集群的业务租户,运行下述语句设置 Global 级别系统变量 ob_route_policy为对应取值即可,默认取值为 readonly_zone_first

  1. obclient> SET @@global.ob_route_policy=readonly_zone_first;

应用配置弱一致性读

读写分离部署同样仅针对弱一致性读的场景才会生效。应用配置弱一致性读有以下 3 种方法:

  • 在 SQL 中携带 HINT 来指定,示例语句如下所示。

    1. obclient> SELECT /*+read_consistency(weak)*/ * FROM t1
  • 设置 Session 级别的系统变量来指定(仅对当前 Session 生效),示例语句如下所示。

    1. obclient> SET @@ob_read_consistency='weak'
  • 设置全局级别的系统变量来指定(对该租户的所有连接都会生效),示例语句如下所示。

    1. obclient> SET @@global.ob_read_consistency='weak'