在达梦数据守护集群中,主备同步模式分为实时主备(REALTIME)、即时主备(TIMELY)和异步主备(ASYNC)。本次实践目标:在原有实时主备环境改造为纯异步主备集群,验证异步同步延迟特性。
异步主备核心价值:主库事务提交不等待备库,性能接近单机,适用于异地容灾、备库只读查询等对数据实时性要求较低场景。
| 项目 | 主库 | 异步备库 |
|---|---|---|
| 操作系统 | CentOS 7 | CentOS 7 |
| 数据库版本 | DM8 | DM8 |
| IP地址 | 192.168.200.208 | 192.168.201.128 |
| 数据库端口 | 5236 | 5237 |
| 实例名 | GRP1_RT_01 | GRP1_RT_02 |
| 数据目录 | /data/dmdata/DAMENG | /data/dmdata_STB/DAMENG_STB |
| MAL端口 | 61141 | 61142 |
| 守护进程端口 | 52141 | 52142 |
| 实例监听守护端口 | 33141 | 33142 |
| OGUID | 453331 | 453331 |
说明:两个IP部署在同一物理机,单机双实例测试环境。
异步主备依靠定时器机制完成日志同步,流程:
基于现有实时主备改造,核心改动:归档类型改为ASYNC,新增定时器配置。
TIMER_INI = 1 # 启用定时器,异步归档必填
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dmdata/dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC
ARCH_DEST = GRP1_RT_02
ARCH_TIMER_NAME = ASYNC_TIMER
[ASYNC_TIMER]
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 1
START_TIME = 00:00:00
END_TIME = 23:59:59
DURING_START_DATE = 2026-07-14 10:00:00
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = ASYNC TIMER
IS_VALID = 1
MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_BUF_SIZE = 8192
MAL_COMPRESS_LEVEL = 1
MAL_VPOOL_SIZE = 10240
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 192.168.200.208
MAL_PORT = 61141
MAL_INST_HOST = 192.168.200.208
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.201.128
MAL_PORT = 61142
MAL_INST_HOST = 192.168.201.128
MAL_INST_PORT = 5237
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[GRP1_RT_02]
DW_TYPE = LOCAL
DW_MODE = MANUAL
INST_OGUID = 453331
INST_INI = /data/dmdata_STB/DAMENG_STB/dm.ini
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
INST_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dmarch_STB/DAMENG_STB
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 51200
pkill -9 -f dmserver
pkill -9 -f dmwatcher
pkill -9 -f dmmonitor
sleep 3
ps aux | grep -E "dmserver|dmwatcher|dmmonitor" | grep -v grep
# Mount启动备库
nohup ./dmserver /data/dmdata_STB/DAMENG_STB/dm.ini mount \
> /data/dmdata_STB/DAMENG_STB/log/dmserver_mount.log 2>&1 &
sleep 5
# 设置OGUID与备库角色
./disql SYSDBA/Wei050210@192.168.201.128:5237 <<EOF
alter system set 'ALTER_MODE_STATUS'=1;
SP_SET_OGUID(453331);
ALTER DATABASE STANDBY;
alter system set 'ALTER_MODE_STATUS'=0 both;
EXIT
EOF
# Mount启动主库
nohup ./dmserver /data/dmdata/DAMENG/dm.ini mount \
> /data/dmdata/DAMENG/log/dmserver_mount.log 2>&1 &
sleep 5
# 校验主库状态
./disql SYSDBA/Wei050210@192.168.200.208:5236 <<EOF
SELECT INSTANCE_NAME, MODE\$, STATUS\$, OGUID FROM V\$INSTANCE;
EXIT
EOF
# 预期输出:GRP1_RT_01 | PRIMARY | MOUNT | 453331
# 主库守护
nohup ./dmwatcher /data/dmdata/DAMENG/dmwatcher.ini \
> /data/dmdata/DAMENG/log/dmwatcher.log 2>&1 &
# 备库守护
nohup ./dmwatcher /data/dmdata_STB/DAMENG_STB/dmwatcher.ini \
> /data/dmdata_STB/DAMENG_STB/log/dmwatcher.log 2>&1 &
# 主库状态
./disql SYSDBA/Wei050210@192.168.200.208:5236 <<EOF
SELECT INSTANCE_NAME, MODE\$, STATUS\$ FROM V\$INSTANCE;
EXIT
EOF
# 预期:GRP1_RT_01 | PRIMARY | OPEN
# 备库状态
./disql SYSDBA/Wei050210@192.168.201.128:5237 <<EOF
SELECT INSTANCE_NAME, MODE\$, STATUS\$ FROM V\$INSTANCE;
EXIT
EOF
# 预期:GRP1_RT_02 | STANDBY | OPEN
./disql SYSDBA/Wei050210@192.168.200.208:5236 <<EOF
SELECT * FROM V\$MAL_LINK_STATUS;
EXIT
EOF
# 预期:CTL_LINK_STATUS=CONNECTED,DATA_LINK_STATUS=CONNECTED
CREATE TABLE ASYNC_TEST (ID INT, MSG VARCHAR(100));
INSERT INTO ASYNC_TEST VALUES (1, 'ASYNC DATA TEST');
COMMIT;
事务提交立刻查询备库,无数据:
SELECT * FROM ASYNC_TEST;
等待1分钟后校验发送状态与备库数据:
sleep 60
# 主库查看归档发送情况
./disql SYSDBA/Wei050210@192.168.200.208:5236 <<EOF
SELECT ARCH_DEST, LAST_SEND_CODE, LAST_SEND_DESC, LAST_SEND_LSN FROM V\$ARCH_SEND_INFO;
EXIT
EOF
# LAST_SEND_CODE=0 代表发送成功
# 备库查询数据
./disql SYSDBA/Wei050210@192.168.201.128:5237 <<EOF
SELECT * FROM ASYNC_TEST;
EXIT
EOF
延迟说明:
总延迟 = 定时器等待间隔(0~60s) + 传输耗时 + 重演耗时。事务刚提交时距离下一次触发越久,延迟越高。
现象:启动提示异步归档未配置定时器、定时器不存在,实例启动失败。
根因:
现象:守护进程启动直接退出,提示GLOBAL必须配置REALTIME/TIMELY归档。
根因:GLOBAL守护要求集群至少一个实时/即时备库,纯异步不支持。
解决:纯异步集群备库dmwatcher.ini设置DW_TYPE=LOCAL、DW_MODE=MANUAL。
补充:若主库同时存在实时+异步归档,GLOBAL守护可正常运行。
现象:守护日志报无法连接33141,端口访问拒绝。
端口区分:
TYPE=1:高频自定义调度,参数繁琐,不推荐异步归档;
TYPE=2:按日循环调度,适配异步归档,配置简单稳定。
| 文件 | 关键参数 | 作用 |
|---|---|---|
| 主库dm.ini | TIMER_INI = 1 | 开启定时器,异步归档必备 |
| 主库dmarch.ini | ARCH_TYPE=ASYNC、ARCH_TIMER_NAME | 定义异步归档并绑定定时器 |
| 主库dmtimer.ini | TYPE=2、FREQ_MINUTE_INTERVAL=1 | 定时推送归档日志 |
| 备库dmwatcher.ini | DW_TYPE=LOCAL | 纯异步集群本地守护模式 |
| dmmal.ini | 两端完全一致 | MAL通信底层依赖 |
文章
阅读量
获赞
