达梦数据守护集群部署

接上篇

达梦8单机规范化部署
https://blog.csdn.net/qq_25045631/article/details/139898690

1. 集群规划

在正式生产环境中,两台机器建议使用统一配置的服务器。使用千兆或千兆以上网络。

两台虚拟机各加一块网卡,仅主机模式,作为心跳网卡(MAL_HOST),若只有一块网卡,心跳IP可以和对外提供访问的IP一样

节点1 节点2
业务IP 192.168.25.101 192.168.25.102
心跳IP MAL_HOST 172.25.0.101 172.25.0.102
实例名 GRP1_RT_01 GRP1_RT_02
实例端口 5236 5236
MAL端口 MAL_PORT 61141 61142
MAL守护进程端口 MAL_DW_PORT 52141 52142
守护进程端口 MAL_INST_DW_PORT 33141 33142
OGUID 453331 453331
守护组 GRP1 GRP1
安装目录 /opt/dmdbms /opt/dmdbms
实例目录 /opt/dmdbms/data /opt/dmdbms/data
归档上限 磁盘空间的1/10 磁盘空间的1/10

MAL系统是基于TCP协议实现的一种内部通信机制,DM通过MAL系统实现Redo日志传输,以及其他一些实例间的消息通讯。

守护进程(dmwatcher)是数据库实例和监视器之间信息流转的桥梁。数据库实例向本地守护进程发送信息,接收本地守护进程的消息和命令;

监视器(dmmonitor)接收守护进程的消息,并向守护进程发送命令;数据库实例与监视器之间没有直接的消息交互;守护进程解析并执行监视器发起的各种命令(Switchover/Takeover/Open force等),并在必要时通知数据库实例执行相应的操作。

2. 配置防火墙

bash 复制代码
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.25.101" accept" --permanent
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.25.102" accept" --permanent
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="172.25.0.101" accept" --permanent
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="172.25.0.102" accept" --permanent
firewall-cmd --reload

3. 开启本地归档

方法一:SQL 命令方式开启归档

登录数据库执行如下 SQL 语句:

##这里的归档目录会自动创建

ALTER DATABASE MOUNT;

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=20480';

ALTER DATABASE OPEN;

##修改归档配置,可以在open状态下执行

##如果要修改归档目录,只能修改dmarch.ini文件,并重启实例生效

ALTER DATABASE MODIFY ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=128, SPACE_LIMIT=10240';

方法二:修改数据库配置文件方式开启归档

##修改数据库实例的 /opt/dmdbms/data/DAMENG/dm.ini文件中 ARCH_INI 参数值

vi /opt/dmdbms/data/DAMENG/dm.ini

ARCH_INI = 1

##新增文件dmarch.ini

bash 复制代码
vi /opt/dmdbms/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY      = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240

##最后重启数据库完成归档配置

4. 备份主库

可以使用联机备份

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

这里使用DMRMAN脱机备份

bash 复制代码
[root@node1 ~]# systemctl stop DmServiceDM
[root@node1 ~]# su - dmdba
[dmdba@node1 ~]$ dmrman
RMAN> backup database '/opt/dmdbms/data/DAMENG/dm.ini' full backupset '/opt/dmdbms/data/DAMENG/bak/db_full_bak';
backup database '/opt/dmdbms/data/DAMENG/dm.ini' full backupset '/opt/dmdbms/data/DAMENG/bak/db_full_bak';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[43184], file_lsn[43184]
Processing backupset /opt/dmdbms/data/DAMENG/bak/db_full_bak
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
backup successfully!
time used: 00:00:03.999

拷贝数据到备库

bash 复制代码
[dmdba@node1 ~]$ scp -r /opt/dmdbms/data/DAMENG/bak/db_full_bak [email protected]:/home/dmdba/

5. 始化备库实例并恢复数据

要配置dmdba用户的环境变量才可以写绝对路径

bash 复制代码
[dmdba@node2 ~]$ /opt/dmdbms/bin/dminit path=/opt/dmdbms/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DAMENG INSTANCE_NAME=GRP1_RT_02 LOG_SIZE=256 PORT_NUM=5236


[dmdba@node2 ~]$ dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/db_full_bak'"
dmrman V8
RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/db_full_bak'
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:02.907


[dmdba@node2 ~]$ dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/db_full_bak'"
dmrman V8
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/db_full_bak'
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[43184], file_lsn[43184]
recover successfully!
time used: 599.685(ms)


[dmdba@node2 ~]$ dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
dmrman V8
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[43184], file_lsn[43184]
recover successfully!
time used: 00:00:01.127

6. 修改dm.ini

修改主备库参数,注意2个库的instance_name不一样

