DMRWC集群概述:
达梦读写分离集群(DMRWC)是DM8提供的一个用于提升并发事务处理性能的集群组件。在一个高并发的事务型系统中,当写事务占的比例相对读事务较小时,DM8提供的这种独具创新的方案DMRWC,可通过客户端来实现读、写事务的自动分离,读事务在备机执行,写事务在主机执行,减轻主机的负载。可配置多台备机,通过增加备机节点资源,提高系统的并发能力,增强系统性能。
1)性能提升
DMRWC特别适用于办公系统、网站等以读为主、只读事务多于写事务的业务场景,在这样的场景中的性能可以得到较明显的提升。
2)高可用性
可配置多个实时备机冗余,提升可靠性;支持秒级的故障快速切换。
3)可扩展性
随着用户访问数量的增加,可以增加备机对集群进行扩容,最多可扩展到8台备机;系统性能、可靠性随着节点的增加而增强。
4)可移植性
DMRWC属于纯软解决方案,具备高度的可移植性。提供跨平台支持,主备机可以跨不同的硬件和操作系统平台使用。对应用透明,不需要对应用程序进行修改就可使用。
操作系统设置-[两节点]:
操作系统设置
1、创建用户组、用户
[root@dameng home]# groupadd dinstall
[root@dameng home]# useradd -g dinstall dmdba
[root@dameng home]# passwd dmdba
PWD : dmdba
资源限制:
cat >> /etc/security/limits.conf << EOF
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft stack 65536
dmdba hard stack 65536
EOF
配置环境变量:
cat >> /home/dmdba/.bash_profile << EOF
export DM_HOME="/dm/dmdbms"
export LD_LIBRARY_PATH="\$LD_LIBRARY_PATH:\$DM_HOME/bin"
export PATH=\$PATH:\$DM_HOME/bin:\$DM_HOME/tool
EOF
安装DM数据库软件[两节点]:
安装达梦数据库管理系统
安装和创建响应目录
上传iso文件或者DMInstall.bin,我是直接上传的DMInstall.bin,放在/home下
mount -t iso9660 ./dm8_20240920_x86_rh7_64.iso /mnt/
[root@node11 mnt]# cd /mnt/
[root@node11 mnt]# pwd
/mnt
[root@node11 mnt]#
DM8 Install.pdf DMInstall.bin
[root@node11 mnt]# cp /mnt/DMInstall.bin /home/dmdba/
[root@node11 mnt]#chown -R dmdba:dinstall /home/dmdba/DMInstall.bin
[root@node11 mnt]#chmod -R 755 /home/dmdba/DMInstall.bin
创建软件安装目录:
[root@dameng dmdba]# mkdir /dm/dmdbms -p
[root@dameng dmdba]#chown dmdba.dinstall /dm/dmdbms
切换dmdba登录
su - dmdba
[dmdba@dameng dmdba]#mkdir /dm/dmdbms/ -p
[dmdba@node11 ~]$ ./DMInstall.bin -i
安装语言:
[1]: 简体中文
[2]: English
请选择安装语言 [1]:1
解压安装程序..........
硬件架构校验通过!
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: (GTM-12:00) 日界线西
[ 2]: (GTM-11:00) 萨摩亚群岛
[ 3]: (GTM-10:00) 夏威夷
[ 4]: (GTM-09:00) 阿拉斯加
[ 5]: (GTM-08:00) 太平洋时间(美国和加拿大)
[ 6]: (GTM-07:00) 亚利桑那
[ 7]: (GTM-06:00) 中部时间(美国和加拿大)
[ 8]: (GTM-05:00) 东部部时间(美国和加拿大)
[ 9]: (GTM-04:00) 大西洋时间(美国和加拿大)
[10]: (GTM-03:00) 巴西利亚
[11]: (GTM-02:00) 中大西洋
[12]: (GTM-01:00) 亚速尔群岛
[13]: (GTM) 格林威治标准时间
[14]: (GTM+01:00) 萨拉热窝
[15]: (GTM+02:00) 开罗
[16]: (GTM+03:00) 莫斯科
[17]: (GTM+04:00) 阿布扎比
[18]: (GTM+05:00) 伊斯兰堡
[19]: (GTM+06:00) 达卡
[20]: (GTM+07:00) 曼谷,河内
[21]: (GTM+08:00) 中国标准时间
[22]: (GTM+09:00) 首尔
[23]: (GTM+10:00) 关岛
[24]: (GTM+11:00) 所罗门群岛
[25]: (GTM+12:00) 斐济
[26]: (GTM+13:00) 努库阿勒法
[27]: (GTM+14:00) 基里巴斯
请选择时区 [21]:
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:2
所需空间: 1525M
请选择安装目录 [/home/dmdba/dmdbms]: /dm/dmdbms/
可用空间: 92G
是否确认安装路径(/home/dmdba/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置:/dm/dmdbms/
所需空间: 1525M
可用空间: 92G
版本信息:
有效日期:
安装类型: 服务器
是否确认安装? (Y/y:是 N/n:否):y
2024-11-27 21:28:33
[INFO] 安装 基础 模块...
2024-11-27 21:28:33
[INFO] 安装达梦数据库...
2024-11-27 21:28:42
[INFO] 安装 服务器 模块...
2024-11-27 21:28:45
[INFO] 安装 驱动 模块...
2024-11-27 21:28:47
[INFO] 安装 手册 模块...
2024-11-27 21:28:47
[INFO] 安装 服务 模块...
2024-11-27 21:28:47
[INFO] 移动日志文件。
2024-11-27 21:28:48
[INFO] 安装达梦数据库完成。
请以root系统用户执行命令:
/dm/dmdbms/script/root/root_installer.sh
安装结束
切换到ROOT用户下,执行命令:
[root@node11 ~]# /dm/dmdbms/script/root/root_installer.sh
移动 /dm/dmdbms/bin/dm_svc.conf 到/etc目录
创建DmAPService服务
Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动DmAPService服务
另外一个节点也按上面步骤进行安装
修改数据库实例名称[两节点]:
在达梦数据库中修改实例名,可以按照以下步骤进行操作:
节点1:
停止达梦数据库服务:
首先,需要停止正在运行的达梦数据库服务。这可以通过系统服务管理工具(如Windows的服务管理器或Linux的systemctl)来完成。例如,在Linux系统中,可以使用以下命令停止服务:
systemctl stop DmServiceDMSERVER.service
找到达梦数据库的配置文件:
达梦数据库的配置文件通常位于数据库安装目录下的dm.ini文件。例如,如果数据库安装在/dm8/data/<原实例名>目录下,则配置文件路径可能为/dm8/data/<原实例名>/dm.ini。
vim /home/dmdba/dmdbms/data/DAMENG/dm.ini
在配置文件中找到实例名的设置项:
打开dm.ini配置文件,找到INSTANCE_NAME参数。这个参数定义了数据库的实例名。
INSTANCE_NAME = <原实例名>
请将<原实例名>替换为当前的实例名。
修改实例名为新的名称:
将INSTANCE_NAME参数的值修改为新的实例名。例如,如果要将其修改为new_instance_name,则修改后的配置文件行应为:
INSTANCE_NAME = new_instance_name
INSTANCE_NAME = DMRWC01
使用以下命令重新注册系统服务(root用户执行):
[root@node10 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -p DMRWC01
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMRWC01.service to /usr/lib/systemd/system/DmServiceDMRWC01.service.
创建服务(DmServiceDMRWC01)完成
[root@node10 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -s /home/dmdba/dmdbms/bin/DmServiceDMRWC01
创建服务(DmServiceDMRWC01)完成
在Linux系统中,可以使用以下命令启动服务:
systemctl start DmService<新实例名>.service
[root@node10 ~]# systemctl start DmServiceDMRWC01
[root@node10 ~]# systemctl enable DmServiceDMRWC01
数据库服务启动后,查看实例名修改情况:
[dmdba@node10 DAMENG]$ disql
服务器[172.16.1.10:5236]:处于普通打开状态
登录使用时间 : 3.327(ms)
disql V8
SQL> select * from v$instance;
行号 NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION
---------- ------- ------------- --------------- --------- -------------------------- -------------------
START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE
------------------- ------- ------ ----------- ----------- --------
BUILD_VERSION BUILD_TIME
---------------------------------- --------------------
1 DMRWC01 DMRWC01 1 node10 DM Database Server x64 V8 DB Version: 0x7000c
2025-01-21 15:05:21 OPEN NORMAL 0 0 NULL
1-4-6-2024.09.19-243448-20119-ENT Sep 19 2024 12:09:06
已用时间: 1.344(毫秒). 执行号:601.
节点2:
停止达梦数据库服务:
首先,需要停止正在运行的达梦数据库服务。这可以通过系统服务管理工具(如Windows的服务管理器或Linux的systemctl)来完成。例如,在Linux系统中,可以使用以下命令停止服务:
systemctl stop DmServiceDMSERVER.service
修改实例名为新的名称:
将INSTANCE_NAME参数的值修改为新的实例名。
vim /home/dmdba/dmdbms/data/DAMENG/dm.ini
例如,如果要将其修改为new_instance_name,则修改后的配置文件行应为:
INSTANCE_NAME = new_instance_name
INSTANCE_NAME = DMRWC02
使用以下命令重新注册系统服务(root用户执行):
[root@node11 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -p DMRWC02
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMRWC02.service to /usr/lib/systemd/system/DmServiceDMRWC02.service.
创建服务(DmServiceDMRWC02)完成
[root@node11 ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -s /home/dmdba/dmdbms/bin/DmServiceDMRWC02
创建服务(DmServiceDMRWC02)完成
在Linux系统中,可以使用以下命令启动服务:
systemctl start DmService<新实例名>.service
[root@node11 ~]# systemctl start DmServiceDMRWC02
[root@node11 ~]# systemctl enable DmServiceDMRWC02
数据库服务启动后,查看实例名修改情况:
[root@node11 ~]# su - dmdba
上一次登录:二 1月 21 15:27:30 CST 2025pts/0 上
[dmdba@node11 ~]$ disql
服务器[172.16.1.11:5236]:处于普通打开状态
登录使用时间 : 5.585(ms)
disql V8
SQL> select * from v$instance;
行号 NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION
---------- ------- ------------- --------------- --------- -------------------------- -------------------
START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE
------------------- ------- ------ ----------- ----------- --------
BUILD_VERSION BUILD_TIME
---------------------------------- --------------------
1 DMRWC02 DMRWC02 1 node11 DM Database Server x64 V8 DB Version: 0x7000c
2025-01-21 15:30:24 OPEN NORMAL 0 0 NULL
1-4-6-2024.09.19-243448-20119-ENT Sep 19 2024 12:09:06
已用时间: 1.234(毫秒). 执行号:601.
DM8数据守护集群安装部署:
一.安装前准备
1.1 硬件环境建议
数据守护集群安装部署前需要额外注意网络环境和磁盘 IO 配置情况,其他环境配置项建议请参考安装前准备工作。
1.1.1 网络环境
心跳网络对 mal 通讯系统的影响非常大,如果网络丢包或者延迟较大,则会严重影响 mal 系统的处理能力,从而导致整个集群出现响应服务请求慢的情况。为确保集群的稳定性,网络配置如下:
使用千兆或千兆以上网络;
集群间的心跳网络需同步数据,建议尽量使用两个交换机构建内网,以实现冗余和负载均衡;
建议服务器采用两个网卡绑定为一个逻辑网卡来使用(比如 bond 方式)。
1.1.2 磁盘 IO
磁盘 IO 的读写速率会极大影响系统性能和用户体验。因此在进行集群安装部署前,应测试 IO 性能能否满足系统功能和性能需求。
IO 性能指标与系统的并发数、热点数据等因素往往密切相关。在数据守护集群,尤其生产系统中,推荐使用高性能 SSD 磁盘,以获得更佳性能,保证集群数据的实时同步。
1.2 集群规划
确认监视器 IP 为 10.10.10.10。
说明:具体规划及部署方式以现场环境为准。
1.3 集群架构
搭建的主备集群架构如下图:
1.4 切换模式说明
ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。
故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1。
ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(较大性能衰减);如果不需要,则配置为 0。
二.集群搭建
前提:
2个节点都已安装数据库软件
数据库软件安装略
2.1 配置 A 机器
2.1.1 初始化实例并备份数据
初始化实例
[dmdba@localhost ~]$ /home/dmdba/dmdbms/bin/dminit PATH=/dm/dmdata PAGE_SIZE=32 EXTENT_SIZE=32
LOG_SIZE=2048 CASE_SENSITIVE=0 CHARSET=1 LENGTH_IN_CHAR=0 INSTANCE_NAME=DMRWC01 PORT_NUM=5236
参数解释
PAGE_SIZE:
EXTENT_SIZE:
LOG_SIZE:日志文件大小
CASE_SENSITIVE:建议从 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,默认为区分。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。
CHARSET/UNICODE_FLAG:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0
DB_NAME:初始化数据库名称,默认为 DAMENG
INSTANCE_NAME:初始化数据库实例名称,默认为 DMSERVER
PORT_NUM:数据库端口号,默认5236
LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。取值为 1 或者 Y 表示是,取值为 0 或 N 表示否。默认值为 0
特此说明:达梦的字段一般都是大写的,但是程序中写的sql都是小写。大小写是否敏感需要和开发确认,本案例中都是不敏感
启动服务
[dmdba@~]$ /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini
开启归档
[dmdba@~]$ /home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA@172.16.1.10:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmdbms/data/DAMENG/bak, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
备份数据
[dmdba@node10 ~]$ mkdir dmbak
[dmdba@node10 ~]$ pwd
/home/dmdba
SQL> BACKUP DATABASE BACKUPSET '/home/dmdba/dmbak/';
修改 dm.ini
[dmdba@~]$ /home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA@172.16.1.10:5236
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60); --接收守护进程消息超时时间
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0); --不允许手工方式修改实例模式/状态/OGUID
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2); --不允许备库OFFLINE表空间
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1); --打开MAL系统
SQL> SP_SET_PARA_VALUE (2,'ARCH_INI',1); --打开归档配置
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64); --统计最近64次的日志发送信息
关闭实例服务
SQL> shutdown immediate;
2.1.2 修改 dmarch.ini
[dmdba@~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/bak
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DMRWC02
配置参数详解:
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/bak #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMRWC02 #实时归档目标实例名
2.1.3 创建 dmmal.ini
mkdir -p /home/dmdba/dmdbms/data/malpath/
[dmdba@~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /home/dmdba/dmdbms/data/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0
[MAL_INST1]
MAL_INST_NAME = DMRWC01
MAL_HOST = 192.168.26.114
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.10
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST2]
MAL_INST_NAME = DMRWC02
MAL_HOST = 192.168.26.115
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.11
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
配置文件详细说明:
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /home/dmdba/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 = DMRWC01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.26.114 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 172.16.1.10 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DMRWC02 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.26.115 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 172.16.1.11 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
2.1.4 创建 dmwatcher.ini
[dmdba@~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /home/dmdba/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
配置详细说明:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
2.1.5 拷贝备份文件
##拷贝备份文件到 B 机器
[dmdba@~]$ scp -r /home/dmdba/dmbak/* dmdba@172.16.1.11:/home/dmdba/dmbak/
2.1.6 注册服务(要以root用户执行下面的命令)
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMRWC01 -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -m mount
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
若要删除自启,可利用如下方式:
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDMRWC01
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
注册过程:
[root@localhost BACKUP_FILE]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMRWC01 -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMRWC01.service to /usr/lib/systemd/system/DmServiceDMRWC01.service.
Finished to create the service (DmServiceDMRWC01)
[root@localhost BACKUP_FILE]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcher.service to /usr/lib/systemd/system/DmWatcherServiceWatcher.service.
Finished to create the service (DmWatcherServiceWatcher)
注册完成后,服务会随操作系统一起启动,在生产环境建议禁止随操作系统启动:
执行以下命令关闭随操作系统一起启动:
systemctl disable DmMonitorServiceMonitor.service
systemctl disable DmServiceDMRWC01.service
systemctl disable DmWatcherServiceWatcher.service
[root@node10 ~]# systemctl list-unit-files| grep Dm
DmAPService.service enabled
DmMonitorServiceMonitor.service disabled
DmServiceDMRWC01.service disabled
DmWatcherServiceWatcher.service disabled
2.2 配置 B 机器
2.2.1 初始化实例
[dmdba@localhost ~]$ /home/dmdba/dmdbms/bin/dminit PATH=/dm/dmdata PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=0 CHARSET=1 LENGTH_IN_CHAR=0 INSTANCE_NAME=DMRWC02 PORT_NUM=5236
参数解释
PAGE_SIZE:
EXTENT_SIZE:
LOG_SIZE:日志文件大小
CASE_SENSITIVE:建议从 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,默认为区分。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。
CHARSET/UNICODE_FLAG:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0
DB_NAME:初始化数据库名称,默认为 DAMENG
INSTANCE_NAME:初始化数据库实例名称,默认为 DMSERVER
PORT_NUM:数据库端口号,默认5236
LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。取值为 1 或者 Y 表示是,取值为 0 或 N 表示否。默认值为 0
特此说明:达梦的字段一般都是大写的,但是程序中写的sql都是小写。大小写是否敏感需要和开发确认,本案例中都是不敏感
2.2.2 恢复数据
[dmdba@~]$ /home/dmdba/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak'"
[dmdba@~]$ /home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak'"
[dmdba@~]$ /home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
2.2.3 替换 dmarch.ini
[dmdba@~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/bak
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DMRWC01
配置说明:
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/bak #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMRWC01 #实时归档目标实例名
2.2.4 配置 dm.ini、dmmal.ini 和 dmwatcher.ini
配置 dm.ini
在 B 机器上配置备库的实例名为 DMRWC02,dm.ini 参数修改如下:
vi /home/dmdba/dmdbms/data/DAMENG/dm.ini
INSTANCE_NAME = DMRWC02
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 次的日志重演信息
或
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60); --接收守护进程消息超时时间
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0); --不允许手工方式修改实例模式/状态/OGUID
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2); --不允许备库OFFLINE表空间
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1); --打开MAL系统
SQL> SP_SET_PARA_VALUE (2,'ARCH_INI',1); --打开归档配置
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64); --统计最近64次的日志发送信息
配置 dmmal.ini 和 dmwatcher.ini
B 机器里 dmmal.ini、dmwatcher.ini 与 A 机器 DMRWC01 的 dmmal.ini、dmwatcher.ini 相同,参照 A 机器 dmmal.ini、dmwatcher.ini 文件进行配置。
补充:
主备库的dmmal.ini配置是一致的;dmwatcher.ini里主备的配置文件路径、命令行方式启动的路径一致的话,dmwatcher.ini一致,建议相关路径一致;特殊情况备库RLOG_APPLY_THRESHOLD 如指定备库重演日志的时间阈值,如果有需要开启的话,需在备库配置。
创建 dmmal.ini
mkdir -p /home/dmdba/dmdbms/data/malpath/
[dmdba@~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /home/dmdba/dmdbms/data/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0
[MAL_INST1]
MAL_INST_NAME = DMRWC01
MAL_HOST = 192.168.26.114
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.10
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST2]
MAL_INST_NAME = DMRWC02
MAL_HOST = 192.168.26.115
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.11
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
创建 dmwatcher.ini
[dmdba@~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /home/dmdba/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
2.2.5 注册服务
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMRWC02 -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -m mount
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
若要删除自启,可利用如下方式:
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_02
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
注册服务过程:
[root@localhost dmarch]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMRWC02 -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMRWC02.service to /usr/lib/systemd/system/DmServiceDMRWC02.service.
Finished to create the service (DmServiceDMRWC02)
[root@localhost bin]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcher.service to /usr/lib/systemd/system/DmWatcherServiceWatcher.service.
Finished to create the service (DmWatcherServiceWatcher)
注册完成后,服务会随操作系统一起启动,在生产环境建议禁止随操作系统启动:
执行以下命令关闭随操作系统一起启动:
systemctl disable DmMonitorServiceMonitor.service
systemctl disable DmServiceDMRWC01.service
systemctl disable DmWatcherServiceWatcher.service
[root@node10 ~]# systemctl list-unit-files| grep Dm
DmAPService.service enabled
DmMonitorServiceMonitor.service disabled
DmServiceDMRWC01.service disabled
DmWatcherServiceWatcher.service disabled
2.3 配置监视器
手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。
2.3.1 创建 dmmonitor.ini
[dmdba@~]$ vi /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.26.114:5436
MON_DW_IP = 192.168.26.115:5436
参数配置详解:
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.26.114:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.26.115:5436
同步传输 dmmonitor.ini至172.16.1.11备节点
scp /home/dmdba/dmdbms/bin/dmmonitor.ini dmdba@172.16.1.11:/home/dmdba/dmdbms/bin/dmmonitor.ini
2.3.2 注册服务(选做)
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
若要删除自启,可利用如下方式:
[root@~]# /home/dmdba/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor
脚本注册过程:
[root@localhost bin]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMonitor.service to /usr/lib/systemd/system/DmMonitorServiceMonitor.service.
Finished to create the service (DmMonitorServiceMonitor)
2.3.3 监视器使用
进入监视器。
安装目录的bin目录下 ./dmmonitor 加上dmmonitor.ini路径
若ini也在bin目录,可直接执行 ./dmmonitor dmmonitor.ini
/home/dmdba/dmdbms/bin/dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini
可视情况执行如下命令:
2.4 启动服务及查看信息:
2.4.1 启动数据库并修改参数
##A 机器
启动数据库到mount状态:
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount
#前台mount方式启动数据库
disql SYSDBA/123456789@172.16.1.10:5236
#disql命令行登录数据库
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45331);
alter database primary;
#配置为主库状态
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
##B 机器
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount
#前台mount方式启动数据库
disql SYSDBA/123456789@172.16.1.10:5236
#disql命令行登录数据库
SQL> ALTER DATABASE ARCHIVELOG;
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.4.2 启动守护进程
##A/B机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
2.4.3 启动监视器
##后台启动
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
##前台启动
[dmdba@~]$ /home/dmdba/dmdbms/bin/dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini
2.5 启停集群
##启动
A机器:
[dmdba@node10 ~]$ /home/dmdba/dmdbms/bin/DmServiceDMRWC01 start
Starting DmServiceDMRWC01: [ OK ]
B机器:
[dmdba@node11 ~]$ /home/dmdba/dmdbms/bin/DmServiceDMRWC02 start
Starting DmServiceDMRWC02: [ OK ]
##A/B 机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
A机器:登录
[dmdba@node10 ~]$ disql
服务器[172.16.1.10:5236]:处于主库打开状态
登录使用时间 : 4.903(ms)
disql V8
SQL> select * from v$instance;
行号 NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION
---------- ------- ------------- --------------- --------- -------------------------- -------------------
START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE
------------------- ------- ------- ----------- ----------- --------
BUILD_VERSION BUILD_TIME
---------------------------------- --------------------
1 DMRWC01 DMRWC01 1 node10 DM Database Server x64 V8 DB Version: 0x7000c
2025-01-22 16:10:31 OPEN PRIMARY 45331 0 NULL
1-4-6-2024.09.19-243448-20119-ENT Sep 19 2024 12:09:06
已用时间: 38.968(毫秒). 执行号:801.
B机器:登录
[dmdba@node11 ~]$ disql
服务器[172.16.1.11:5236]:处于备库打开状态
登录使用时间 : 3.645(ms)
disql V8
SQL> select * from v$instance;
行号 NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION
---------- ------- ------------- --------------- --------- -------------------------- -------------------
START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE
------------------- ------- ------- ----------- ----------- --------
BUILD_VERSION BUILD_TIME
---------------------------------- --------------------
1 DMRWC02 DMRWC02 1 node11 DM Database Server x64 V8 DB Version: 0x7000c
2025-01-22 16:11:11 OPEN STANDBY 45331 0 NULL
1-4-6-2024.09.19-243448-20119-ENT Sep 19 2024 12:09:06
已用时间: 0.697(毫秒). 执行号:201.
##停止集群:
##A/B机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
##A 机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceDMRWC01 stop
##B机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceDMRWC02 stop
查看dmwatcher端口是否启动:
A机器:
[dmdba@node10 log]$ lsof -i:5436
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dmwatcher 24352 dmdba 3u IPv6 71641 0t0 TCP *:5436 (LISTEN)
dmwatcher 24352 dmdba 5u IPv4 76066 0t0 TCP node10:53306->192.168.26.115:5436 (ESTABLISHED)
B机器:
[dmdba@node11 ~]$ lsof -i:5436
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dmwatcher 20902 dmdba 3u IPv6 66080 0t0 TCP *:5436 (LISTEN)
dmwatcher 20902 dmdba 4u IPv6 66081 0t0 TCP node11:5436->192.168.26.114:53306 (ESTABLISHED)
2.6.构建数据同步
读写分离和数据守护集群备库均是只读库
--主库创建
/home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA@172.16.1.10:5236
create table test2(id int);
insert into test2 values(10);
commit;
--备库查看
select * from test2;




