一、前言
DM 数据守护是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。
1.1 环境信息
机器名 | IP地址 | 测试状态 | 操作系统 |
---|---|---|---|
DWSW1 | 192.168.1.128 | 单实例:DMSERVER | 中标麒麟 |
DWSW2 | 192.168.1.129 | 单实例:DMSERVER | 中标麒麟 |
DWSW2 | 192.168.1.129 | MONITOR | 中标麒麟 |
1.2 端口规划
实例名 | 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 |
二、前期工作准备
2.1 配置前记得使用root用户检查主备机的防火墙有没有关
检查防火墙状态:systemctl status firewalld
永久关闭防火墙:systemctl disable firewalld
关闭防火墙:systemctl stop firewalld
2.3 分别检查当前两个数据库的LSN号
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号与备份库接近,说明恢复完整。
四、配置主库DMSERVER_PRI
4.1 修改dm.ini(详情见DM8系统管理员手册)
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 = 0
4.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 = 33141
4.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 = 1
4.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 = 0
4.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/DMSERVER
5.2 修改dm.ini配置文件
INSTANCE_NAME = DMSERVER_STA
PORT_NUM = 5236
5.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 = 1
5.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.52141
6.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 守护集群的关闭顺序
关闭监视器–备库守护进程–主库守护进程–主库数据库服务–备库数据库服务。
由于守护进程中配置拉起数据库命令启动时候直接启动守护进程,数据库会被自动拉起。
9.2 注册数据库服务
[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 DmServiceDMSERVER
9.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 DmWatcherServiceDMSERVER
9.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(实时备库 同步数据失败)
10.1.3 查看守护进程日志
无法收到远程备机守护进程消息,需要通过确认监视器确认故障处理。本地 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,集群正常对外服务。
10.2.3 DMSERVER_PRI重新启动后,重新拉起异常节点的数据库守护进程与数据库服务进程后,确认监视器将其数据库状模式切换为standby模式。
10.3 测试停掉备库服务和备库守护进程
10.3.1 停掉备库守护和数据库服务
[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 8650
10.4.2 主库服务被kill掉,监视器监控到主库DMSERVER_PRI的异常DMSERVER_STA备库切换为主库
10.4.3当DMSERVER_PRI数据库服务被数据库守护服务拉起后重新加入主备集群,状态改为为备库继续提供服务
10.4.4 当kill掉备库服务时
[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 10764
10.4.5 备库数据库服务被kill掉,备机的守护进程会尝试拉起数据库服务,确认监视器提示备机数据库为ERROR。当守护进程自动拉起数据库服务后,确认监视器将备机数据库状态又切换为OPEN状态
十一、小结
简单讲DM 实时主备由一个主库以及一个或者多个配置了实时归档的备库组成,主库提供完整的数据库功能,备库提供只读服务,主要需要注意dm.ini,dmarch.ini,dmwatcher.ini,dmmal.ini这几个配置文件。多节点主备集群搭建万变不离其宗。