bash 复制代码
[dmdba@node1 ~]$ vi /opt/dmdbms/data/DAMENG/dm.ini
INSTANCE_NAME = GRP1_RT_01/GRP1_RT_02
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 次的日志重演信息

dmdba@node1 \~\]$ egrep 'INSTANCE_NAME\|PORT_NUM\|DW_INACTIVE_INTERVAL\|ALTER_MODE_STATUS\|ENABLE_OFFLINE_TS\|MAL_INI\|ARCH_INI\|RLOG_SEND_APPLY_MON' /opt/dmdbms/data/DAMENG/dm.ini ### 7. 配置dmarch.ini 2个节点都要配置,ARCH_DEST分别写对方的实例名。 ```bash [dmdba@node1 ~]$ vi /opt/dmdbms/data/DAMENG/dmarch.ini #DaMeng Database Archive Configuration file #this is comments #ARCH_WAIT_APPLY = 1 #0:高性能 1:事务一致 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /opt/dmdbms/data/DAMENG/arch #本地归档存放路径 ARCH_FILE_SIZE = 128 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 10240 #归档上限,单位 MB ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = GRP1_RT_01/GRP1_RT_02 #实时归档目标实例名 ``` ### 8. 配置dmmal.ini 2个节点都要配置,配置相同 ```bash [dmdba@node1 ~]$ vi /opt/dmdbms/data/DAMENG/dmmal.ini MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 #MAL_TEMP_PATH = /opt/dmdbms/data/malpath/ #临时文件目录。当邮件使用的内存超过MAL_BUF_SIZE或者MAL_SYS_BUF_SIZE时,将新产生的邮件保存到临时文件中。如果缺省,则新产生的邮件保存到temp.dbf文件中 #MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB #MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB #MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_HOST = 172.25.0.101 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.25.101 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 172.25.0.102 MAL_PORT = 61142 MAL_INST_HOST = 192.168.25.102 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142 ``` ### 9. 配置dmwatcher.ini 2个节点都要配置,配置相同 ```bash [dmdba@node1 ~]$ vi /opt/dmdbms/data/DAMENG/dmwatcher.ini [GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 ``` ### 10. 启动主备库 以mount模式启动 一定要以mount方式启动数据库实例,否则系统启动时会重构回滚表空间,生成Redo日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动Open数据库。 \[dmdba@node1 \~\]$ dmserver /opt/dmdbms/data/DAMENG/dm.ini mount \[dmdba@node2 \~\]$ dmserver /opt/dmdbms/data/DAMENG/dm.ini mount ### 11. 设置OGUID 在主/备库分别执行 \[dmdba@node1 \~\]$ disql SYSDBA/[email protected]:5236 SQL\> sp_set_oguid(453331); ### 12. 修改数据库模式 在主库执行 SQL\> alter database primary; 在备库执行 SQL\> alter database standby; 如果当前数据库不是normal模式,需要先修改dm.ini中ALTER_MODE_STATUS值为1,允许修改数据库模式,修改 Standby 模式成功后再改回为0。 ### 13. 注册并启动守护进程 root用户在备库执行 ```bash [root@node2 ~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM -dm_ini /opt/dmdbms/data/DAMENG/dm.ini [root@node2 ~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DM -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceDMSERVER.service to /usr/lib/systemd/system/DmWatcherServiceDMSERVER.service. 创建服务(DmWatcherServiceDMSERVER)完成 ``` root用户在主库执行 ```bash [root@node1 ~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DM -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini ``` 在主备库启动服务 ```bash systemctl start DmWatcherServiceDM ``` 守护进程启动后,设置GRP1守护进程为STARTUP状态,此时实例都处于未启动状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例Open,并设置GRP1守护进程为Open状态。 达梦社区地址

相关推荐
秋风起,再归来~几秒前
【Linux庖丁解牛】—进程优先级!
linux·运维·服务器
Lalolander27 分钟前
设备制造行业如何避免项目管理混乱?
运维·制造·工程项目管理·四算一控·epc·环保设备工程·设备制造
LucianaiB1 小时前
【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
运维·数据库·人工智能·金仓数据库 2025 征文·数据库平替用金仓
prinrf('千寻)1 小时前
nacos设置权重进行负载均衡不生效
运维·负载均衡
时序数据说1 小时前
时序数据库IoTDB在航空航天领域的解决方案
大数据·数据库·时序数据库·iotdb
Lary_Rock1 小时前
Android 编译问题 prebuilts/clang/host/linux-x86
android·linux·运维
.生产的驴1 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
绵绵细雨中的乡音1 小时前
Linux进程学习【基本认知】
linux·运维·学习
AnsenZhu2 小时前
2025年Redis分片存储性能优化指南
数据库·redis·性能优化·分片
oydcm2 小时前
MySQL数据库概述
数据库·mysql