前 言
Oceanbase 3副本架构下,在primary_zone是单副本打散或2个副本打散的情况下,一般会剩下1个follow副本不对外提供服务(只能做查询),这样就可以让业务中的一些对实时要求不是特别高的长查询类业务去单独连接剩下的follow副本,以达到空闲资源也可充分利用使用的情况。
下面就是如何通过更改obproxy的一些参数来做到读写分离的需求。
这里以zone3副本为列,一般zone3节点会涉及到跨机房、跨城市的情况,一般zone3不会设立leader副本对外提供服务,作为弱读节点比较合适。
实现过程
首先单独创建proxy集群,最好和读写业务的proxy分开,这个proxy选择configurl的方式去创建可以选择多个集群去创建的,只读业务连接不同的集群不同库时,只需要更改相关的集群名和租户名就可以,防止资源浪费。
创建完成后,如果该proxy集群的机器都是作为弱读使用,可以通过ocp白屏去修改:
- enable_primary_zone=’False’ ###关闭遵循observer的primary_zone优先级;
- proxy_primary_zone_name=‘zone3’ ###设置proxy的primary_zone,这里例如zone3作为路由的弱读zone;
- proxy_idc_name=‘xxx_C3’ ####idc机房 zone3 对应的机房 名称,可以在oceanbase集群的一下sql查看 select * from __all_zone where name=’idc’; 这里例如 xxx_C3机房(需根据实际设置填写);
- proxy_mem_limited=20G ###改参数防止proxy内存超限,频繁重启。
如果对应的proxy集群中还有其他服务器不作为弱读节点的话,需要通过proxy端口2883登录相应的ip地址,系统sys租户来修改以下参数:
alter proxyconfig set enable_primary_zone=‘False’;
alter proxyconfig set proxy_primary_zone_name=‘zone3’;
alter proxycofig set proxy_idc_name=‘xxx_c3’;
alter proxycofig set proxy_mem_limited=’20G’;
以下命令来检查设置是否成功:
show proxyconfig like ‘proxy_idc_name’;
show proxyconfig like ‘proxy_primary_zone_name’;
业务侧在sql中需要适配/*+ READ_CONSISTENCY(WEAK) */ hint。
或使用Jdbc连接串中添加配置sessionVariables=ob_read_consistency=weak 参数。
C程序使用obci 需要在tnsname.ora 的文件中连接串末尾添加obcisystemvariables=(SLOWSQL_THRESHOLD=100)(SESSION_VARIABLE=”sql_select_limit=10000,ob_read_consistency=weak”)参数。
END
本文作者:毛龙奇(上海新炬中北团队)
本文来源:“IT那活儿”公众号,如有侵权请联系删除
想了解更多相关,可通过下方扫码关注
详情咨询
可扫码添加上智启元官方客服微信👇