达梦数据守护架构类似Oracle的ADG,但功能层面比Oracle ADG更丰富和灵活,其实现的原理:主库产生的重做日志传输到备库,备库接受后进行重新应用,从而保障了主备库数据的同步。涉及到的架构有主库、备库、redo日志、日志重演、守护进程watcher、监视器组成等。
架构图如下:
PORT_NUM:实例对外服务端口,也就是业务应用连接的IP+端口,达梦8默认5236。
MAL_HOST:MAL系统监听的IP地址,类似私网地址,MAL系统相互通信的内网地址。
MAL_PORT:MAL系统监听的端口,配合MAL_HOST使用,主备节点通过MAL_HOST+MAL_PORT传输重做日志、归档日志等。
MAL_INST_DW_PORT:节点实例监听守护进程的端口,同一库上的本地守护进程与各实例通讯的端口,同样也是跟MAL_HOST配合使用。
MAL_DW_PORT:主备节点和监视器连接通讯的端口,实例守护进程或监视器通过MAL_HOST+MAL_DW_PORT创建TCP连接。
主库、备份分别进行数据库软件安装和初始化实例配置,备库用于数据恢复使用,监视器只需要安装数据库软件接口,具体步骤这里省略。。。。可以查阅达梦的安装手册。
登录主库停止数据库实例:
[dmdba@dm8p bin]$ ./ DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
脱机备份:
./dmrman CTLSTMT=“BACKUP DATABASE ‘/dm8/DAMENG/dm.ini’ FULL TO BACKUP_FILE1 BACKUPSET ‘/home/dmdba/backup’”
备份成功如下图:
把备份集传输到备库:
$ scp -r /home/dmdba/backup/* dmdba@192.168.1.224:/home/dmdba/backup
备库还原操作:
./dmrman CTLSTMT=“RESTORE DATABASE ‘/home/dmdba/dmdbms/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/home/dmdba/backup’”
–因为是停机备份没有归档产生,所以可以忽略下面标记recover操作
./dmrman CTLSTMT=“RECOVER DATABASE ‘/home/dmdba/dmdbms/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/home/dmdba/backup’”
–恢复完毕后更新下数据库的魔数信息(此步骤不可忽略)
./dmrman CTLSTMT=“RECOVER DATABASE ‘/home/dmdba/dmdbms/dmdata/DAMENG/dm.ini’ UPDATE DB_MAGIC”
主库dm.ini文件修改:
INSTANCE_NAME = GRP1_RT_01
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
主库dmmal.ini文件修改:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 10.0.0.223
MAL_PORT = 55101
MAL_INST_HOST = 192.168.1.223
MAL_INST_PORT = 5236
MAL_DW_PORT = 65101
MAL_INST_DW_PORT = 45101
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 10.0.0.224
MAL_PORT = 55121
MAL_INST_HOST = 192.168.1.224
MAL_INST_PORT = 5236
MAL_DW_PORT = 65121
MAL_INST_DW_PORT = 45121
主库dmarch.ini文件修改:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch_log
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
主库dmwatcher.ini文件修改:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm8/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
备库dm.ini文件修改:
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
备库dmmal.ini文件修改:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 10.0.0.223
MAL_PORT = 55101
MAL_INST_HOST = 192.168.1.223
MAL_INST_PORT = 5236
MAL_DW_PORT = 65101
MAL_INST_DW_PORT = 45101
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 10.0.0.224
MAL_PORT = 55121
MAL_INST_HOST = 192.168.1.224
MAL_INST_PORT = 5236
MAL_DW_PORT = 65121
MAL_INST_DW_PORT = 45121
备库dmarch.ini文件修改:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/dmdata/archlog
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
备库dmwatcher.ini文件修改:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm8/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
$ /home/dmdba/dmdbms/bin/dmserver /dm8/DAMENG/dm.ini mount
新开一个会话窗口DISQL登录执行如下命令:
SQL>SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SQL>sp_set_oguid(453331);
SQL>alter database primary;
SQL>SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
$ /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/dmdata/DAMENG/dm.ini mount
新开一个会话窗口执行如下命令:
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SQL> sp_set_oguid(453331);
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
登录监视器主机,创建监视器文件:vi dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm8/dbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 10.0.0.223:65101
MON_DW_IP = 10.0.0.224:65121
启动主库守护进程:
[dmdba@dm8p ~]$ /home/dmdba/dmdbms/bin/dmwatcher /dm8/DAMENG/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
启动备库守护进程:
[dmdba@dm8s~]$/home/dmdba/dmdbms/bin/dmwatcher /home/dmdba/dmdbms/dmdata/DAMENG/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
启动监视器:/dm8/dbms/bin/dmmonitor dmmonitor.ini
数据库主备会自动拉起到OPEN,如下:
查看主库已从mount状态切换成了open
查看备库已从mount状态切换成了open
监视器查看:
root用户注册服务
cd $DM_HOME/scripts/root
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/DAMENG/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p watcher -watcher_ini /dm8/DAMENG/dmwatcher.ini
./dm_service_installer.sh -t dmmonitor -p rwcmonitor -monitor_ini /home/dmdba/dmmonitor.ini
输入login再输入用户名和密码
提示:登录监视器成功!
输入切换命令:switchover回车即可。
提示成功后再次查看状态:主备库已切换
登录主库查看:模式已切换备库
登录备库查看:模式已切换主库
启动达梦守护进程失败,提示dmserver startup failed, code = -803 [Invalid ini config value]
报错截图:
解决:这个问题很明显是启动配置问题,大多情况都是因为个人的粗心大意或者着急导致,仔细看提示可以知道启动dmwatcher进程用的应该是dmwatcher,而报错提示dmserver明显是启动命令执行与参数文件不符。
报错详情:
file dm.key not found, use default license!
Read ini error, name:CTL_PATH, value:
dmserver startup failed, code = -803 [Invalid ini config value]
nsvr_ini_file_read failed, [code: -803]
启动监视器失败,提示Invalid input dmor.ini version: 03134283890-20220720-165295-10045 Pack11
报错截图:
解决:配置文件的名称例如dmmonitor.ini文件建议严格按照达梦手册要求来,不要随意改名,考试中我修改成了mon.ini就一直报错提示格式错误信息,修改成dmmonitor_mon.ini就没有问题,为了避免这种无畏的时间和排错消耗,建议各位无论是考试还是生产不要任性。
文章
阅读量
获赞