读写分离问题咨询

【 使用环境 】测试环境
【 OB or 其他组件 】observer/ocp
【 使用版本 】ocp 4.3.5 observer 4.2.5
【问题描述】对于读写分离的方案,有如下方案:
方案一.使用当前集群,设定dbproxy节点的OBPROXY_READ_CONSISTENCY值及PROXY_ROUTE_POLICY值,假设当前1-1-1架构,读业务自动发送到除leader节点的两个follower节点上。存储成本最低。
方案二.当前集群额外增加一个或多个只读副本,列存副本节点,存储成本增加。
方案三.创建备租户,备租户承担读操作。

咨询问题:
1。当使用方案一时,如果节点发生切换,dbproxy节点也能感知将读sql发送到新的follower上嘛
2.方案二,ocp平台上看只能选择全能副本和只读副本。
3.https://www.oceanbase.com/docs/common-best-practices-1000000003048509文档中的follower副本是特指只读副本还是包括除了leader节点外的其他全能副本。

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

1 个赞

性能上方案二应该最佳,可以新建只读副本,单独部署obproxy配置弱读;
列存副本是ap版本的特性,你用的版本没有这个特性

嗯,列存副本应该是4.3.3才支持

1 个赞

是的

节点发生切换说的是ob切换还是ODP?

ob切换,odp我记得是无状态的,应该不影响的吧

无影响,方案一,如果节点发生切换,ODP的路由缓存信息能被动感知到的

1 个赞

对于只读副本,按照官网的描述只提供读的能力,不提供写的能力,但是实际测试时直连只读副本执行delete操作是可以的。



image

是oceanbase集群自身实现请求转发到主节点了?

1 个赞

是的,可以使用explain route + sql解析一下执行计划看看

2 个赞

直连observer不支持explain route吧,通过proxy连接可以

1 个赞

抱歉这边忘记了。查询gv$ob_sql_audit表该sql的plan_type

1 个赞

学习

期待AP和TP的整合版本

leader承担读写请求,follow和只读副本承担读请求,如果有写请求,obproxy也会路由至集群leader节点进行写操作

学习学习