首页 > 其他分享 >达梦读写分离集群的配置与测试

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

时间:2024-08-22 20:25:14浏览次数:9  
标签:备库 读写 instance SWITCH 集群 SQL 连接 达梦

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

目录

1.环境准备

2.dm_svc.conf 配置

3.实现原理

4.测试


1.环境准备

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

 A 节点B  节点
业务 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是在备库上执行的,读写分离配置成功!

本文结束!

标签:备库,读写,instance,SWITCH,集群,SQL,连接,达梦
From: https://blog.csdn.net/limintjhn8820/article/details/141436619

相关文章

  • 双主双从读写分离
    目录介绍准备搭建主库配置从库配置两台主库相互复制 双主双从测试双主双从读写分离schema.xml配置server.xml配置测试介绍一个主机Master1用于处理所有写请求,它的从机Slave1和另一台主机Master2还有它的从机Slave2负责所有读请求。当Master1主机宕......
  • JS 读写剪贴板
    document.execCommandAPI复制操作复制时,先选中文本,然后调用document.execCommand('copy'):constinputElement=document.querySelector("#input");inputElement.select();document.execCommand("copy");注意:复制操作最好由用户触发,如果脚本自主执行,可能某些浏览器会报......
  • kafka集群扩容
    环境:节点 zookeeper端口 kafka端口 备注172.17.0.81 12181 19092 原有节点172.17.0.82 12181 19092 原有节点172.17.0.83 12181 19092 原有节点172.17.0.90 12181 19092 扩容节点172.17.0.91 12181 19092 扩容节点步骤:一、扩容zookeeper节点#修改配置文件,需注意新节点my......
  • 基于NPOI封装支持多级表头灵活读写的《Soul.XLS》库
    一、先上效果图二、上代码dotnetaddpackageSoul.XLS--version1.1.0//构造一个多级表头varcolumns=newExcelColumnCollection("学生信息"){newExcelColumn("学生信息"){Items=new[]{newExcelColumn("个人信息")......
  • 使用redis-trib.rb工具快速搭建redis集群
    使用redis-trib.rb工具快速搭建redis集群手动搭建集群便于理解集群创建的流程和细节,不过手动搭建集群需要很多步骤,当集群节点众多时,必然会加大搭建集群的复杂度和运维成本,因此官方提供了redis-trib.rb的工具方便我们快速搭建集群。redis-tribyb是采用Ruby实现的redis集群管......
  • MySQL-MGR实战指南:打造企业级高可用数据库集群
    文章目录前言MGR的介绍事务处理流程:实验测试环境:结束语前言在数字化时代,企业的数据安全和业务连续性至关重要。想象一下,当关键业务数据存储在数据库中,而数据库突然出现故障,或者面临硬件故障、网络中断、自然灾害等不可预知的灾难性事件时,企业如何确保数据的完整性和......
  • 记录一次达梦日志报错解析Server page chack error
    数据库宕机,日志报错Serverpagechackerror 很明显是数据页的问题,需要定位到相关表,删除重建根据线程号T0000000000003539136中的 3539136去慢SQL中查对应的脚本下载慢日志,找线程号对应的脚本,用到了11次复制出来脚本,找到对应的表使用DTS把数据迁移到备份表上 再删除......
  • 学习达梦hint注入笔记
    1.创建表droptabletest;SQL>createtabletest(idint,infovarchar);操作已执行SQL>insertintotestselectlevel,'a'fromdualconnectbylevel<=10000;影响行数10000SQL>createindexidx_test_idontest(id);操作已执行SQL>stat100ontest(id......
  • Oracle RAC 集群启动顺序 转发:https://www.modb.pro/db/1824295923545612288?utm_s
    前言前几天使用脚本在RockyLinux9.4安装Oracle11GR2RAC,安装完之后发现集群无法正常启动,后经过分析发现原来是因为RHEL9版本默认安装移除了 initscripts 软件包,需要人为手动安装,在RHEL8之前是默认安装的。在分析问题的过程中,顺便对OracleRAC集群启动顺序进行了更......
  • 两线程读写数组
    #include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#defineARRAY_SIZE10intshared_array[ARRAY_SIZE];pthread_mutex_tmutex;void*write_data(void*arg){intthread_id=*(int*)arg;......