暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB 企业增强特性介绍——读写分离

gyz 2023-05-31
238

面对日益增加的系统访问量,读写分离可以充分利用备机资源,有效地提升数据库的吞吐量。过去常用的手段是通过应用层来控制数据库的读写流量。

AntDB 通过在 Coordinator 组件的 SQL 解析路由层增加对读写流量的精确访问控制且对应用透明,做到强一致性的数据访问体验。

针对写少读多、数据实时性要求不那么高的分析业务场景,可以通过读写分离有效地提升主从机器资源的使用率,如图 3-26 所示。

image.png

下面描述如何使用读写分离特性以及使用注意事项。

用户连接 Coordinator,执行 SQL 语句,最终数据的修改和查询都会访问Datanode。一般情况下,Datanode 有同步或者异步备节点。如果是同步备节点, 则数据与主节点实时一致,因此备节点可以提供数据查询的功能。但是当主节点正常工作时,备节点只提供数据备份的功能,造成资源的浪费。
AntDB 从内核层面实现了读写分离,打开读写分离的开关,就可以实现, 执行读操作访问备节点,写操作访问主节点,对应用层完全透明,有效提升主从机器资源的使用率,增加数据库的吞吐量。

1)读写分离控制参数
读写分离涉及的开关有两个,在 adbmgr 上通过设置参数开启读写分离功能。
有同步节点的情况下:
set coordinator all(enable_readsql_on_slave = on):
没有同步节点,只有异步节点,并希望异步节点提供读的功能的情况下:
set coordinator all(enable_readsql_on_slave = on);
set coordinator all(enable_readsql_on_slave_async = on);

■enable_readsql_on_slave:读写分离总开关。
enable_readsql_on_slave_async:允许异步节点提供读的功能开关。

2)检测读写分离功能
读写分离启动之前,pgxc_node 表中的信息如下:

image.png

没有 slave 节点信息,所以读操作发送到 master 节点上:

image.png

其中,dn2_1 为 master 节点。
读写分离启用后,在 coord 的 pgxc_node 表中,会有 slave 节点信息:

image.png

上述结果中,E 类型的节点即是 slave 节点。读操作发送到 slave 节点上:

image.png

其中,dn2_2 为 slave 节点。

3)注意事项
某些场景下,开启读写分离且 master 流复制为同步时,在 master 节点上执行 DML 操作立即查询时,发现查不到对应的数据。原因是 master 节点上的DML 操作在 slave 节点上没 apply,导致发送到 slave 节点的查询操作读不到最新的数据。如果想避免这种情况,可以设置 Datanode 的 synchronous_commit
参数为 remote_apply,确保 master 的操作在 slave 上,apply 之后才给客户端返回消息。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论