本报告记录在一台主机上部署DM8单机双实例数据守护主备集群的完整过程。集群采用同一 IP、不同端口的方式区分主库与备库实例,完成主库、备库、守护进程、监视器以及同步验证的配置。
| 项目 | 主库 | 备库 |
|---|---|---|
| IP | 192.168.200.192 |
192.168.200.192 |
| 实例名 | GRP1_RT_01 |
GRP1_RT_02 |
| 实例端口 | 5236 |
5237 |
| MAL 端口 | 5336 |
5337 |
| MAL 守护进程端口 | 5436 |
5437 |
| 守护进程端口 | 5536 |
5537 |
| OGUID | 45331 |
45331 |
| 守护组 | GRP1 |
GRP1 |
| 数据目录 | /opt/dmdbms/data/DAMENG |
/opt/dmdbms/data_standby/DAMENG |
以 dmdba 用户执行,初始化主库实例 GRP1_RT_01。
/opt/dmdbms/dmhome/bin/dminit \ PATH=/opt/dmdbms/data/ \ INSTANCE_NAME=GRP1_RT_01 \ PAGE_SIZE=32 \ EXTENT_SIZE=32 \ LOG_SIZE=2048 \ SYSDBA_PWD=******** \ SYSAUDITOR_PWD=********
使用 dmserver 前台启动主库实例。
/opt/dmdbms/dmhome/bin/dmserver /opt/dmdbms/data/DAMENG/dm.ini
连接主库 5236 端口,切换到 MOUNT 状态后开启归档,再重新 OPEN 数据库。
/opt/dmdbms/dmhome/bin/disql SYSDBA/********@127.0.0.1:5236
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN;
在主库执行数据库备份,备份集路径为 /opt/dmdbms/data/DAMENG/bak/BACKUP_FILE。
BACKUP DATABASE BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE';
连接主库后设置数据守护相关参数。
SP_SET_PARA_VALUE(2, 'PORT_NUM', 5236); 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);
关闭前台实例后,编辑主库归档配置文件。
vi /opt/dmdbms/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0 # 0:高性能;1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02
创建 MAL 配置文件,单机双实例环境下两个实例必须使用不同端口。
vi /opt/dmdbms/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /opt/dmdbms/data/malpath/ #临时文件目录
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 = 192.168.200.192 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.200.192 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.200.192
MAL_PORT = 5337
MAL_INST_HOST = 192.168.200.192
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
创建主库守护进程配置文件。
vi /opt/dmdbms/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/dmhome/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
切换 root 用户,分别注册主库实例服务和主库守护进程服务。
/opt/dmdbms/dmhome/script/root/dm_service_installer.sh \ -t dmserver \ -p GRP1_RT_01 \ -dm_ini /opt/dmdbms/data/DAMENG/dm.ini \ -m mount /opt/dmdbms/dmhome/script/root/dm_service_installer.sh \ -t dmwatcher \ -p GRP1_RT_01 \ -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini
以 dmdba 用户执行,初始化备库实例 GRP1_RT_02。
/opt/dmdbms/dmhome/bin/dminit \
PATH=/opt/dmdbms/data_standby/ \
INSTANCE_NAME=GRP1_RT_02 \
PAGE_SIZE=32 \
EXTENT_SIZE=32 \
LOG_SIZE=2048 \
SYSDBA_PWD='********' \
SYSAUDITOR_PWD='********'
使用主库备份集恢复备库,并更新 DB_MAGIC。
/opt/dmdbms/dmhome/bin/dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data_standby/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
/opt/dmdbms/dmhome/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data_standby/DAMENG/dm.ini' FOR STANDBY FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
/opt/dmdbms/dmhome/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data_standby/DAMENG/dm.ini' UPDATE DB_MAGIC"
创建备库本地归档目录,并配置备库归档文件。
mkdir -p /opt/dmdbms/data_standby/DAMENG/arch
vi /opt/dmdbms/data_standby/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data_standby/DAMENG/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
修改备库 dm.ini 中的实例名、端口和数据守护相关参数。
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5237
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
同一 MAL 环境中的 dmmal.ini 保持一致,直接复制主库文件到备库目录。
cp -f \ /opt/dmdbms/data/DAMENG/dmmal.ini \ /opt/dmdbms/data_standby/DAMENG/dmmal.ini
创建备库守护进程配置文件。注意备库的 INST_INI 需要指向备库 dm.ini。
vi /opt/dmdbms/data_standby/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /opt/dmdbms/data_standby/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdbms/dmhome/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
切换 root 用户,分别注册备库实例服务和备库守护进程服务。
/opt/dmdbms/dmhome/script/root/dm_service_installer.sh \ -t dmserver \ -p GRP1_RT_02 \ -dm_ini /opt/dmdbms/data_standby/DAMENG/dm.ini \ -m mount /opt/dmdbms/dmhome/script/root/dm_service_installer.sh \ -t dmwatcher \ -p GRP1_RT_02 \ -watcher_ini /opt/dmdbms/data_standby/DAMENG/dmwatcher.ini
检查主库、备库实例服务与守护进程服务是否均已生成。
ls -l \ /opt/dmdbms/dmhome/bin/DmServiceGRP1_RT_01 \ /opt/dmdbms/dmhome/bin/DmServiceGRP1_RT_02 \ /opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_01 \ /opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_02
启动主库实例服务,连接主库 5236 端口,将主库设置为 PRIMARY。
/opt/dmdbms/dmhome/bin/DmServiceGRP1_RT_01 start /opt/dmdbms/dmhome/bin/disql SYSDBA/********@127.0.0.1:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
启动备库实例服务,连接备库 5237 端口,将备库设置为 STANDBY。
/opt/dmdbms/dmhome/bin/DmServiceGRP1_RT_02 start /opt/dmdbms/dmhome/bin/disql SYSDBA/********@127.0.0.1:5237
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
分别启动主库和备库的 watcher 服务。
/opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_01 start /opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_02 start
编辑 dmmonitor_manual.ini,配置非确认监视器。
vi /opt/dmdbms/dmhome/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /opt/dmdbms/data/monitor_log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.200.192:5436
MON_DW_IP = 192.168.200.192:5437
启动前台监视器。
/opt/dmdbms/dmhome/bin/dmmonitor /opt/dmdbms/dmhome/bin/dmmonitor_manual.ini
进入监视器后执行以下命令。正常情况下应看到主库为 PRIMARY、备库为 STANDBY,并且两个节点状态正常。
show global info
tip
正常状态:
GRP1_RT_01 PRIMARY
GRP1_RT_02 STANDBY
连接主库,在主库创建测试表并插入数据。
/opt/dmdbms/dmhome/bin/disql SYSDBA/********@127.0.0.1:5236
CREATE TABLE T_DW_TEST(ID INT, NAME VARCHAR(50));
INSERT INTO T_DW_TEST VALUES(1, 'PRIMARY_TO_STANDBY');
COMMIT;
SELECT * FROM T_DW_TEST;
EXIT;
连接备库,查询主库写入的数据。
/opt/dmdbms/dmhome/bin/disql SYSDBA/********@127.0.0.1:5237
SELECT * FROM T_DW_TEST;
EXIT;
查询结果:
1 PRIMARY_TO_STANDBY
如果备库能够查询到主库写入的数据,说明业务数据同步正常。
整套环境配置完成后,后续启动集群不需要再次执行 SP_SET_OGUID 和 ALTER DATABASE PRIMARY/STANDBY。直接启动两个 watcher 即可。
/opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_01 start /opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_02 start
停止时建议先停止 watcher,再停止数据库服务。
/opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_01 stop /opt/dmdbms/dmhome/bin/DmWatcherServiceGRP1_RT_02 stop /opt/dmdbms/dmhome/bin/DmServiceGRP1_RT_01 stop /opt/dmdbms/dmhome/bin/DmServiceGRP1_RT_02 stop
当前监视器配置为 MON_DW_CONFIRM = 0,即非确认监视器。它可以查看状态、执行手工切换,但在 AUTO 模式下不能执行自动接管。对于单机双实例实验环境,该配置可以满足学习和验证需要。
本次实验主库和备库部署在同一台主机,通过不同端口区分实例。该方式适合学习、验证和演示数据守护流程,但不具备物理主机级高可用能力。
本次操作完成了主库初始化、归档开启、备份、备库恢复、MAL 配置、守护进程配置、监视器配置以及同步验证。最终监视器状态显示主库为 PRIMARY、备库为 STANDBY,实时归档状态为 VALID,说明数据守护主备集群部署成功。
文章
阅读量
获赞
