搭建DM数据守护集群

1环境与规划

准备3个kylin 10操作系统的虚拟机,规划IP、端口、安装目录等。

|-----------------------------|----------------|----------------|----------------|
| 说明 | 搭建REALTIME归档模式、事务一致性的数据守护 |||
| 名称项 | 初始主库机器dm1 | 初始备库机器dm2 | 监视器机器dmmon |
| 外部业务IP | 192.168.23.129 | 192.168.23.130 | 192.168.23.131 |
| 内部心跳IP | 192.168.23.129 | 192.168.23.130 | 192.168.23.131 |
| 实例名 | GRP1_DW_01 | GRP1_DW_02 | - |
| 实例端口PORT_NUM | 5237 | 5237 | - |
| MAL监听端口MAL_PORT | 65237 | 65237 | - |
| 守护进程监听端口MAL_DW_PORT | 55237 | 55237 | - |
| 实例监听守护进程端口 MAL_INST_DW_PORT | 35237 | 35237 | - |
| OGUID | 202507 | 202507 | - |
| 守护组 | GRP1 | GRP1 | - |
| 数据库软件安装目录 | /opt/dmdbms | /opt/dmdbms | /opt/dmdbms |
| 数据库实例目录 | /data/dmdata/ | /data/dmdata/ | - |

1.1设置主机名与IP、关闭防火墙等

root@\~# hostnamectl set-hostname 名称

root@\~# hostname 名称

root@\~# systemctl status firewalld

firewall-cmd --list-port

firewall-cmd --permanent --zone=public --add-port=5237/tcp

firewall-cmd --permanent --zone=public --add-port=65237/tcp

firewall-cmd --permanent --zone=public --add-port=55237/tcp

firewall-cmd --permanent --zone=public --add-port=35237/tcp

firewall-cmd --reload

1.2配置时间同步

(1)服务端配置

vi /etc/chrony.conf

allow 192.168.23.0/24 ##许访问的客户端列表

local stratum 10

重启服务:systemctl restart chronyd

(2)客户端配置

vi /etc/chrony.conf

server 192.168.23.131 iburst

重启服务:systemctl restart chronyd

客户端同步时间: chronyc sources -v

1.3其它操作参数优化

略,这里重点数据守护手工搭建过程。

2各节点安装数据库软件

2.1每个节点创建用户和组

groupadd dinstall

useradd -g dinstall dmdba

echo "HUN_xx202x" | passwd --stdin dmdba

2.2 每个节点安装达梦数据库软件

以主机dm1示例说明:

root@dm1 \~#mkdir /dmsoft /opt/dmdbms /data/dmarch

上传安装包到/dmsoft目录

root@dm1 \~# chown -R dmdba:dinstall /opt/dmdbms /data/dmarch

root@dm1 \~# cd /dmsoft

root@dm1 dmsoft# mount -o loop dm8.iso /mnt

root@dm1 dmsoft# su - dmdba

dmdba@dm1 \~$ cd /mnt

dmdba@dm1 mnt$ ./DMInstall.bin -i

过程中选择安装目录:请选择安装目录 /home/dmdba/dmdbms:/opt/dmdbms

最后执行root执行/opt/dmdbms/script/root/root_installer.sh

3在主机dm1(主库机)操作

3.1初始化数据库实例

dmdba@$./dminit path=/data/dmdata page_size=32 extent_size=32 port_num=5237 charset=1 log_size=1024 SYSDBA_PWD=HUN_admin2025 SYSAUDITOR_PWD=HUN_admin2025

主机dm1上注册数据库服务

root@dm1 \~# bash /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dmata/DAMENG/dm.ini -p DAMENG

root@dm1 \~# systemctl enable DmServiceDAMENG.service

root@dm1 \~# systemctl start DmServiceDAMENG.service

3.2启动数据库,配置归档

dmdba@dm1 bin$ disql SYSDBA/自定义的pwd@localhost:5237

