【 使用环境 】生产环境
【 OB or 其他组件 】oceanbase
【 使用版本 】4.2.2.0
【问题描述】
目前在云上部署3个全能型副本,同时在本地部署了一个只读型副本。
每天有一部分数据统计sql需要执行,这部分sql对数据的一致性要求不高。由于sql质量不可控,希望通过路由到只读型副本执行。不占用线上的3个全能型副本的资源。
希望不需要每个sql执行前都设置弱一致性读
该如何配置
【 使用环境 】生产环境
【 OB or 其他组件 】oceanbase
【 使用版本 】4.2.2.0
【问题描述】
目前在云上部署3个全能型副本,同时在本地部署了一个只读型副本。
每天有一部分数据统计sql需要执行,这部分sql对数据的一致性要求不高。由于sql质量不可控,希望通过路由到只读型副本执行。不占用线上的3个全能型副本的资源。
希望不需要每个sql执行前都设置弱一致性读
该如何配置
如果只读的SQL是单独通过一个应用发送的可以在单独部署一个OBProxy关联集群然后设置OBProxy参数 proxy_primary_zone_name 为只读副本,只读应用连接这个OBProxy
如果应用只有一套那么就只有配置 OBProxy参数 obproxy_read_consistency = 1 ,这样也能把单独的读请求路由到备,但是这种不一定会路由到只读副本上
通过OB的ODP功能可以设置,比如你把只读副本设置成sh1,然后在proxy里面设置只读全部路由到只读副本所在的地域即可,具体可以看一下官网相关配置:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000819443
新建一个proxy,比容用zone4里的observer服务器,创建一个proxy:readonly_proxy,proxy版本3.1以上
修改proxy的参数:
proxy_route_policy=‘follower_first/follower_only’;
obproxy_read_consistency=1;
proxy_idc_name=‘readonly’; --这个参数我这里的版本只能黑屏改,所以proxy集群有几个成员,都需要改一次,登录sys租户的root用户,进行修改
如果ocp里出现告警(Oceabase集群zone的IDC/Region是逻辑上的划分,当集群中IDC/Region信息变更后,需要在OCP metadb中手动进行同步,ocp中是没有weakread_sy这个idc信息的,所以会产生相关告警)
–登录ocp的meta租户的ocp库,在相关表中新增IDC的信息
MySQL [ocp]> insert into compute_idc(name,description,region_id) select ‘readonly’,‘readonly_idc’,id from compute_region where name = ‘sh’;
MySQL [ocp]> commit;
MySQL [ocp]> select * from compute_idc;
MySQL [ocp]> update compute_host set idc_id = (select id from compute_idc where name = ‘readonly’) where inner_ip_address in (‘xxxx.xxxx.xxxx.xx’,‘xxxx.xxxx.xxxx.xx’,‘xxxx.xxxx.xxxx.xx’)
–查看告警是否恢复
####测试环境验证充分,再上生产。
连接只读poroxy,执行一个sql,最好带hint,通过GV$SQL_AUDIT 进行检查是否在zone4上执行的
这个是 ODP 的 LDC 路由功能。
具体步骤如下:
select zone, name, info from __all_zone where name in ('region','idc');
obclient -h xxx.yyy.zzz.www -uroot@sys#集群名 -P2883 -paaAA11__ -c -A
show proxyinfo idc;
show proxyconfig like '%idc%';
alter proxyconfig set proxy_idc_name='sh';
alter proxyconfig set obproxy_read_consistency=1;
show proxyconfig like '%proxy_idc_name%';
你这个例子里 region和idc 的名字取得不够好。
也可以在 OCP 里针对该 OBProxy 所在集群设置 OBProxy 参数。建议用 OCP 设置,有个记录。
这个就是查看视图 gv$ob_sql_audit
定位到业务sql 所在记录的 server_ip
字段。
以上设置只对独立的查询(查询不用设置弱一致性读hint)有效。要求集群参数 ob_proxy_readonly_transaction_routing_policy 值为 false 。
如果 查询在事务中,则依然是走强一致性读,被路由到主副本所在节点。
如果照上面步骤做了,有什么不符合预期的地方可以提出来再讨论。