达梦读写分离集群的配置与测试

操作系统版本CentOS7.6
数据库版本DM8_20240712
数据守护集群版本V4.0

目录

1.环境准备

2.dm_svc.conf 配置

3.实现原理

4.测试


1.环境准备

        配置读写分离集群,需要先搭建即时归档实时归档模式的主备集群。我们使用上篇文档《在一台主机上搭建达梦主备集群》中的实时主备环境。
 环境配置如下:

 A 节点节点
业务 IP192.168.220.128192.168.220.128
心跳 IP127.0.0.1127.0.0.1
实例名GRP1_RT_01GRP1_RT_02
数据库名DB01DB02
实例端口62367236
角色主库备库

2.dm_svc.conf 配置

        dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。

vi /etc/dm_svc.conf

##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DMRW=(192.168.220.128:6236,192.168.220.128:7236)
##服务配置
[DMRW]
LOGIN_MODE=(1)
RW_SEPARATE=(1)
RW_PERCENT=(30)
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000) 

服务名:DMRW
用于连接数据库的服务名,参数值格式为:服务名=(IP[:PORT],IP[:PORT],......)。

LOGIN_MODE
指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。


RW_SEPARATE
表示是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。

RW_PERCENT
表示读写分离分发比例,有效值范围 0~100,主库占所有事物数的比例。可以根据主备库的实际压力来设定。

SWITCH_TIMES
表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。

SWITCH_INTERVAL
表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。
 

3.实现原理

        实现读写分离集群的基本思路是:利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行。通过备库“试错”这么一个步骤,自然地将只读操作分流到备库执行。并且,备库“试错”由接口层自动完成,对应用透明。

4.测试

        测试方案:主库的实例名是GRP1_RT_01,备库的实例名是GRP1_RT_02。我们使用disql,以服务名DMRW登录,分别执行INSERT、UPDATE、SELECT 观察这些SQL是在哪个实例上执行的。
 登录:使用dm_svc.conf中配置的服务名DMRW

[dmdba@localhost ~]$ disql SYSDBA/SYSDBA@DMRW

 创建测试表

SQL> create table tb_test_rw
	(
	  id int,	  
	  insert_instance   varchar2(20),
	  update_instance   varchar2(20)
	);

INSERT操作

SQL> insert into tb_test_rw(id,insert_instance,update_instance)
              values(1,(select instance_name from v$instance),'');


SQL> commit;

UPDATE操作

SQL> update    tb_test_rw set   update_instance=(select instance_name from v$instance);
SQL> commit;

查看DML操作的执行节点

SQL> select id,insert_instance,update_instance,(select instance_name from v$instance) select_instance  from tb_test_rw ;

测试结果:在同一个会话中,INSERT与UPDATE是在主库上执行的,SELECT是在备库上执行的,读写分离配置成功!

本文结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值