SQL> ALTER DATABASE MOUNT;

SQL> ALTER DATABASE ARCHIVELOG;

SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST =/data/dmarch, TYPE = local, FILE_SIZE = 1024,SPACE_LIMIT = 4096';

SQL> ALTER DATABASE OPEN;

3.3 对主库进行联机备份

SQL> BACKUP DATABASE BACKUPSET 'backup_dbfull_01';

SQL> SELECT BACKUP_NAME,BEGIN_LSN FROM V$backupset;

默认的备份路径操作系统/data/dmdata/DAMENG/bak/。

查看数据库魔数:select db_magic;

查看数据库唯一魔数:select permanent_magic;

3.4拷贝主库备份到备机

dmdba@dm1 \~$scp -r /data/dmdata/DAMENG/bak/backup_dbfull_01 192.168.23.130:/data/dmdata/DAMENG/bak/

4在主机dm2(备库机)操作

4.1初始化数据库实例后启动后再关闭

dmdba@$./dminit path=/data/dmdata/ page_size=32 extent_size=32 port_num=5237 charset=1 log_size=2048 SYSDBA_PWD=自定义 SYSAUDITOR_PWD=自定义

dmdba@$./dmserver /data/dmdata/DAMENG/dm.ini

4.2 dmrman 还原恢复

dmdba@dm2 \~$ll /data/dmdata/DAMENG/bak/

dmdba@dm2 bin$ ./dmrman

RMAN> RESTORE DATABASE '/data/dmdata/DAMENG/dm.ini' REUSE DMINI FROM BACKUPSET '/data/dmdata/DAMENG/bak/backup_dbfull_01';

RMAN> RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' FOR STANDBY FROM BACKUPSET '/data/dmdata/DAMENG/bak/backup_dbfull_01';

RMAN> RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC ;

5在主机dm1(主库机)操作

5.1 配置dm.ini

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| SP_SET_PARA_VALUE (2,'PORT_NUM',5237); SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60); SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0); SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2); SP_SET_PARA_VALUE (2,'MAL_INI',1); SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64); 或者修改dm.in文件 ##实例名,使用"组名_守护环境_序号"命名方式,总长度不能超过16 INSTANCE_NAME = GRP1_DW_01 PORT_NUM = 5237 ##数据库实例监听端口 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> shutdown immediate;

或者

root@dm1 \~# systemctl stop DmServiceDAMENG.service

5.2 配置dmmal.ini

配置MAL系统,各主备库的dmmal.ini配置必须完全一致

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| MAL_CHECK_INTERVAL = 10 ##MAL链路检测时间间隔,单位秒(s) MAL_CONN_FAIL_INTERVAL = 10 ##判定实例之间 MAL链路断开的时间 MAL_TEMP_PATH = /data/dmdata/DAMENG MAL_BUF_SIZE= 512 MAL_SYS_BUF_SIZE= 2048 MAL_COMPRESS_LEVEL= 0 MAL_INST1 MAL_INST_NAME = GRP1_DW_01 ##实例名,和dm.ini中的INSTANCE_NAME一致 MAL_HOST = 192.168.23.129 ##MAL系统监听TCP连接的IP地址 MAL_PORT = 65237 ## MAL监听端口,用于创建MAL链路 MAL_INST_HOST = 192.168.23.129 ##数据库实例的对外服务IP地址 MAL_INST_PORT = 5237 ##数据库实例对外服务端口,和dm.ini中PORT_NUM一致 MAL_DW_PORT = 55237 ##守护进程监听端口 MAL_INST_DW_PORT = 35237 ##实例监听守护进程的端口 MAL_INST2 MAL_INST_NAME = GRP1_DW_02 MAL_HOST = 192.168.23.130 MAL_PORT = 65237 MAL_INST_HOST = 192.168.23.130 MAL_INST_PORT = 5237 MAL_DW_PORT = 55237 MAL_INST_DW_PORT = 35237 |

