注册
读写分离集群
技术分享/ 文章详情 /

读写分离集群

Arno 2025/09/05 18 0 0

读写分离集群

读写分离集群由一个主库以及一个或者多个配置即时(Timely)归档或实时(Realtime)归档的备库组成,其主要目标是在保障数据库可用性基础上,实现读、写操作的自动分离,进一步提升数据库的业务支撑能力。读写分离集群通过配置事务一致模式保证主、备库数据一致性,并配合达梦数据库管理系统的各种接口(JDBC、DPI 等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。

一、前提

主备机及监视器机器配置完成,已新建数据库软件,已关闭防火墙

二、初始化主库

1.初始化实例
./dminit PATH=/dm8/dmdbms/data SYSDBA_PWD=DMdba_123 SYSAUDITOR_PWD=DMauditor_123 INSTANCE_NAME=dmtest01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 CHARSET=0
2.前台启动数据库服务
./dmserver /dm8/dmdbms/data/DAMENG/dm.ini

3.开启归档
./disql SYSDBA/DMdba_123
SQL> alter database mount;
SQL> alter database archivelog;
SQL> alter database add archivelog ‘dest=/dm8/dmdbms/data/DAMENG/arch,type=local,file_size=2048,space_limit=51200’;
SQL> alter database open;

4.备份主库
SQL> backup database backupset ‘/dm8/dmdbms/data/DAMENG/bak/backup_20250829’;

5.修改主库dm.ini参数
ALTER_MODE_STATUS = 0 ##手工修改数据库状态和模式,0不允许,1允许
ENABLE_OFFLINE_TS = 2 ##不允许备库offline表空间
MAL_INI = 1 ##启用MAL系统
ARCH_INI = 1 ##启用归档

6.修改主库dmarch.ini参数
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL ##本地归档
ARCH_DEST = /dm8/dmdbms/data/DAMENG/arch ##归档目录
ARCH_FILE_SIZE = 2048 ##归档文件大小,单位MB
ARCH_SPACE_LIMIT = 51200 ##总归档文件大小,单位MB
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1

[ARCHIVE_REALTIME1]
ARCH_TYPE = TIMELY ##即时归档
ARCH_DEST = dmtest02 ##要写明其他所有主备库,有多个就写多条

7.修改主库dmwatcher.ini参数
[dmdw]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = AUTO ##自动切换,MANUAL手动切换
DW_ERROR_TIME = 10 ##远程守护进程故障认定时间
INST_ERROR_TIME = 10 ##本地实例故障认定时间
INST_RECOVER_TIME = 60 ##主库守护进程启动恢复间隔
INST_OGUID = 230801 ##守护系统唯一OGUID,可以用年月日命名
INST_INI = /dm8/dmdbms/data/DAMENG/dm.ini ##dm.ini路径
INST_AUTO_RESTART = 1 ##自动启动实例
INST_STARTUP_CMD = /dm8/dmdbms/bin/dmserver ##命令行启动方式
RLOG_SEND_THRESHOLD = 0 ##默认关闭,指定主库发送日志到备库的时间阈值
RLOG_APPLY_THRESHOLD = 0 ##默认关闭,指定备库重演日志的时间阈值

8.修改主库dmmal.ini参数
MAL_CHECK_INTERVAL = 10 ##MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 ##判定MAL链路断开的时间
MAL_TEMP_PATH = /dm8/dmdbms/data/malpath/ ##临时文件目录
MAL_BUF_SIZE = 512 ##单个MAL缓存大小,MB
MAL_SYS_BUF_SIZE = 2048 ##MAL总大小,MB
MAL_COMPRESS_LEVEL = 0 ##MAL压缩等级,0表示不压缩
[MAL_INST1]
MAL_INST_NAME = dmtest01 ##实例名,和dm.ini的INSTANCE_NAME一致
MAL_HOST = 192.168.184.13 ##内部ip
MAL_PORT = 5237 ##内部端口
MAL_INST_HOST = 192.168.184.13 ##对外ip
MAL_INST_PORT = 5236 ##对外端口,和dm.ini的PORT_NUM一致
MAL_DW_PORT = 5238 ##实例对应的守护进程端口
MAL_INST_DW_PORT = 5239 ##实例监听守护进程的端口
[MAL_INST2]
MAL_INST_NAME = dmtest02
MAL_HOST = 192.168.184.14
MAL_PORT = 5237
MAL_INST_HOST = 192.168.184.14
MAL_INST_PORT = 5236
MAL_DW_PORT = 5238
MAL_INST_DW_PORT = 5239

9.拷贝主库到备库
scp -r /dm8/dmdbms/data/DAMENG dmdba@dm02:/dm8/dmdbms/data/DAMENG

10.主库注册dmserver和dmwatcher
[root@dm01-priv ~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p dmtest01 -dm_ini /dm8/dmdbms/data/DAMENG/dm.ini -m mount
创建服务(DmServicedmtest01)完成
[root@dm01-priv ~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini
创建服务(DmWatcherServiceWatcher)完成

三、初始化备库

1.修改备库dm.ini中的INSTANCE_NAME
INSTANCE_NAME = DMTEST02

2.修改备库dmarch.ini中的ARCH_DEST
ARCH_DEST = dmtest01 ##要写明其他所有主备库,有多个就写多条

3.备库注册dmserver和dmwatcher
[root@dm02-priv ~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p dmtest02 -dm_ini /dm8/dmdbms/data/DAMENG/dm.ini -m mount
创建服务(DmServicedmtest02)完成

[root@dm02-priv ~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini
创建服务(DmWatcherServiceWatcher)完成

4.备库恢复数据
还原
[dmdba@dm02-priv ~]$ dmrman CTLSTMT=“RESTORE DATABASE ‘/dm8/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/dm8/dmdbms/data/DAMENG/bak/backup_20230801’”
恢复
[dmdba@dm02-priv ~]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/dm8/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/dm8/dmdbms/data/DAMENG/bak/backup_20230801’” d
更新
[dmdba@dm02-priv ~]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/dm8/dmdbms/data/DAMENG/dm.ini’ UPDATE DB_MAGIC”

四、配置监听器

1.配置dmmonitor.ini参数
MON_DW_CONFIRM = 0 ##0非确认,故障手切;1确认,故障自切
MON_LOG_PATH = /dm8/dmdbms/log ##监视器日志路径
MON_LOG_INTERVAL = 60 ##每隔60秒记录日志
MON_LOG_FILE_SIZE = 512 ##单个日志大小,MB
MON_LOG_SPACE_LIMIT = 2048 ##日志上限,MB
[dmdw]
MON_INST_OGUID = 230801 ##组唯一OGUID
MON_DW_IP = 192.168.184.13:5238 ##MAL_HOST:MAL_DW_PORT
MON_DW_IP = 192.168.184.14:5238

2.注册监视器
[root@dmdw ~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p dmdw -monitor_ini /dm8/dmdbms/bin/dmmonitor.ini
创建服务(DmMonitorServicedmdw)完成

五、启动数据库

1.启动主库,修改参数
主库前台启动到mount,防止主库修改数据,导致主备库数据不一致
[dmdba@dm01-priv ~]$ dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount

另开窗口,disql中执行
SQL> sp_set_para_value(1,‘ALTER_MODE_STATUS’,1);
SQL> sp_set_oguid(230801);
SQL> alter database primary;
SQL> sp_set_para_value(1,‘ALTER_MODE_STATUS’,0);

2.启动备库,修改参数
备库启动到mount
[dmdba@dm02-priv ~]$ dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount

另开窗口,disql中执行
SQL> sp_set_para_value(1,‘ALTER_MODE_STATUS’,1);
SQL> sp_set_oguid(230801);
SQL> alter database standby;
SQL> sp_set_para_value(1,‘ALTER_MODE_STATUS’,0);

3.按顺序启动服务
启动主库数据库服务
[dmdba@dm01-priv ~]$ DmServicedmtest01 restart
启动备库数据库服务
[dmdba@dm02-priv ~]$ DmServicedmtest02 restart
启动主库守护服务
[dmdba@dm01-priv ~]$ DmWatcherServiceWatcher restart
启动备库守护服务
[dmdba@dm02-priv ~]$ DmWatcherServiceWatcher restart
启动监视器服务
[dmdba@dmdw ~]$ DmMonitorServicedmdw restart

4.监视器查看数据库状态
[dmdba@dmdw ~]$ dmmonitor /dm8/dmdbms/bin/dmmonitor.ini
11.png

六、切换测试

在dmmonitor /dm8/dmdbms/bin/dmmonitor.ini下:
login
用户名:SYSDBA
密码:
[monitor] 2025-08-29 10:58:45: 登录监视器成功!

switchover dmdw.DMTEST02
此操作需谨慎, 将会导致主库发生切换, 是否继续使用dmdw.DMTEST02执行SWITCHOVER操作(YES/NO/Y/N)?
Y
12.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服