odp SQL 路由流程疑问

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
image
加入集群 同城三个机房 zone=id1 id2 id3 2-2-2集群架构

ODP这里的登录信息是 从ocp获取 集群机器列表。
当设置这个odp proxy_idc_name=id1, 选择的observer会 定位到id1 可用区吗?

1 个赞

需要先给sql设置弱读,它才会去定位到id1

sql hint级别最高 >odp session级别/global级别(obproxy_read_consistency)>observer session级别/global级别(ob_read_consistency)

这个 优先级对不对呢 ?

  1. sql hint级别最高 这个是弱读 , 后面的设置 是强读 ,最后也是弱读。

  2. 如果设置odp session级别/global级别(obproxy_read_consistency) 为弱读,select * from kk 这类不加hint的sql 也是弱读 ,不考虑observer的ob_read_consistency 设置??

  3. 如果设置 ob_read_consistency 为弱读 ,select * from kk 这类不加hint的sql 也是弱读?

上面的解释对不对呢 ?

OBProxy路由策略其实遵循以下三个策略:

  • Primary Zone 路由:第一优先级
  • LDC 路由:第二优先级
  • 随机路由:第三优先级
弱一致性读设置

弱一致性读设置有三种方式:

  • SQL级别设置
  • 会话级别设置
  • 修改OBProxy配置项实现
    弱一致性读开启的三种方式解释:
    以上三种方式各有优劣势,通过Hint的方式,需要修改SQL,如果SQL数量比较多,则修改起来工作量大,并且对业务代码有一定侵入性,但是比较方便灵活,对于分析请求场景需求不高的情况,可修改个别SQL快速实现弱一致性。会话级别的设置,如果是全局设置,则会导致所有的连接会话都开启弱一致性读,如果只开启Session级别,则每开启一个Session都需要先执行以下命令,也有一定业务的入侵。通过修改OBProxy配置,在分析请求比较多且复杂的场景,则是最方便的方式,所有连接这个OBProxy的SQL默认开启弱一致性读。

路由策略解释:
开启弱一致性读只是配置读写分离的第一步,在开启弱一致性读时,如果没有设置LDC策略,所有的请求还是会按照最开始讲到的 OBProxy 路由策略,优先发送到primary zone,如果未设置primary zone,即primary zone为random,那么请求会按照随机路由的策略,随机发送到任意副本,因此时有可能发送到 Leader 副本,并未实现完全的读写分离。

路由策略

https://www.oceanbase.com/docs/enterprise-odp-enterprise-cn-10000000001715898

帮忙解释下这些参数的 优先级吧

priamary_zone
ob_route_policy

proxy_route_policy
proxy_primary_zone_name
proxy_idc_name

这些参数 弱读的情况下。 怎么玩的

你上面说的三条都是对的。
这个没有优先级之分,因为默认都是强读,如果存在一个为弱读,则该sql为弱读

1 个赞

image

这个第一步就是 在odp设置 global级别的 proxy_read_consistence=weak 吗 ???

楼上不是解释了么?个人建议多看看官方文档 感觉你压根没有看官方文档

设置条件:

  1. 会话级别设置弱一致性读 或者 SQL 请求加 弱一致性读 Hint
    弱一致性读设置有三种方式:

    • SQL级别设置
    • 会话级别设置
    • 修改OBProxy配置项实现
  2. 设置LDC策略,OBProxy 和 OBServer 绑定
    1)OBServer设置:
    alter system modify zone “zone1” set region = “BEIJING”;
    alter system modify zone “zone1” set idc = “idc1”;
    2)OBProxy设置:
    通过执行 SQL 语句设置 LDC 信息
    obclient> alter proxyconfig set proxy_idc_name=‘idc1’;
    备注:在OBProxy设置完成之后,查看OBProxy的LDC信息,可以在regions_name 和 same_idc中看到,OBProxy和对应的region和zone已经实现了自动匹配,这个时候,业务访问idc1 的这个OBProxy,默认会将请求路由到zone1的OBServer上。

  3. 配置了FOLLOWER_FIRST
    alter proxyconfig set proxy_route_policy=“follower_first”;
    proxy_route_policy:
    ● FOLLOWER_FIRST:优先发往备副本,如果无备副本可用则发往主副本。
    ● FOLLOWER_ONLY:只能发往备副本,如果无备副本可用则报错。

路由策略:

  1. 默认情况下,强一致性读以及增删改的SQL,依然访问 Leader 副本;
  2. 开启弱一致性读的 SQL 请求,连接串中指定访问的 OBProxy,OBProxy 默认会将请求路由到本地 Follower 副本,如果本地该数据的副本为 Leader 副本,则自动路由到同 Region 中其他 IDC 的 Follower 副本

官方文档太多了 。 根本赶不上趟。而且也无法突出重点。 根据obcp 考试材料研究的,能到考试材料的 肯定是很重要的

有些原理性没有理解 建议你多看看官方的文档 多理解一些原理的知识 对你有帮助。

666

proxy_primary_zone_name 这个是配置强读路由的 文档给你了 有事例 自己可以看看

强读 Primary Zone 路由

https://www.oceanbase.com/docs/common-odp-doc-cn-1000000002024384

ob_route_policy


https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002015958

听君一席话胜读十年书!

感觉可以用表组加sql的hint吧