如果数据库规模很大,并且对数据的实时性要求不是很严格,则可以配置多个异步备库用于分担统计报表等任务
本篇将在原有实时主备集群的基础上新增一个异步备库节点,架构图如下
| 主机名 | IP | 数据库名(db_name) | 实例名(instance_name) | 角色 |
|---|---|---|---|---|
| DW-SS1 | 192.168.20.36 | dmdb | dmdb1 | 主库 |
| DW-SS2 | 192.168.20.37 | dmdb | dmdb2 | 实时同步备库 |
| DW-YB1 | 192.168.20.38 | dmdb | dmdb3 | 异步同步备库 |
注意事项:
在原有dm.ini文件的基础上启用定时器
vi /dmdb/dmdata/dmdb/dm.ini TIMER_INI=1
在原有dmmal.ini基础上增加异步备库DW-YB1的MAL配置项
vi /dmdb/dmdata/dmdb/dmmal.ini
[MAL_INST3]
MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.20.38 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP
MAL_PORT = 61143 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.20.38 #实例的对外服务IP地址
MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52143 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口
在原有dmarch.ini基础上增加异步备库DW-YB1的MAL配置项
vi /dmdb/dmdata/dmdb/dmarch.ini
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = dmdb3 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致
如果异步备库为 DMDSC 集群,则 ARCH_DEST 中需要配置 DMDSC 集群中所有节点实例名称,不同实例名之间使用“/”分隔。假设 DMDSC 集群中包含两个节点实例,实例名分别为 DSC01 和 DSC02,则需要配置 ARCH_DEST=DSC01/DSC02
dmtimer.ini 用于配置定时器,用于数据守护中记录异步备库的定时器信息中记录异步复制的定时器信息。dmtimer.ini 的配置项如下
| 配置项 | 配置含义 |
|---|---|
| [TIMER_NAME1] | 定时器名称。例如,名为 RT 的定时器,名称书写方式为[RT] |
| TYPE | 定时器调度类型:1:执行一次。时间上只需要指定 DURING_START_DATE 即可,不需要指定 START_TIME、END_TIME 和 DURING_END_DATE2:按日执行3:按周执行4:按月执行的第几天5:按月执行的第一周6:按月执行的第二周7:按月执行的第三周8:按月执行的第四周9:按月执行的最后一周10: 按 REPEAT_INTERVAL 指定的日历表达式的频率进行。不再需要通过 START_TIME、END_TIME、DURING_START_DATE 和 DURING_END_DATE 指定时间 |
| FREQ_MONTH_WEEK_INTERVAL | 间隔月或周数。这个列的可选值与上面的不同调度类型有关。表示执行的频率。说明如下:当 TYPE=1 时,这个值无效,系统不会做检查。当 TYPE=2 时,表示每隔几天执行,值的有效范围为 1 到 100。当 TYPE=3 时,表示的是每隔几个星期执行,值的有效范围为 1 到 100。当 TYPE=4 时,表示每几个月中的某一天执行,值的有效范围为 1 到 100。当 TYPE 为 5、6、7、8 或 9 时,都表示每几个月的某一周执行,值的有效范围为 1 到 100 |
| FREQ_SUB_INTERVAL | 间隔天数。这个列的可选值与上面的不同调度类型有关。表示执行的频率,在 FREQ_MONTH_WEEK_INTERVAL 基础上,继续指定更为精细的频率。说明如下:当 TYPE=1 或 2 时,这个值无效,系统不会做检查。当 TYPE=3 时,表示的是某一个星期的星期几执行,可以同时选中七天中的任意几天。取值范围 1~127。具体如何取值,请用户参考如下规则。因为每周有七天,所以 DM 用七位二进制来表示选中的日子。从最低位开始算起,依次表示周日、周一...周五、周六。选中周几,就将该位置 1,否则 0。例如:选中周二和周六,7 位二进制就是 1000100,转化成十进制就是 68,所以 FREQ_SUB_INTERVAL 就取值 68。当 TYPE=4 时,表示将在一个月的第几天执行,此时这个列的有效值范围为 1 到 31当 TYPE 为 5、6、7、8 或 9 时,都表示将在某一周内第几天执行,有效值为 1 到 7,分别表示从周一到周日 |
| FREQ_MINUTE_INTERVAL | 间隔分钟数。当 TYPE 为 2、3、4、5、6、7、8 或 9 时,在 FREQ_MONTH_WEEK_INTERVALHE 和 FREQ_SUB_INTERVAL 的基础上,继续指定更为精细的频率。表示一天内每隔多少分钟执行一次。取值范围 0~1440,0 表示一天内执行一次 |
| REPEAT_INTERVAL | 当 TYPE 为 10 时使用,用来指定的日历表达式。语法详见《DM8 系统包使用手册》手册 DBMS_SCHEDULER 包中关于 REPEAT_INTERVAL 的介绍 |
| START_TIME | 定时器开始时间,TIME 类型。例如:20:59:59.999999 |
| END_TIME | 定时器结束时间,TIME 类型 |
| DURING_START_DATE | 指定定时器的有效日期范围的起始日期,必须是有效的日期字符串,不可以为空。TIMESTAMP 类型。例如:2021-12-15 10:00:00 |
| DURING_END_DATE | 指定定时器的有效日期范围的结束日期,当 NO_END_DATE_FLAG=1 时可以为空。当 NO_END_DATE_FLAG=0 时不可以为空,必须是有效的日期字符串,同时必须晚于 DURING_START_DATE 日期。TIMESTAMP 类型 |
| NO_END_DATE_FLAG | 是否无结束日期标记。1 是,0 否 |
| DESCRIBE | 定时器描述 |
| IS_VALID | 定时器有效标记,缺省为 0。0:表示已关闭定时器1:表示已启用定时器 |
下面示例中定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整
vi /dmdb/dmdata/dmdb/dmtimer.ini
[RT_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 0
START_TIME = 00:00:00
END_TIME = 23:59:59
DURING_START_DATE = 2026-05-19 17:57:15
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
添加异步同步备库DW-YB1的相关配置
vi /dmdb/dmdata/dmdb/dmmonitor.ini
#以下为异步备库
MON_DW_IP = 192.168.20.38:52143
在原有dm.ini文件的基础上启用定时器
vi /dmdb/dmdata/dmdb/dm.ini TIMER_INI=1
在原有dmmal.ini基础上增加异步备库DW-YB1的MAL配置项
与主库保持一致
vi /dmdb/dmdata/dmdb/dmmal.ini
[MAL_INST3]
MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.20.38 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP
MAL_PORT = 61143 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.20.38 #实例的对外服务IP地址
MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52143 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口
在原有dmarch.ini基础上增加异步备库DW-YB1的MAL配置项
vi /dmdb/dmdata/dmdb/dmarch.ini
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = dmdb3 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致
配置 dmtimer.ini,用于备库切换为主库后,定时触发实例发送归档日志到异步备库
下面示例中定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整
vi /dmdb/dmdata/dmdb/dmtimer.ini
[RT_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 0
START_TIME = 00:00:00
END_TIME = 23:59:59
DURING_START_DATE = 2026-05-19 17:57:15
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
添加异步同步备库DW-YB1的相关配置
vi /dmdb/dmdata/dmdb/dmmonitor.ini
#以下为异步备库
MON_DW_IP = 192.168.20.38:52143
除 instance_name 外与主备库保持一致
dminit path=/dmdb/dmdata instance_name=dmdb3 db_name=dmdb port_num=5238 PAGE_SIZE=32 CASE_SENSITIVE=1 CHARSET=1 SYSDBA_PWD='******' SYSAUDITOR_PWD='******' SYSSSO_PWD='******'
vi /dmdb/dmdata/dmdb/dm.ini
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
TIMER_INI = 1 #打开定时器,定时同步归档到级联异步备库。本篇未涉及级联异步备库,这一步可以省略
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
ENABLE_ENCRYPT = 0 #关闭SSL加密
与主库保持一致
vi /dmdb/dmdata/dmdb/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmdb1 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.20.36 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP
MAL_PORT = 61141 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.20.36 #实例的对外服务IP地址
MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = dmdb2
MAL_HOST = 192.168.20.37
MAL_PORT = 61142
MAL_INST_HOST = 192.168.20.37
MAL_INST_PORT = 5238
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.20.38 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP
MAL_PORT = 61143 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.20.38 #实例的对外服务IP地址
MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52143 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口
配置本地归档和异步归档
在异步归档配置项中,ARCH_DEST 表示当前实例需要同步归档数据的目标实例名。
vi /dmdb/dmdata/dmdb/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdb/dmarch #本地归档文件路径
ARCH_FILE_SIZE = 512 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 2048 #单位 Mb,0 表示无限制,范围 1024~4294967294M
##以下配置为级联异步备库,若不涉及则忽略
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = GRP1_LOCAL_02#异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和 dmtimer.ini 中的名称一致
用于定时发送归档日志到异步备库,本篇不涉及,可忽略,若需要可参考1.4配置dmtimer.ini
配置为本地守护类型,异步备库不具备故障自动切换等功能,DW_MODE 配置并不起作用,此处配置为 MANUAL
vi /dmdb/dmdata/dmdb/dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL #本地守护类型
DW_MODE = MANUAL #自动切换模式(当前为手动模式)
DW_ERROR_TIME = 60 #远程守护进程故障认定时间
INST_RECOVER_TIME = 120 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 60 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /dmdb/dmdata/dmdb/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
与修改后的主库一致
vi /dmdb/dmdata/dmdb/dmmonitor.ini
MON_DW_CONFIRM = 0 #确认监视器模式,缺省为 0。0:监控模式 1:确认模式
MON_LOG_PATH = /dmdb/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以"IP:PORT"的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.20.36:52141
MON_DW_IP = 192.168.20.37:52142
#以下为异步备库的连接信息
MON_DW_IP = 192.168.20.38:52143
cp $DM_HOME/bin/service_template/DmService $DM_HOME/bin/
cp $DM_HOME/bin/service_template/DmWatcherService $DM_HOME/bin/
vi $DM_HOME/bin/DmService
INI_PATH="/dmdb/dmdata/dmdb/dm.ini"
START_MODE=mount
vi $DM_HOME/bin/DmWatcherService
INI_PATH="/dmdb/dmdata/dmdb/dmwatcher.ini"
启动数据库
DmService start
登录数据库,设置OGUID并修改数据库模式
disql /nolog
conn sysdba/"******":5238
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
注册服务后可配置开机自动启动集群及数据库,正常都通过服务启动集群和数据库,不使用启动脚本
##两节点root都执行
cd /dmdb/dmdbms/script/root
./dm_service_installer.sh -t dmwatcher -p dmdb -watcher_ini /dmdb/dmdata/dmdb/dmwatcher.ini
通过 systemctl 启动集群和开机自启动可在部署完成后自行处理
##主库和实时同步备库重启DmWatcherService
DmWatcherService restart
##异步备库启动DmWatcherService
DmWatcherService start
##启动监视器观察集群状态,建议3台服务器都观察
dmmonitor /dmdb/dmdata/dmdb/dmmonitor.ini
异步备库部署完成,监视器已监控到DW-YB1的信息
文章
阅读量
获赞
