注册
DM8数据库主备与读写分离集群
专栏/技术分享/ 文章详情 /

DM8数据库主备与读写分离集群

少年 2025/07/11 182 0 0
摘要

一、基本概念

1.1.1 数据库

数据守护以库为单位进行管理,一个 DMDSC 集群的所有实例作为一个整体库来考虑。
DMDSC 集群的库信息,例如库的状态、模式等需要综合考虑集群内所有实例,同时需要结
合 DMDSC 本身的状态。

1.1.2 数据库模式

DM 支持 3 种数据库模式:Normal 模式、Primary 模式和 Standby 模式。
Normal 模式
提供正常的数据库服务,操作没有限制。正常生成本地归档,但不发送实时归档
(Realtime)、即时归档(Timely)和异步归档(Async)。
Primary 模式
主库:全集群只能有一个主库,主库是用来直接支撑应用系统。必须是primary模式。
提供正常的数据库服务,操作有极少限制。该模式下部分功能受限,包括:不支持修改
表空间文件名、不支持修改 arch_ini 参数。正常生成本地归档,支持实时归档
(Realtime)、即时归档(Timely)和异步归档(Async)。Primary 模式下,对临时表空间以外的所有的数据库对象的修改操作都强制生成 Redo 日志。
Standby 模式
备库:全集群至少有一个备库,提供只读数据库服务的实例。必须是standby模式。
可以执行数据库备份、查询等只读数据库操作。正常生成本地归档,正常发送异步归档
Redo 日志;但实时归档(Realtime)、即时归档(Timely)均强制失效。该模式下时间触发器、事件触发器等都失效。

可以通过 SQL 语句切换数据库模式,模式切换必须在 Mount 状态下执行。

1.1.3 数据库状态

DM 的数据库状态包括:
Startup 状态
系统刚启动时设置为 Startup 状态。
After Redo 状态
系统启动过程中联机日志重做完成后,回滚活动事务前设置为 After Redo 状态。非
Standby 模式的实例在执行 alter database open 操作前,也会将系统设置为 After
Redo 状态。
Open 状态
数据库处于正常提供服务的状态,但不能进行归档配置等操作。
Mount 状态
数据库在 Mount 状态下,不能修改数据,不能访问表、视图等数据库对象,但可以执
行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的
操作,比如查询动态视图或者一些只读的系统过程。由于 Mount 状态不生成 PWR 日志,因此数据页可以正常刷盘,也正常推进检查点。
系统从 Open 状态切换为 Mount 状态时,会强制回滚所有活动事务,但不会强制清理(Purge)已提交事务,不会强制断开用户连接,也不会强制 Buffer 中的脏页刷盘。
Suspend 状态
数据库在 Suspend 状态下,可以访问数据库对象,甚至可以修改数据,但限制 Redo
日志刷盘,一旦执行 COMMIT 等触发 Redo 日志刷盘的操作时,当前操作将被挂起。
Shutdown 状态
实例正常退出时设置为 Shutdown 状态。
image.png

用户可以通过 SQL 语句进行数据库状态切换:
1.Open 状态与 Mount 状态可以相互切换;
2.Open 状态与 Suspend 状态可 以相互切换;
3.Mount 和 Suspend 状态不能直接转换
4. 其他状态为系统内部状态,用户不能主动干预。

1.1.4归档

特性 本地归档 实时归档 即时归档 异步归档
数量限制 0 1~8 1~8 1~8
归档时机 写入联机日志后,再写入到本地归档日志文件 写入联机日志前 写入联机日志后,发送到备库 异步归档线程
数据来源 RLOG_PKG RLOG_PKG RLOG_PKG 本地归档文件
适用源库模式 Primary/Standby/Normal Primary 写入联机日志后,发送到备库 Primary/Standby

二、搭建DM数据守护环境

2.1.1 环境检查

image.png

2.1.2 集群环境规划

端口参数说明

