ITPub博客

首页 > 数据库 > 国内数据库 > 【手摸手玩转 OceanBase 52】如何理解 LDC 路由?

【手摸手玩转 OceanBase 52】如何理解 LDC 路由?

原创 国内数据库 作者:13579NB232 时间:2023-01-19 15:05:47 0 删除 编辑

逻辑数据中心(Logical Data Center,LDC)路由可用于解决分布式关系型数据库多地多中心部署时产生的异地路由延迟问题。

OceanBase 数据库作为典型的高可用分布式关系型数据库,使用 Paxos 协议进行日志同步,天然支持多地多中心的部署方式以提供高可靠的容灾保证。但当真正多地多中心部署时,任何数据库都会面临异地路由延迟问题。

逻辑数据中心(Logical Data Center,LDC)路由正是为了解决这一问题而设计的,通过给 OceanBase 集群的每个 Zone 设置 Region 属性和 IDC 属性,并给 OBProxy 指定 IDC 名称配置项后,当数据请求发到 OBProxy 时,OBProxy 将按如下优先级顺序进行路由转发:

  1. 选取本机房不在合并的副本。

  2. 选取同地域机房不在合并的副本。

  3. 选取本机房在合并的副本。

  4. 选取同地域机房在合并的副本。

  5. 随机选取非本地域机房不在合并的副本。

  6. 随机选取非本地域机房在合并的副本。

LDC 路由的设置需要进行以下 3 个步骤:

  1. OceanBase 集群的 LDC 配置。

  2. OBProxy 的 LDC 配置。

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

说明

如果没有设置 LDC,那么当 OceanBase 数据库多地多中心部署时,弱一致性读会均匀访问数据的所有主从副本,当访问非本地域机房上的副本时,系统响应时间将大大增加。

OceanBase 集群的 LDC 配置

  1. 在 OceanBase 数据库支持的客户端工具中使用 root 用户登录集群的 sys 租户。

  2. 登录后,执行以下示例语句配置 LDC。

    obclient> ALTER SYSTEM MODIFY zone "z1" SET region = "SHANGHAI"; 
    obclient> ALTER SYSTEM MODIFY zone "z1" SET idc = "zue";

    其中:

    • 参数  region 表示 Zone 所在的地域信息,通常设置为城市名(大小写敏感)。

    • 参数  idc 代表该 Zone 所处的机房信息,通常设置为机房名(小写)。

    • 参数  zone 为当前设置的 Zone 的名称。

    • 一个 OceanBase 集群中有若干个 Region,一个 Region 有若干个 Zone,一个 Zone 对应一个 IDC 属性。

  3. 检查 OBServer 中 LDC 设置内容是否生效。

    查询语句如下所示,查看返回结果中对应 Zone 的 Region 和 IDC 字段的值是否符合您的设置值。

    obclient> SELECT * FROM oceanbase.DBA_OB_ZONES;

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;

返回结果如下所示: 返回结果

应用配置弱一致性读

LDC 路由仅针对弱一致性读的场景才会生效。应用配置弱一致性读有以下 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';


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026124/viewspace-2932754/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2023-01-18

  • 博文量
    184
  • 访问量
    93238