达梦数据守护集群部署

接上篇

达梦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状态。 达梦社区地址

相关推荐
王强你强6 分钟前
MySQL 高级查询:JOIN、子查询、窗口函数
数据库·mysql
草巾冒小子7 分钟前
brew 安装mysql,启动,停止,重启
数据库·mysql
用户62799471826214 分钟前
南大通用GBase 8c分布式版本gha_ctl 命令-HI参数详解
数据库
刘若水20 分钟前
Linux: 进程信号初识
linux·运维·服务器
斯汤雷22 分钟前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化
SQLplusDB30 分钟前
Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误
数据库·oracle·embedding
喝醉酒的小白1 小时前
SQL Server 可用性组自动种子设定失败问题
数据库
chem41111 小时前
Conmon lisp Demo
服务器·数据库·lisp
阳小江1 小时前
Docker知识点
运维·docker·容器
m0_555762901 小时前
QT 动态布局实现(待完善)
服务器·数据库·qt