参数名 全称 作用 A机器 B机器(监视器)
业务IP / 对外服务IP 10.127.17.107 10.127.17.110
心跳IP(MAL_HOST) / 内部通讯IP,监视器用到的ip 10.127.17.107 10.127.17.107
实例名 / 实例标识 GRP1_RT_01 GRP1_RT_02
MAL_INST_PORT(dmmal.ini) 实例端口 提供数据库服务的监听端口(客户端连接端口) 5236 5236
PORT_NUM(dm.ini)
MAL_INST_DW_PORT MAL实例守护端口 监控本地实例状态的守护进程通信端口 5237 5237
MAL_PORT MAL通信端口 节点间日志传输端口(发送Redo日志) 5238 5238
MAL_DW_PORT MAL守护进程端口 节点间守护进程通信端口(状态同步/故障切换) 5239 5239
OGUID / 守护系统唯一标识 45331 45331
守护组 / 守护组名称 GRP1 GRP1
安装目录 / 达梦数据库安装路径 /opt/dmdbms /opt/dmdbms
实例目录 / 数据库实例文件存储路径 /opt/dmdbms/data/ /opt/dmdbms/data/

2.1.3 集群配置文件说明

image.png

2.14安装前准备

```css 两台机器前期准备 创建用户组、用户 groupadd -g 2001 dinstall useradd -g dinstall dmdba -u 2001 passwd dmdba #变更目录用户及组 root  mkdir /opt/dmdbms chown dmdba:dinstall /opt/dmdbms/ -R chmod 777 /opt/dmdbms/ -R ##关闭防火墙 systemctl stop firewalld && systemctl disable firewalld //关闭防火墙&&关闭自启动 ##关闭numatransparent_hugepage vi /etc/default/grub GRUB_CMDLINE_LINUE参数的最后添加numa=off transparent_hugepage=never 查询是UEFI-based机器还是BIOS-based机器 [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS 重新生成grub.cfg文件 UEFI-based 机器,执行: grub2-mkconfig -o /boot/efi/EFI/kylin/grub BIOS-based 机器,执行: grub2-mkconfig -o /boot/grub2/grub ##关闭swap分区 vi /etc/fstab 注释掉swap分区的一行 #sed -ri 's/.*swap.*/#&/' /etc/fstab }

修改文件最大打开数

##修改文件最大打开数
vi /etc/security/limits.conf
dmdba soft nice 65536
dmdba hard nice 65536
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited

修改system.conf文件


DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000

##/etc/sysctl.conf文件添加以下三项
vi /etc/sysctl.conf
vm.numa_stat = 0
vm.overcommit_memory=0
vm.swappiness=1


执行sysctl -p生效

数据库安装到/opt下 实例存放到/data下面

修改目录属组:chown -R dmdba:dinstall /data

一.准备工作

1、数据库安装目录
通过配置管理工具安装完成的数据库安装目录为:/opt/dmdbms
数据库执行码(dminit,disql等)存放目录:/opt/dmdbms/bin/
数据库图形化工具存放目录:/opt/dmdbms/tool
数据库手册存放目录:/opt/dmdbms/doc
数据库驱动存放目录:/opt/dmdbms/drivers

2.2服务器A主库

服务器-主库-实例初始、备份数据

2.21数据库安装

./DMInstall.bin -i
image.png

2.22 数据库实例初始化

/opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ \
INSTANCE_NAME=GRP1_RT_01 \
PAGE_SIZE=32 \
EXTENT_SIZE=32 \
LOG_SIZE=2048 \
SYSDBA_PWD=Dameng123 \
SYSAUDITOR_PWD=Dameng123 \
CHARSET=1 \
CASE_SENSITIVE=Y \
SEC_PRIV_MODE=0 \
DB_NAME=DAMENG \
PORT_NUM=5236

image.png

2.23启动服务

/opt/dmdbms/bin/dmserver /opt/dmdbms/data/DAMENG/dm.ini

image.png

2.24 开启归档

disql SYSDBA/Dameng123@10.127.17.107:5236
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG; 
ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; 
ALTER DATABASE OPEN;

image.png

2.25 备份数据

SQL> BACKUP DATABASE BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE';

image.png

2.26服务器A-dm.ini配置

--库中执行:
SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE (2,'MAL_INI',1);
SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

参数的详细解答:
INSTANCE_NAME 数据库实例名(长度不超过 16 个字符),与 dmmal.ini 中的 
MAL_INST_NAME 对应。配置数据守护系统时,应该保持INSTANCE_NAME 是全局唯一的。

PORT_NUM 5236 数据库实例监听端口(范围 1024~65534),与 dmmal.ini 中 
的 MAL_INST_PORT 对应

DW_INACTIVE_INTERVAL 60  接收守护进程消息超时时间

ALTER_MODE_STATUS  0  是否允许手工修改数据库的模式和状态,1 表示允许,0 表示不允许,此参数可动态修改,默认为 1,数据守护环境下建议配置为 0,避免用户手工干预。

 ENABLE_OFFLINE_TS  2   是否允许 offline 表空间,1 表示允许,0 表示不允许,2 表示禁止备库,其他放开。守护环境下建议配置为 2。

MAL_INI  1  系统配置开关,0 表示不启用 MAL 系统,1 表示启用 MAL系统。

ARCH_INI  1   Redo 日志归档配置开关,0 表示不启动 Redo 日志归档,1 表 
示启用 Redo 日志归档

RLOG_SEND_APPLY_MON  64   统计最近64次日志发送消息。

image.png

2.27服务器A-dmarch.ini配置

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmarch.ini

ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02
**#-注意限制归档空间大小,防止磁盘撑爆,根据实际环境更改**

2.28服务器A-dmmal.ini配置

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /opt/dmdbms/data/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0

[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 10.127.17.107
MAL_PORT = 5238
MAL_INST_HOST = 10.127.17.107
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237

[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 10.127.17.110
MAL_PORT = 5238
MAL_INST_HOST = 10.127.17.110
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237

2.29服务器A-dmwatcher.ini配置

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0


2.30服务器A-拷贝备份文件

 scp -r /opt/dmdbms/data/DAMENG/bak/BACKUP_FILE dmdba@10.127.17.110:/opt/dmdbms/data/DAMENG/bak

2.31服务器A-注册服务

使用root权限用户

# 安装数据库实例服务(GRP1_RT_01),并指定启动模式为 MOUNT(适用于集群初始化)
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount


# 安装数据库守护进程服务(Watcher),用于监控实例状态并处理集群故障切换。
 [root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini


#若要删除自启,可利用如下方式:
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_01
 [root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

image.png
image.png

服务器A 准备完毕

2.4服务器B备库

服务器-备库-实例初始、备份数据

2.41数据库安装

./DMInstall.bin -i

2.42 数据库实例初始化

/opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ \
INSTANCE_NAME=GRP1_RT_02 \
PAGE_SIZE=32 \
EXTENT_SIZE=32 \
LOG_SIZE=2048 \
SYSDBA_PWD=Dameng123 \
SYSAUDITOR_PWD=Dameng123 \
CHARSET=1 \
CASE_SENSITIVE=Y \
SEC_PRIV_MODE=0 \
DB_NAME=DAMENG \
PORT_NUM=5236

image.png

2.43恢复数据

[dmdba@~]$/opt/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
[dmdba@~]$/opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
[dmdba@~]$ /opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
验证备份集完整性
/opt/dmdbms/bin/dmrman CTLSTMT="CHECK BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"

image.png

2.44 服务器B-dmarch.ini配置

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmarch.ini

ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01

#-注意限制归档空间大小,防止磁盘撑爆,根据实际环境更改
在 B 机器上配置备库的实例名为 GRP1_RT_02,dm.ini 参数修改如下:
INSTANCE_NAME  = GRP1_RT_02I
PORT_NUM = 5236                               #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60              #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0                     #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS  = 2                      #不允许备库 OFFLINE 表空间
MAL_INI = 1                                           #打开 MAL 系统
ARCH_INI = 1                                         #打开归档配置
RLOG_SEND_APPLY_MON = 64             #统计最近 64 次的日志重演信息

2.45 服务器B-dm.ini配置

2.45.1配置详情

配置 dmmal.ini 和 dmwatcher.ini B 机器里 dmmal.ini、dmwatcher.ini 与 A 机器 GRP1_RT_01 的 dmmal.ini、dmwatcher.ini 相同,参照 A 机器 dmmal.ini、dmwatcher.ini ``文件进行配置。`

