搭建原理
- 主备架构:
- 主库(Primary模式):提供完整的数据库服务,直接支撑应用系统的生产库,修改主备库时都需要将数据库启动到mount模式:dmserver /dm8/dmdbms/data/TEST/dm.ini mount,然后设置 OGUID,在主备库分别执行:sp_set_oguid(45331),修改数据库模式主备库:alter database primary(standby),然后停止数据库正常启动(open)。
- 备库(Standby模式):提供只读数据库服务,用于容灾、备份、查询等只读功能。备库支持临时表的Insert/Delete/Update操作。
- 数据同步:
- 主库产生的Redo日志会被传输到备库。
- 备库接收Redo日志并重新应用(重演),实现与主库的数据同步。
- 修改dm.ini的配置参数,修改参数如下:
INSTANCE_NAME = TEST1
PORT_NUM = 5236 #数据库实例监听端口
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
- Redo日志传输:
- 以日志包RLOG_PKG为单位,通过MAL系统(基于TCP协议的内部通信机制)发送Redo日志到备库。
- 主库在将RLOG_PKG发送到备库后,再将RLOG_PKG写入本地联机Redo日志文件。
- 修改归档日志,两个节点都配置,ARCH_DEST分写写对方的实例。比如当前实例 TEST1 是主库,需要向 TEST2(实时备库)同步数据,因此实时归档的ARCH_DEST 配置为 TEST2,配置文件如下:
ARCH_WAIT_APPLY = 0 #开启高性能模式
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = TEST2 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 1024 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 Mb,0 表示无限制,范围 1024~4294967294M
- mal系统: 1. dmmal.ini 是 MAL 配置文件。需要用到 MAL 环境的实例,所有站点 dmmal.ini 需要保 证严格一致。 2.配置 dmmal.ini文件,2节点配置配置一样。具体如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = TEST1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_INST_HOST = 10.10.10.7 #实例的对外服务 IP 地址
MAL_HOST = 10.0.0.7 #MAL 系统监听 TCP 连接的 IP 地址
MAL_INST_PORT = 5236 #实例的对外服·务端口,和 dm.ini 中的PORT_NUM 一致
MAL_INST_DW_PORT = 5237 #实例监听守护进程TCP连接的端口
MAL_PORT = 5238 #MAL 系统监听 TCP 连接的端口
MAL_DW_PORT = 5239 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = TEST2
MAL_INST_HOST = 10.10.10.8
MAL_HOST = 10.0.0.8
MAL_INST_PORT = 5236
MAL_INST_DW_PORT = 5237
MAL_PORT = 5238MAL_DW_PORT = 5239
- 守护进程(dmwatcher):
- 管理数据守护系统的核心部件,负责数据库监控、故障检测、故障处理、故障恢复等功能。
- 监控数据库状态、发送状态信息、监控其他守护进程消息、接收监视器消息等。
- 配置dmwatcher.ini,主备都要配置,守护进程使用AUTO,自动切换模式,配置文件如下:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #auto自动切换 MANUAL:手动切换
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dm8/dmdbms/data/TEST/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
- 监视器(dmmonitor):
- 命令行工具,是DM数据守护系统的重要组成部分。
- 监控数据守护系统的运行情况,获取主备库状态、守护进程状态以及主备库数据同步情况等信息。
- 提供一系列命令来管理数据守护系统,如启动、停止守护进程的监控功能,执行主备库切换、备库故障接管等操作,一些常见命令如下: 1.help --显示帮助信息
2.exit --退出监视器
3.show version --显示监视器自身版本信息
4.show global info --显示所有组的全局信息
5.show database [group_name.]db_name --显示指定库的详细信息
6.show [group_name] --显示指定组的详细信息,如果未指定组名,则显示所有组的详细信息
7.show i[nterval] n --每隔n秒自动显示所有组的详细信息
8.q --取消自动显示
9.list [[group_name.]db_name] --列出指定组的库对应的守护进程配置信息,如果都未指定,则列出所有守护进程配置信息
10.show open info [group_name.]db_name --显示指定库的OPEN历史信息
11.show arch send info [group_name.]db_name --查看源库到指定组的指定库的归档同步信息(包含恢复间隔信息)
12.show apply stat [group_name.]db_name --查看指定组的指定库的日志重演信息
13.show monitor [group_name[.]] [db_name] --列出连接到指定守护进程的所有监视器信息
14.show state --显示当前监视器所在监视器配置组的所有监视器的状态信息
15.tip --查看系统当前运行状态
16.login [/@service_name] --登录监视器. 如果指定了/@service_name,则会使用wallet方式登录;否则为默认的交互式登录
17.logout --退出登录
18.get takeover time --获取备库开始自动接管需要延迟等待的时间
19.startup dmwatcher [group_name] --启动指定组的守护进程监控功能
20.stop dmwatcher [group_name] --关闭指定组的守护进程监控功能
21.startup group [group_name] --启动指定组中的所有库
22.stop group [group_name] --关闭指定组中的所有库
23.kill group [group_name] --强制杀掉指定组中的所有活动库
24.choose switchover [group_name] --选择可切换为PRIMARY库的备库列表
25.choose takeover [group_name] --选择可接管故障PRIMARY库的备库列表
26.choose takeover force [group_name] --选择可强制接管故障PRIMARY库的备库列表
27.set group [group_name] auto restart on --打开指定组中所有节点的自动拉起功能
28.set group [group_name] auto restart off --关闭指定组中所有节点的自动拉起功能 - 配置确认监视器dmmonitor.ini,其中MON_DW_IP中的ip跟port要和dmmal系统的dmmal.ini配置文件里面的MAL_HOST跟MAL_DW_PORT配置项保持一致,配置文件如下:
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm8/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1] #组名需要跟dmwatcher.ini配置文件中一致
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 10.0.0.7:5239 #根据实际情况进行修改
MON_DW_IP = 10.0.0.8:5239 -
注册监视器服务:/dm8/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /dm8/dmmonitor.ini -p Monitor