5.3 配置dmarch.ini

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ARCH_WAIT_APPLY = 1 ARCHIVE_LOCAL1 ARCH_TYPE = LOCAL ##本地归档类型 ARCH_DEST = /data/dmarch ##本地归档文件存放路径 ARCH_FILE_SIZE = 1024 ##单位Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT =4096 ##单位Mb,0表示无限制,范围1024~2147483647M ARCHIVE_REALTIME1 WAIT_APPLY=1 ARCH_TYPE = REALTIME ##实时归档类型 ARCH_DEST = GRP1_DW_02 ##实时归档目标实例名 |

5.4 配置 dmwatcher.ini

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| GRP1 DW_TYPE = GLOBAL ##全局守护类型 DW_MODE = AUTO ##自动切换模式 DW_ERROR_TIME = 60 ##远程守护进程故障认定时间 INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 60 ##本地实例故障认定时间 INST_OGUID = 20250507 ##守护系统唯一OGUID值 INST_INI =/data/dmdata/DAMENG/dm.ini ##dm.ini配置文件路径 INST_AUTO_RESTART = 1 ##打开实例的自动启动功能 INST_STARTUP_CMD =/opt/dmdbms/bin/DmServiceDAMENG start ##命令行方式启动 RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭 |

5.5修改 OGUID Primary模式

##以Mount方式启动主库

dmdba@dm1 bin$dmserver /data/dmdata/DAMENG/dm.ini mount

##启动命令行工具disql登录主库设置OGUID值、修改数据库为Primary模式

dmdba@dm1 bin$ ./disql sysdba/HUN_admin2025@localhost:5237

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(20250507);

ALTER DATABASE PRIMARY;

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

6在主机dm2(备库机)操作

6.1 配置dm.ini

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ##实例名,建议使用"组名_守护环境_序号"的命名方式,总长度不能超过16 INSTANCE_NAME = GRP1_DW_02 PORT_NUM = 5237 ##数据库实例监听端口 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次的日志发送信息 |

6.2 配置dmmal.ini

各主备库的dmmal.ini配置必须完全一致。

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| MAL_CHECK_INTERVAL = 10 ##MAL链路检测时间间隔,单位秒(s) MAL_CONN_FAIL_INTERVAL = 10 ##判定实例之间 MAL链路断开的时间 MAL_TEMP_PATH = /data/dmdata/DAMENG MAL_BUF_SIZE= 512 MAL_SYS_BUF_SIZE= 2048 MAL_COMPRESS_LEVEL= 0 MAL_INST1 MAL_INST_NAME = GRP1_DW_01 ##实例名,和dm.ini中的INSTANCE_NAME一致 MAL_HOST = 192.168.23.129 ##MAL系统监听TCP连接的IP地址 MAL_PORT = 65237 ## MAL监听端口,用于创建MAL链路 MAL_INST_HOST = 192.168.23.129 ##数据库实例的对外服务IP地址 MAL_INST_PORT = 5237 ##数据库实例对外服务端口,和dm.ini中PORT_NUM一致 MAL_DW_PORT = 55237 ##守护进程监听端口 MAL_INST_DW_PORT = 35237 ##实例监听守护进程的端口 MAL_INST2 MAL_INST_NAME = GRP1_DW_02 MAL_HOST = 192.168.23.130 MAL_PORT = 65237 MAL_INST_HOST = 192.168.23.130 MAL_INST_PORT = 5237 MAL_DW_PORT = 55237 MAL_INST_DW_PORT = 35237 |

6.3 配置dmarch.ini

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ARCH_WAIT_APPLY = 1 ARCHIVE_LOCAL1 ARCH_TYPE = LOCAL ##本地归档类型 ARCH_DEST = /data/dmarch ##本地归档文件存放路径 ARCH_FILE_SIZE = 1024 ##单位Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT =4096 ##单位Mb,0表示无限制,范围1024~2147483647M ARCHIVE_REALTIME1 WAIT_APPLY=1 ARCH_TYPE = REALTIME ##实时归档类型 ARCH_DEST = GRP1_DW_01 ##实时归档目标实例名 |