2.46服务器B-dmmal.ini配置

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /opt/dmdbms/data/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0

[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 10.127.17.107
MAL_PORT = 5238
MAL_INST_HOST = 10.127.17.107
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237

[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 10.127.17.110
MAL_PORT = 5238
MAL_INST_HOST = 10.127.17.110
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5237

2.47服务器B-dmwatcher.ini配置

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

2.48 注册服务

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount 
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini
若要删除自启
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_02
 [root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

2.5服务器C监视器

在第二台机器10.127.17.110上配置确认监视器,存放确认监视器配置文件,并注册后台自启服务。

2.5.1 服务器C-dmmonitor.ini

[dmdba@~]$ vi  /opt/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM=1
MON_LOG_PATH=/opt/dmdbms/log
MON_LOG_INTERVAL=60
MON_LOG_FILE_SIZE=512
MON_LOG_SPACE_LIMIT=2048
[GRP1]
MON_INST_OGUID=45331
MON_DW_IP=10.127.17.107:5239
MON_DW_IP=10.127.17.110:5239

2.5.2 服务器C-dmmonitor_manual.ini

在配置监视器时,一般配置好确认监视器后,建议再配置一个非确认监视器的配置文件,在主备发生切换时,可以通过前台的方式启动非确认监视器进行手动切换。非确认监视器是通过将监视器配置文件中 MON_DW_CONFIRM 参数值修改为 0 来实现。

MON_DW_CONFIRM=0
MON_LOG_PATH=/opt/dmdbms/log
MON_LOG_INTERVAL=60
MON_LOG_FILE_SIZE=512
MON_LOG_SPACE_LIMIT=2048
[GRP1]
MON_INST_OGUID=45331
MON_DW_IP=10.127.17.107:5239
MON_DW_IP=10.127.17.110:5239

2.5.3 服务器C-注册服务

/opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini

2.6 启动服务及查看信息

服务器A-主库启动到mount状态 
/opt/dmdbms/bin/dmserver  /opt/dmdbms/data/DAMENG/dm.ini mount

服务器B-主库启动到mount状态 root用户
/opt/dmdbms/bin/dmserver  /opt/dmdbms/data/DAMENG/dm.ini mount

##A 机器
[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RT_01 start
[dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/*****@xxx:5236
##启用参数修改模式(允许修改系统参数)# 1=开启,0=关闭
SQL>SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE PRIMARY;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS',0);
停库
##B 机器
[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RT_02 start
[dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/*****@xxx:5236
##启用参数修改模式(允许修改系统参数)# 1=开启,0=关闭
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS',1);
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE STANDBY;
##关闭参数修改模式(防止误操作)
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS',0);
停库

2.6.1启动主备库数据库服务

/opt/dmdbms/bin/DmServiceGRP1_RT_01 start 

服务器B-备库 
/opt/dmdbms/bin/DmServiceGRP1_02 start 
启动后,主备库状态应该是mount状态,只有所有DmWatcherServiceWatcher启动后,才会变成open状态

image.png

2.6.2启动主备库守护服务

服务器A-主库 
/opt/dmdbms/bin/DmWatcherServiceWatcher start 
服务器B-备库 
/opt/dmdbms/bin/DmWatcherServiceWatcher start

2.6.3启动确认监视器

启动确认监视器 
/opt/dmdbms/bin/DmMonitorServiceMonitor start 
非确认模式前台启动方法 
/opt/dmdbms/bin/dmmonitor  /opt/dmdbms/bin/dmmonitor_manual.ini

image.png

2.7 监视器的使用

2.7.1监视器常用命令

常用命令--show
可以看到数据库状态、守护进程状态,FLSN,CLSN等 
如果主库CLSN差异比较大,多输入几次show命令后,主库和备库之间的CLSN差值还是越来越大,就说明主备库存在延时,如果这种情况,保业务的话,可以先停备库。 
也可以使用 select cur_lsn from v$rlog; 查看主备库的lsn。比较主备库的差异。

常用命令-choose switchover/choose takeover
使用前必须输入login 登录监视器
再使用:
choose switchover GRP1
主备切换
--执行命令"switchover GRP1.实例名"进行切换
switchover GRP1.GRP1_RT_01
切换成功,GRP1_RT_01 恢复到主库对外提供服务。

监视器常用命令-show arch send info [group_name.]db_name 
显示源库到指定备库的日志发送信息,以及源库的控制守护进程本地到指定备库的Recovery 间隔 
信息。也支持异步备库的查询。 
show arch send info GRP1.GRP1_RT_02

SEND CODE:主库到指定备库的日志发送结果, 
Code 小于 0 表示发送失败, 
等于 0 表示发送成功, 
等于 100 表示实际未发送。 
SEND DESC INFO: 
主库到指定备库的日志发送结果描述信息。

image.png

2.8 集群开关顺序

image.png
image.png

2.9读写分离

读写分离集群可以配置为即时归档,也可以配置为实时归档,这两种配置方式仅仅是归档流程上有差别,读写分离集群的特性仍然是一致的。即时归档流程与实时归档流程存在一定差异:

主库先将日志写入本地联机 Redo 日志文件中,再发送 RLOG_PKG 到备库。
备库日志重演时机有两种选择:
事务一致模式 要求备库在重演 Redo 日志完成后再响应主库。
高性能模式 与实时归档一样,收到 Redo 日志后,马上响应主库

  1. 实时归档(REALTIME)的可行性​​
    ​​支持读写分离:实时归档模式完全支持读写分离集群,但需注意其同步机制:
    ​​高性能模式(默认):主库在写入联机Redo日志前,先将日志发送到备库,备库收到后立即响应主库(不等待重演完成)。此时备库数据可能存在毫秒级延迟,适用于对数据实时性要求不高的查询场景。
    ​​事务一致模式:备库需完成Redo日志重演后才响应主库,确保主备数据强一致,但会增加主库事务提交延迟。
    ​​配置注意事项:在dmarch.ini中设置ARCH_TYPE = REALTIME,并通过ARCH_WAIT_APPLY参数选择模式:
    ARCH_WAIT_APPLY = 0:高性能模式(默认)
    ARCH_WAIT_APPLY = 1:事务一致模式
    实时归档的事务一致模式会显著增加主库事务延迟(需等待备库重演),在高并发写入场景下可能成为性能瓶颈。若误用此模式,可能影响系统吞吐量。
    ​​KEEP_PKG机制差异​​
    实时归档的备库使用KEEP_PKG缓存未重演的日志包,若主库故障后重启,需根据场景决定重演或丢弃。
    即时归档无KEEP_PKG,日志直接加入重演队列,管理更简单。

image.png
dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。
初始 dm_svc.conf 文件由达梦安装时自动生成。不同的平台生成目录有所不同,注意相应访问用户需要对该文件有读取权限。

##以#开头的行表示是注释
##全局配置区
TIME_ZONE=(480)   #480分钟 = UTC+8(北京时间)
LANGUAGE=(cn)
DMRW=(10.127.17.107:5236,10.127.17.110:5236)
##服务配置
[DMRW]
LOGIN_MODE=(1)     #0:普通模式   1:非强制登录(兼容模式)
RW_SEPARATE=(1)     #0:关闭  1:开启  2:启用读写分离,备库由客户端选择,且只选择服务名中配置的节点
RW_PERCENT=(30)     #30表示30%读请求到主库/70%到备库
SWITCH_TIMES=(60)   ​​#故障切换重试次数​
SWITCH_INTERVAL=(1000) 

区别:
归档模式和主备读写分离架构没太大关系,具体配置什么归档类型根据需求配置,一般读写分离配置的为 ‘即时归档,事务一致’
高性能模式备机收到归档主机即可提交,立即查询可能备机数据与主机不一致
事务一致是备机重演完,主机才提交,确保主备机数据一致,但是数据写入效率等会受到备机的影响。
image.png
image.png

达梦社区地址 :https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服