DM 数据守护是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。
1.1 环境信息| 机器名 | IP地址 | 测试状态 | 操作系统 |
|---|---|---|---|
| DWSW1 | 192.168.1.128 | 单实例:DMSERVER | 中标麒麟 |
| DWSW2 | 192.168.1.129 | 单实例:DMSERVER | 中标麒麟 |
| DWSW2 | 192.168.1.129 | MONITOR | 中标麒麟 |
| 实例名 | PORT_NUM | MAL_INST_PORT | MAL_INST_DW_PORT | MAL_HOST | MAL_PROT | MAL_DW_PORT |
|---|---|---|---|---|---|---|
| DMSERVER_PRI | 5236 | 5236 | 33141 | 192.168.1.128 | 61141 | 52141 |
| DMSERVER_STA | 5236 | 5236 | 33141 | 192.168.1.128 | 61141 | 52141 |
检查防火墙状态:systemctl status firewalld
永久关闭防火墙:systemctl disable firewalld
关闭防火墙:systemctl stop firewalld
SQL> select CUR_LSN FROM V$RLOG; 行号 CUR_LSN 1 229514
SQL> select CUR_LSN FROM V$RLOG; 行号 CUR_LSN 1 75774三、数据准备(联机备份脱机还原)
配置数据守护 V4.0 之前,必须先通过备份还原方式同步各数据库的数据,确保各数据 的数据保持完全一致。主库可以是新初始化的数据库,也可以是正在生产、使用中的数据库。不能使用分别初始化库或者直接拷贝数据文件的方法。
3.1 联机备份 3.2 脱机还原恢复 3.3 使用DMRAMN执行更新DB_MAGIC恢复如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC方式恢复,前提是不需要重做日志。Recover successfullly并且恢复后的LSN号与备份库接近,说明恢复完整。
INSTANCE_NAME = DMSERVER_PRI PORT_NUM = 5236 RLOG_APPEND_LOGIC = 1 REDOS_MAX_DELAY = 180 MAL_INI = 1 ARCH_INI = 1 DW_INACTIVE_INTERVAL = 60 ENABLE_OFFLINE_TS = 2 ALTER_MODE_STATUS = 04.2 配置dmmal.ini
MAL_BUF_SIZE = 2048 MAL_VPOOL_SIZE = 5120 MAL_CHECK_INTERVAL = 30 MAL_CONN_FAIL_INTERVAL = 10 MAL_TEMP_PATH = /dm/dmdbms/data/MAL_TEMP [MAL_DMSERVER_PRI] MAL_INST_NAME = DMSERVER_PRI MAL_HOST = 192.168.1.128 MAL_PORT = 61141 MAL_INST_HOST = 192.168.1.128 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 33141 [MAL_DMSERVER_STA] MAL_INST_NAME = DMSERVER_STA MAL_HOST = 191.168.1.129 MAL_PORT = 61141 MAL_INST_HOST = 192.168.1.129 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 331414.3 修改dmarch.ini
[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = DMSERVER_STA [ARCHIVE_DMSERVER_PRI] ARCH_TYPE = LOCAL ARCH_DEST = /dm/dmarch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 14.4 配置dmwatcher.ini
[GROUP_DMSERVER] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 10 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 60 INST_OGUID = 453331 INST_INI = /dm/dmdbms/data/DMSERVER/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /dm/dmdbms/bin/DmServiceDMSERVER restart RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 04.5 启动主库到mount状态
[dmdba@DWSW1 bin]$ ./DmServiceDMSERVER stop Stopping DmServiceDMSERVER: [ok] [dmdba@DWSW1 bin]$ ./DmServiceDMSERVER start mount Starting DmServiceDMSERVER: [ok]4.6 设置OGUID并且修改数据库模式 五、配置备库DMSERVER_STA 5.1 拷贝主库所有ini文件到备库
拷贝主库所有ini文件到备库,只需要修修改部分配置参数即可。(如果备库有数据,建议提前将ini文件备份不要直接覆盖
[dmdba@DWSW1 DMSERVER]$ scp *.ini dmdba@192.168.1.129:/dm/dmdbms/data/DMSERVER5.2 修改dm.ini配置文件
INSTANCE_NAME = DMSERVER_STA PORT_NUM = 52365.3 修改dmarch.ini配置文件
[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = DMSERVER_PRI [ARCHIVE_DMSERVER_STA] ARCH_TYPE = LOCAL ARCH_DEST = /dm/dmarch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 15.3 【dmmal.ini】
无需修改5.4【dmwatcher.ini】
无需修改5.5 启动备库到mount状态
[dmdba@DWSW2 bin]$ ./DmServiceDMSERVER start mount Starting DmServiceDMSERVER: [ok]5.6 设置OGUID并且修改数据库模式 六. 配置监视器
由于主库和实时备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知 实时备库接管为新的主库,具有自动故障处理的功能。
6.1 配置确认监视器MON_DW_ConFIRM = 1 MON_LOG_PATH = /dm/dmdbms/log/log_DMSERVER MON_LOG_INTERVAL = 60 MON_LOG_FILE_SIZE = 512 MON_LOG_SPACE_LIMIT = 1024 MON_TAKEOVER_SHUTDOWN =10 [GROUP_DMSERVER] MON_INST_OGUID = 453331 MON_DW_IP = 192.168.1.128:52141 MON_DW_IP = 192.168.1.129.521416.2 修改普通监视器
MON_DW_ConFIRM = 0七.启动守护进程 7.1 启动主库守护进程
[dmdba@DWSW1 bin]$ ./DmWatcherService_DMSERVER start Starting DmWatcherService_DMSERVER: [ OK ]7.2 启动备库守护进程
[dmdba@DWSW2 bin]$ ./DmWatcherService_DMSERVER start Starting DmWatcherService_DMSERVER: [ OK ]
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始 广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将 本地实例 Open,并切换为 Open 状态7.3可以
7.3 检验数据库是否自动拉起到open状态[dmdba@DWSW1 bin]$ ./disql SYSDBA/SYSDBA:5236 服务器[LOCALHOST:5236]:处于主库打开状态 [[dmdba@DWSW2 bin]$ ./disql SYSDBA/SYSDBA:5236 服务器[LOCALHOST:5236]:处于备库打开状态八. 启动监视器
启动监视器:./dmmonitor /dm/data/dmmonitor.ini 监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令, 查看各种命令说明使用,结合实际情况选择使用。 至此一主一备的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下, 在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处 于 Open 状态,即为正常运行状态。
[dmdba@DWSW2 bin]$ ./DmMonitorService_DMSERVER start Starting DmMonitorService_DMSERVER: [ OK ]九、后续补充 9.1 守护集群的关闭顺序
关闭监视器–备库守护进程–主库守护进程–主库数据库服务–备库数据库服务。
由于守护进程中配置拉起数据库命令启动时候直接启动守护进程,数据库会被自动拉起。
[root@DWSW1 root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/data/DMSERVER/dm.ini -p DMSERVER [root@DWSW1 bin]# ll DmServiceDMSERVER -rwxr-xr-x 1 dmdba dinstall 16463 3月 2 18:28 DmServiceDMSERVER9.3 注册数据守护服务
[root@DWSW1 root]# ./dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdbms/data/DMSERVER/dmwatcher.ini -p DMSERVER [root@DWSW1 bin]# ll DmWatcherServiceDMSERVER -rwxr-xr-x 1 dmdba dinstall 13769 3月 16 10:44 DmWatcherServiceDMSERVER9.4 注册监视器服务
[root@DWSW2 root]# ./dm_service_installer.sh -t dmmonitor -monitor_ini /dm/dmdbms/bin/dmmonitor_DMSERVER.ini -p DMSERVER [root@DWSW2 bin]# ll DmMonitorServiceDMSERVER -rwxr-xr-x 1 dmdba dinstall 13784 3月 16 10:51 DmMonitorServiceDMSERVER十、主备故障分析及修复 10.1 测试DWSW2机器突然挂机并无法启动。(包含确认监视器、备机数据库、备机守护进程) 10.1.1 查看主机数据库状态 10.1.2 查看数据库服务日志
192.168.1.129备库连接失败,向 DMSERVER_STA(实时备库 同步数据失败)
无法收到远程备机守护进程消息,需要通过确认监视器确认故障处理。本地 dmwatcher 处于 ConFIRM 状态,但没有确认监视器或监视器确认无法切换到 FAILOVER。
10.1.4 结论监视器建议单独部署,如果和主备库共用同一台服务器故障,主库将挂起或备库无法转为主库,只能改为单机继续提供服务。
10.2 测试停掉主库服务和主库守护进程 10.2.1 停掉主库守护和主机数据库[dmdba@DWSW1 bin]$ ./DmWatcherService_DMSERVER stop Stopping DmWatcherService_DMSERVER: [ OK ] [dmdba@DWSW1 bin]$ ./DmServiceDMSERVER stop Stopping DmServiceDMSERVER: [ OK ]10.2.2 监视器监控到主库DMSERVER_PRI异常,确认监视器自动将DMSERVER_STA备库切换为主库PRIMARY,集群正常对外服务。
[dmdba@DWSW2 bin]$ ./DmWatcherServiceDMSERVER stop Stopping DmWatcherServiceDMSERVER: [ OK ] [dmdba@DWSW2 bin]$ ./DmServiceDMSERVER stop Stopping DmServiceDMSERVER: [ OK ]10.3.2 当数据库守护服务停止时,确认监视器提示接收备机守护进程消息超时,自动将数据库状态切换为ERROR,此时不影响数据库集群的对外服务 10.3.3 重启备库服务,确认监视器重新接收到备机的守护进程消息,自动将备机的数据库状态切换为OPEN继续对外服务 10.4 测试主库备库分别被kill进程 10.4.1 当kill掉主库数据库服务时
[dmdba@DWSW1 bin]$ ps -ef|grep dmserver dmdba 8650 1 0 16:47 pts/0 00:00:01 /dm/dmdbms/bin/dmserver path=/dm/dmdbms/data/DMSERVER/dm.ini -noconsole dmdba 9106 4444 0 16:54 pts/0 00:00:00 grep dmserver [dmdba@DWSW1 bin]$ kill -9 865010.4.2 主库服务被kill掉,监视器监控到主库DMSERVER_PRI的异常DMSERVER_STA备库切换为主库 10.4.3当DMSERVER_PRI数据库服务被数据库守护服务拉起后重新加入主备集群,状态改为为备库继续提供服务
[dmdba@DWSW2 bin]$ ps -ef|grep dmserver dmdba 10764 10736 15 16:42 pts/1 00:00:00 /dm/dmdbms/bin/dmserver path=/dm/dmdbms/data/DMSERVER/dm.ini -noconsole dmdba 10848 9546 0 16:42 pts/1 00:00:00 grep dmser [dmdba@DWSW2 bin]$ kill -9 1076410.4.5 备库数据库服务被kill掉,备机的守护进程会尝试拉起数据库服务,确认监视器提示备机数据库为ERROR。当守护进程自动拉起数据库服务后,确认监视器将备机数据库状态又切换为OPEN状态
简单讲DM 实时主备由一个主库以及一个或者多个配置了实时归档的备库组成,主库提供完整的数据库功能,备库提供只读服务,主要需要注意dm.ini,dmarch.ini,dmwatcher.ini,dmmal.ini这几个配置文件。多节点主备集群搭建万变不离其宗。



