文章目录
一、背景介绍
DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。与常规的数据库备份(Backup)、还原(Restore)技术相比,数据守护可以更快地恢复数据库服务。随着数据规模不断增长,通过还原手段恢复数据,往往需要数个小时、甚至更长时间,而数据守护基本不受数据规模的影响,只需数秒时间就可以将备库切换为主库对外提供数据库服务。
本实验要求搭建两节点守护集群,并完成集群切换和恢复操作。
二、目的
完成2节点数据守护集群的搭建,要求如下:
(1)完成主备集群的部署,并测试建表和插入数据备机是否能及时同步,并可查询到数据。
(2)制造主机故障,测试备机可接管并持续提供服务。
(3)恢复故障主机,将故障主机加入集群。
(4)手动切换主备集群,恢复原主备集群的位置。
三、步骤
1. 集群规划
准备三台机器 DM1、DM2、DM_M,DM1 和 DM2 用来部署主备库,DM_M用来部署确认监视器。其中 DM1 和 DM2 配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机,DM_M接入内部网络。
三台机器都事先安装了 DM,安装路径为’/dm8’,执行程序保存在’/dm8/bin’目录中,数据存放路径为’/dm8/data’。
各主备库的实例名建议采用“组名_守护环境_序号”的方式命名,方便按组区分不同实例,注意总长度不能超过 16。本示例中组名为“G1”,配置为实时主备,主库命名为“G1_RT_01”,备库命名为“G1_RT_02”。
表1 服务器规划
机器名 | IP地址 | 初始状态 | 操作系统 |
---|---|---|---|
DM1 | 1.1.1.1 192.168.75.130 | 主库G1_RT_01 | CentOS Linux release 7.9.2009 (Core) |
DM2 | 1.1.1.2 192.168.75.131 | 备库G1_RT_02 | CentOS Linux release 7.9.2009 (Core) |
DM_M | 1.1.1.3 | 监视器 | CentOS Linux release 7.9.2009 (Core) |
表2 端口规划
实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
---|---|---|---|---|---|
DM1 | 5230 | 5231 | 1.1.1.1 | 5232 | 5233 |
DM2 | 5230 | 5231 | 1.1.1.2 | 5232 | 5233 |
2. 数据准备
分别在主库和备库上进行数据库初始化,并编辑dm.ini文件和dmarch.ini文件,开启归档
离线备份,数据库在dminit之后,还要启动一次以完成初始化动作,否则dmrman会报错“无法备份未初始化的数据库”
主库进行离线备份
从库进行离线恢复
3. 配置主库各ini文件
3.1 dm.ini文件
修改以下内容:
INSTANCE_NAME = G1_RT_01
PORT_NUM =5230 ##数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置
RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志发送信息
3.2 dmmal.ini文件
新建dmmal.ini文件,并配置以下内容:
#[dmdba@dm1 DAMENG]$ cat dmmal.ini
MAL_CHECK_INTERVAL = 5 ##MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 ##判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = G1_RT_01 ##实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 1.1.1.1 ##MAL系统监听TCP连接的IP地址
MAL_PORT = 5232 ##MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.75.130 ##实例的对外服务IP地址
MAL_INST_PORT = 5230 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5233 ##实例本地的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5231 ##实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = G1_RT_02
MAL_HOST = 1.1.1.2
MAL_PORT = 5232
MAL_INST_HOST = 192.168.75.131
MAL_INST_PORT = 5230
MAL_DW_PORT = 5233
MAL_INST_DW_PORT = 5231
3.3 dmarch.ini文件配置
新建dmarch.ini文件,并配置以下内容
#[dmdba@dm1 DAMENG]$ cat dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE=REALTIME
ARCH_DEST=G1_RT_02
[ARCHIEVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=/dm8/data/DAMENG/arch
ARCH_FILE_SIZE=128
ARCH_SPACE_LIMIT=0
3.4 dmwatcher.ini文件配置
新建dmwatcher.ini文件,并配置以下内容
#[dmdba@dm1 DAMENG]$ cat dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = AUTO ##自动切换模式
DW_ERROR_TIME = 10 ##远程守护进程故障认定时间
INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 ##本地实例故障认定时间
INST_OGUID = 453331 ##守护系统唯一OGUID值
INST_INI = /dm8/data/DAMENG/dm.ini ##dm.ini配置文件路径
INST_AUTO_RESTART = 1 ##打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver ##命令行方式启动
RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭
4. 启动主库
主库启动要在前台mount形式,环境搭建完毕后,可关闭前台
修改主库OGUID
修改数据库模式
5. 配置从库各ini文件
5.1 修改dm.ini文件
找到并修改备库实例对应的dm.ini文件的以下内容:
INSTANCE_NAME = G1_RT_02
PORT_NUM =5230 ##数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 ##接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 ##不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 ##不允许备库OFFLINE表空间
MAL_INI = 1 ##打开MAL系统
ARCH_INI = 1 ##打开归档配置
RLOG_SEND_APPLY_MON = 64 ##统计最近64次的日志发送信息
5.2 dmmal.ini文件配置
和主库配置完全一致
#[dmdba@dm2 DAMENG]$ cat dmmal.ini
MAL_CHECK_INTERVAL = 5 ##MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 ##判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = G1_RT_01 ##实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 1.1.1.1 ##MAL系统监听TCP连接的IP地址
MAL_PORT = 5232 ##MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.75.130 ##实例的对外服务IP地址
MAL_INST_PORT = 5230 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5233 ##实例本地的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5231 ##实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = G1_RT_02
MAL_HOST = 1.1.1.2
MAL_PORT = 5232
MAL_INST_HOST = 192.168.75.131
MAL_INST_PORT = 5230
MAL_DW_PORT = 5233
MAL_INST_DW_PORT = 5231
5.3 dmarch.ini文件配置
#[dmdba@dm2 DAMENG]$ cat dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE=REALTIME
ARCH_DEST=G1_RT_01
[ARCHIEVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=/dm8/data/DAMENG/arch
ARCH_FILE_SIZE=128
ARCH_SPACE_LIMIT=0
5.4 dmwatcher.ini配置
[dmdba@dm1 DAMENG]$ cat dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL ##全局守护类型
DW_MODE = AUTO ##自动切换模式
DW_ERROR_TIME = 10 ##远程守护进程故障认定时间
INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 ##本地实例故障认定时间
INST_OGUID = 453331 ##守护系统唯一OGUID值
INST_INI = /dm8/data/DAMENG/dm.ini ##dm.ini配置文件路径
INST_AUTO_RESTART = 1 ##打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver ##命令行方式启动
RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭
6. 启动备库
启动备库失败,报错需要在dmrman中更新db_magic,原因是恢复数据库后,需要更新db_magic,详情见官方文档-备份恢复部分。
执行更新动作后备库恢复成功
备库启动成功
修改数据OGUID和数据库模式为备库
7. 配置单实例监视器
创建dmmonitor.ini文件,配置以下内容:
[root@dm_m DAMENG]# cat dmmonitor.ini
MON_DW_CONFIRM = 1 ##确认监视器模式
MON_LOG_PATH = /dm8/data/log ##监视器日志文件存放路径
MON_LOG_INTERVAL = 60 ##每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 ##每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 0 ##不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 ##组GRP1的唯一OGUID值
MON_DW_IP = 1.1.1.1:5233
MON_DW_IP = 1.1.1.2:5233
MON_DW_IP = 1.1.1.3:5233
8. 启动进程
启动主备库的守护进程
启动监视器进程
9. 主备集群数据插入及查询测试
在主库上建表并测试数据插入后提交,在备库上可以查询到对应数据;
但是在备库上无法执行创建表动作
10. 故障模拟测试
10.1 关闭主库数据库进程
主库为前台运行,关闭前台进程,查看现象
监控进程显示主库短暂shutdown后自动拉起
10.2 关闭备库前台数据库进程
监控程序经过短暂shutdown后自动拉起
10.3 关闭主库守护进程
监控器处主库的守护WSTATUS显示异常。主库数据库进程运行正常
10.4 关闭主库守护进程,同时Kill掉主库进程
Monitor显示主库异常,备库自动切换
备库自动接管主库业务,状态切换为primary,可以执行数据写入操作
11. 故障恢复测试
依次启动故障库的数据库进程和守护进程,监控器显示该节点自动被设置为standby节点
12. 手动集群切换测试
手动切换主备集群,切换之前需要login监视器,并输入数据库的用户名和密码
查看切换后的数据库状态,原主备集群位置已恢复
四、实验结论
1.守护集群至少需要两个数据库节点和一个监控节点,且网络需要切分为心跳网络和业务网络,监控节点位于心跳网络;
2.守护集群可以实现主备数据库的无缝切换,且在故障库恢复之后,开启服务可自动作为备节点加入集群。
五、实验心得
1. Dmran备份未初始化的数据库报错
数据库在dminit之后,还要启动一次以完成初始化动作,否则dmrman会报错“无法备份未初始化的数据库”
2. 备库无法启动,需更新db_magic
备库由主库的离线备份恢复而来,启动备库失败,报错需要在dmrman中更新db_magic
执行更新动作后主库启动成功
社区地址:https://eco.dameng.com