OceanBase 数据库支持读写分离部署,要求客户端将写请求路由到 ReadWrite Zone,将弱一致性读请求路由到ReadOnly Zone,此功能强依赖 OBProxy 的 LDC 功能。
读写分离的部署需要进行以下 4 个步骤:
-
OceanBase 集群的 LDC 配置。
-
OBProxy 的 LDC 配置。
-
OBProxy 的集群配置。
-
应用配置弱一致性读。
OceanBase 集群的 LDC 配置
-
在客户端中使用 root 用户登录集群的 sys 租户。
-
执行以下示例语句配置 LDC,其中
region 通常设置为城市名(大小写敏感)。idc 代表该 Zone 所处的机房信息,通常设置为机房名(小写),z1 为当前设置的 Zone 的名称。它们的关系是一个 OceanBase 集群中有若干个 Region,一个 Region 有若干个 Zone,一个 Zone 对应一个 Zone Type 和 IDC 属性。obclient> ALTER SYSTEM MODIFY zone "z1" set region = "SHANGHAI"; obclient> ALTER SYSTEM MODIFY zone "z1" set zone_type = "ReadWrite"; obclient> ALTER SYSTEM MODIFY zone "z1" set idc = "zue";
-
检查 OBServer 中 LDC 设置内容是否生效,查询语句如下所示,查看返回结果中对应 Zone 的 Region Zone Type 和 IDC 项的值是否符合您的设置值。
obclient> SELECT * FROM oceanbase.DBA_OB_ZONES;
OBProxy 的 LDC 配置
读写分离部署时,OBProxy 仅需正确设置好 LDC 即可。OBProxy 的 LDC 配置有两种方式,其中
zue 为示例机房。
-
OBProxy 进程启动时通过参数指定进行配置(建议使用的方式),示例语句如下所示。
cd /opt/taobao/install/obproxy-1.5.5 ./bin/obproxy -o proxy_idc_name=zue
-
在 OceanBase 支持的客户端工具中运行
ALTER 语句修改 OBProxy 配置项,示例语句如下所示。obclient> ALTER PROXYCONFIG SET proxy_idc_name='zue';
以示例
zue 机房为例,为 OBProxy 配置 LDC 后,如果应用部署在上海zue 机房,当应用逻辑发起弱一致性读时,请求都是优先发往上海机房。为 OBProxy 配置 LDC 后可通过下述语句检查配置是否生效。
obclient> SHOW PROXYINFO IDC;
返回结果如下所示:

OceanBase 集群配置
在 OceanBase 数据库支持的客户端中使用 root 用户登录到集群的业务租户,运行下述语句设置 Global 级别系统变量
ob_route_policy 为对应取值即可,默认取值为
readonly_zone_first。
obclient> SET @@global.ob_route_policy=readonly_zone_first;
应用配置弱一致性读
读写分离部署同样仅针对弱一致性读的场景才会生效。应用配置弱一致性读有以下 3 种方法:
在 SQL 中携带 Hint 来指定,示例语句如下所示。
obclient> SELECT /*+read_consistency(weak)*/ * FROM t1;
设置 Session 级别的系统变量来指定(仅对当前 Session 生效),示例语句如下所示。
obclient> SET @@ob_read_consistency='weak';
设置全局级别的系统变量来指定(对该租户的所有连接都会生效),示例语句如下所示。
obclient> SET @@global.ob_read_consistency='weak';