6.4 配置dmwatcher.ini

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| GRP1 DW_TYPE = GLOBAL ##全局守护类型 DW_MODE = AUTO ##自动切换模式 DW_ERROR_TIME = 60 ##远程守护进程故障认定时间 INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 60 ##本地实例故障认定时间 INST_OGUID = 20250507 ##守护系统唯一OGUID值 INST_INI =/data/dmdata/DAMENG/dm.ini ##dm.ini配置文件路径 INST_AUTO_RESTART = 1 ##打开实例的自动启动功能 INST_STARTUP_CMD =/opt/dmdbms/bin/DmServiceDAMENG start ##命令行方式启动 RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭 |

6.5修改 OGUI D standby 模式

以mount方式启动备库

dmdba@dm2 bin$dmserver /data/dmdata/DAMENG/dm.ini mount

备库修改oguid和数据库模式

dmdba@dm2 bin$ ./disql sysdba/HUN_admin2025@localhost:5237

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(20250507);

alter database standby;

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

7在主机mon 配置监视器

vi /opt/dmdbms/dmmonitorGRP1.ini

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| MON_DW_CONFIRM = 1 ##确认模式 MON_LOG_PATH =/opt/dmdbms/log ##监视器日志文件存放路径 MON_LOG_INTERVAL = 60 ##每隔60s定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 ##每个日志文件最大32M MON_LOG_SPACE_LIMIT = 0 ##不限定日志文件总占用空间 GRP1 MON_INST_OGUID = 20250507 ##组GRP1的唯一OGUID值 MON_DW_IP = 192.168.23.129:55237 ##IP和PORT信息和dmmal.ini中的MAL_HOST和MAL_DW_PORT配置项一致 MON_DW_IP = 192.168.23.130:55237 |

8主机dm1和主机dm2上注册 守护进程 并启动

(1)dm1主库上注册守护进程服务并启动

root@dm1 \~# bash /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /data/dmdata/DAMENG/dmwatcher.ini -p GRP1

--如果需要卸载服务

bash /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceGRP1

root@dm1 \~# systemctl enable DmWatcherServiceGRP1

root@dm1 \~# systemctl start DmWatcherServiceGRP1

(2)dm2备库上注册数据库服务

root@dm2 \~# bash /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dmdata/DAMENG/dm.ini -p DAMENG

root@dm2 \~# systemctl enable DmServiceDAMENG.service

(3)dm2备库上注册守护进程服务并启动

root@dm2 bin# bash /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /data/dmdata/DAMENG/dm.ini -p GRP1

root@dm2 \~# systemctl enable DmWatcherServiceGRP1

root@dm2 \~# systemctl start DmWatcherServiceGRP1

--如果需要调试时手动启动方式

./dmwatcher /opt/dmdbms/data/DAMENG/dmwatcher.ini

9监视机上注册 监视 器服务并启动

root@mon \~# bash /opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /opt/dmdbms/dmmonitorGRP1.ini -p GRP1

root@mon \~# systemctl enable DmMonitorServiceGRP1

调试时手动启动

./dmmonitor /opt/dmdbms/dmmonitorGRP1.ini

监视机上先非确认监视器命令查看

dmdba@mon \~#cp /opt/dmdbms/dmmonitor.ini /opt/dmdbms/dmmonitorGRP1s.ini

dmdba@mon \~#vi /opt/dmdbms/dmmonitors.ini

MON_DW_CONFIRM = 0

dmdba@mon bin$dmmonitor /opt/dmdbms/dmmonitorGRP1s.ini

确认状态无误后,启动确认监视器

root@mon \~# systemctl start DmMonitorServiceGRP1