达梦数据守护集群部署

接上篇

达梦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 dmdba@192.168.25.102:/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/SYSDBA@127.0.0.1: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状态。

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

相关推荐
为思念酝酿的痛4 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪4 小时前
什么是docker
运维·docker·容器
ccddsdsdfsdf4 小时前
DBeaver怎么链接mongoDB
数据库·mongodb
丷丩5 小时前
Postgresql基础实践教程(十一)各种Join
数据库·postgresql·join
星夜夏空996 小时前
FreeRTOS学习(4)——内存映射
数据库·学习·mongodb
人还是要有梦想的6 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
北京智和信通6 小时前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops6 小时前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush46 小时前
嵌入式linux学习记录二
linux·运维·学习
TheRouter6 小时前
AI Agent 记忆体系建设实战:短期、长期与工作记忆的工程实现
数据库·人工智能·oracle