接上篇
达梦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