一、数据守护概念
1、基础
(1)就是基于redo日志的主备系统,由数据库服务、守护进程、监视器组成
2、守护进程
(1)用来监控实例进程
(2)本地守护
监控实例,可配置重启数据库实例
(3)全局守护
通过和远程守护进程的交互,增加了主备库切换、主备库故障检测、备库接管、数据库故障重加入等功能。
(4)故障自动切换
需要确认监视器确认实例状态,才会自动切换
(5)故障手动切换
需要人为介入处理
(6)当检测到实例进程 ID 已经不存在或者超过一段时间没有收到实例消息(INST_ERROR_TIME),则会认定实例故障。如果配置了自动重启,则会将实例重新拉起
3、实时归档
(1)主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo日志发送到备库,
(2)备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_PKG,
(3)将原 KEEP_PKG加入日志重演任务系统,并马上响应主库,
(4)不需要等待 Redo 日志重演结束后再响应主库。
4、即时归档
(1)主库将 Redo 日志写入联机日志文件后
(2)通过 MAL 系统将 Redo日志发送到备库。
(3)即时归档,ARCH_WAIT_APPLY 默认是1,重演完后相应
(4)即时归档的同步机制可以保证备库的 Redo 日志不会比主库的 Redo 日志多
5、监视器
(1)用来向守护进程传递命令
(2)可以执行主备状态查询、主备切换等命令
(3)支持两种运行模式:监控模式和确认模式,故障自动切换模式的数据守护系统,必须部署一个确认监视器
二、数据守护搭建
1、规划
IP | 实例名 | PORT_NUM | MAL_HOST(内部通信) | MAL_PORT | MAL_DW_PORT | MAL_INST_DW_PORT |
10.10.1.3 | DMSERVER | 5236 | 10.10.1..3 | 15236 | 25236 | 35236 |
10.10.1.4 | DMSERVER1 | 5236 | 10.10.1..3 | 15236 | 25236 | 35236 |
2、准备数据库
主备库分别初始化数据库实例(略)
3、准备配置文件
(1)dm.ini(主备库相同即可)
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
(2)dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DMSERVER #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.10.1.3 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 15236 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 10.10.1.3 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 25236 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 35236 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 10.10.1.4
MAL_PORT = 15236
MAL_INST_HOST = 10.10.1.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 25236
MAL_INST_DW_PORT = 35236
(3)dmarch.ini
主库(10.10.1.3)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmarch/5236 #本地归档文件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 2048 #单位 Mb,0 表示无限制,范围 1024~2147483647M
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档
ARCH_DEST = DMSERVER1
备库(10.10.1.4)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmarch/5236 #本地归档文件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 2048 #单位 Mb,0 表示无限制,范围 1024~2147483647M
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档
ARCH_DEST = DMSERVER
(4)dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
(5)dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /indata/data/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
#以下x配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.10.1.3:25236
MON_DW_IP = 10.10.1.4:25236
4、备份恢复
(1)主库备份
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL \
TO BACKUP_FILE1 BACKUPSET '/indata/bak/to_dw_1'"
(2)scp到备份恢复
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' \
FROM BACKUPSET'/indata/bak/to_dw_1'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' \
FROM BACKUPSET'/indata/bak/to_dw_1'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
5、主备库设置守护状态
(1)主库
./dmserver /dmdata/DAMENG/dm.ini mount
disql.....
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45331);
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
(2)备库
./dmserver /dmdata/DAMENG/dm.ini mount
disql.....
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45331);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
6、主备库启动守护进程
dmwatcher /dmdata/DAMENG/dmwatcher.ini
dmwatcher /dmdata/DAMENG/dmwatcher.ini
7、注册为服务
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver \ -dm_ini /dmdata/DAMENG/dm.ini -p DMSERVER
/opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher \ -watcher_ini /dmdata/DAMENG/dmwatcher.ini -p GRP1
/opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor \ -monitor_ini /dmdata/DAMENG/dmmonitor_GRP1.ini -p GRP1
三、数据守护验证
1、数据同步验证
(1)主库插入数据
(2)备库查询
2、故障自动切换
(1)启动好确认监视器
(2)杀死主库后,备库成功接管
(3)以下为监视器输出
四、读写分离
1、实现方法
(1)是通过试错来的,在有分明的只读业务时建议使用
2、配置要求
(1)读写分离集群可以配置为即时归档,也可以配置为实时归档
(2)可根据业务情况进行设置
3、配置方法
(1)DM 多种客户端接口都支持读写分离集群连接设置,各客户端可能不相同
(2)dm_svr.conf
RW_SEPARATE
是否启用读写分离。
0:不启用;
1:启用;
2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点
RW_PERCENT
读写分离分发比例,有效值范围 0~100