
声明:
本文章内容仅用于学习、交流,未经团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的,利用此文所提供的信息而造成的任何直接或间接的损失,均由使用者本人负责。
PART
01
对等服务集群概述


读写分离集群主要在提供高可用集群的能力上,应用通过统一访问接口连接,集群实现应用事务的自动识别、读写分发处理能力,能够将应用绝大部分读事务均衡的分摊到集群的各备节点处理,从而降低集群主节点主机的负载压力、提升整个集群的性能瓶颈;实现对应用透明的高可用及负载均衡能力,如下所示。

在传统的主备模式多节点集群只能主节点的提供读写而各备节点提供只读模式的架构中,瀚高数据库在内核层进行架构优化,提供备节点不仅具备读能力,亦可具备写能力。即备节点可读可写,实现了主备节点提供对等的读写服务,我们称之为对等服务集群,如下所示。

PART
02
对等服务集群应用场景

场景 | 对等服务 | 中间件读写分离 | JDBC驱动读写分发 |
数据库自带的能力 | 数据库内核能力 | 额外组件 | 数据库驱动 |
额外软硬件支撑 | 无需额外软硬件支撑 | 组件部署及运行需要服务器资源 | 特定的数据库驱动包 |
用户使用习惯 | 不改变用户使用习惯及程序接口 | 需连接中间件及配置SQL白名单等 | 仅限于JAVA应用,不具有普适性。 |
SQL语句判断能力 | 内核级SQL解析器处理,支持复杂SQL的精准处理。 | 关键词判断逻辑,不精准。 | 关键词判断逻辑,不精准。 |
视图处理能力 | 内核解析视图,rewrite到表。 | 需配置视图和表的映射关系 | 需配置视图和表的映射关系 |
函数处理能力 | 内核及解析函数属性(v/s/i) | 需配置函数白名单 | 需配置函数白名单 |
游标处理能力 | 支持 | 支持 | 不支持 |
unlogged表处理 | 内核解析unlogged表 | 需配置相应表白名单 | 需配置相应表白名单 |
临时表处理能力 | 内核解析临时表 | 需配置相应表白名单 | 需配置相应表白名单 |
备节点执行失败的处理 | 支持主备abort | 不确定 | 不支持 |
主节点执行失败的处理 | 支持主备abort | 不确定 | 不支持 |
DDL后接着查询 | 支持事务内和事务外,无论是同步流还是异步流均支持。 | 事务内:不支持且易产生主备冲突。事务外:不支持。 | 事务内:不支持且易产生主备冲突。事务外:不支持。 |
物化视图 refresh后接着查询 | 支持(同DDL后接着查询一样) | 同上 | 同上 |
begin的处理能力 | 支持begin带参数的处理;支持重复begin的处理;支持serializable mode处理。 | 不确定 | 不支持 |
PART
对等服务集群演示
前置条件
(1)部署瀚高数据库;
(2)搭建好同步或异步流复制集群(流复制集群、高可用集群均可)。
安装瀚高数据库及搭建好高可用集群后(这里不在赘述,感兴趣的小伙伴可以联系我们获得试用版),要使用对等服务功能则需要修改备库的数据库参数enable_standby_dispatch,将该参数值设为true以开启对等服务模式。修改后重启备节点数据库服务即可。
如下,搭建了一主一备;
角色 | 主机IP | 服务端口 |
主库(PRIMARY) | 192.168.70.141 | 5866 |
备库(STANDBY) | 192.168.70.142 | 5866 |

对等服务集群配置
备库配置:
在备库上打开对等服务功能开关;
enable_standby_dispatch设置为true;
执行语句:
alter system set enable_standby_dispatch = 'true';

重启备库使配置生效。
对等服务功能展示
DDL操作演示
在备库上执行DDL语句,如下:
psql -h 192.168.70.142 -p 5866 -U highgocreate database db_test;\c db_testcreate table t_test(id int,name varchar,age int);

到主库上进行查看表t_test结构,如下:
psql -h 192.168.70.141 -p 5866 -U highgo -d db_test\d t_test

DML、DQL操作演示
在备库上对表t_test进行DML、DQL操作,如下:
insert into t_test values(1,'highgo',15),(2,'瀚高',15);update t_test set name='highgo123' where id = 1;select * from t_test;

到主库上进行查看,如下:
select * from t_test ;

DCL操作演示
在备库上对表t_test进行DCL操作;
创建新用户,在未授权之前select表t_test(用户未经授权无法访问表),如下:
create user u_test with password 'Qwer!234';\c - u_testselect * from t_test ;

在备库上给用户u_test赋予表t_test的权限(赋予select权限后可查询该表),如下:
\c - highgogrant select on t_test to u_test;\c - u_testselect * from t_test ;

到主库上验证一下,如图所示。

篇幅有限,在此就不做过多的举例了,感兴趣的小伙伴可以获取测试版自己动手尝试哦。
END





