目录
先搭建好实时主备集群,参考:
1、配置异步备库
新增的机器事先安装了 DM,安装路径为'/dm',执行程序保存在'/dm/bin'目录中,数据存放路径为'/dm/data'。
读写分离集群、MPP 主备和 DMDSC 主备的异步备库搭建步骤是相同的,只需要根据实际情况调整配置项的具体值即可。
这里将配置两个异步备库 GRP1_LOCAL_01 和 GRP1_LOCAL_02。其中 GRP1_LOCAL_01 配置在主库 GRP1_RT_01 上;而 GRP1_LOCAL_02 以级联方式配置在 GRP1_LOCAL_01 上。
配置环境说明
机器名 | IP 地址 | 初始状态 | 操作系统 | 备注 |
DW_S2 | 192.168.64.133 192.168.169.143 | 异步备库 GRP1_LOCAL_01 | Linux rh7 x86_64 GNU/Linux | 192.168.64.133 外部服务 IP; |
DW_S3 | 192.168.64.134 192.168.169.144 | 异步备库 GRP1_LOCAL_02 | Linux rh7 x86_64 GNU/Linux | 192.168.64.134 外部服务 IP; 192.168.169.144 内部通信 IP |
1.1 数据准备
1.初始化数据库
2.使用备份还原方法准备异步备库(GRP1_LOCAL_01和GRP1_LOCAL_02)的数据。
1.2 配置主库 GRP1_RT_01
配置 dm.ini
打开定时器配置,其他配置不变。
##配置有异步归档时,打开定时器,定时同步归档到异备库
TIMER_INI = 1
配置 dmmal.ini
增加异步备库 GRP1_LOCAL_01 和 GRP1_LOCAL_02 的 MAL 配置项。
[MAL_INST3]
MAL_INST_NAME = GRP1_LOCAL_01 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.169.143 #MAL系统监听TCP连接的IP地址
MAL_PORT = 61143 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.64.133 #实例的对外服务IP地址
MAL_INST_PORT = 32143 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52143 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33143 #实例监听守护进程TCP连接的端口
[MAL_INST4]
MAL_INST_NAME= GRP1_LOCAL_02 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.169.144 #MAL系统监听TCP连接的IP地址
MAL_PORT= 61144 #MAL系统监听TCP连接的端口
MAL_INST_HOST= 192.168.64.134 #实例的对外服务IP地址
MAL_INST_PORT= 32144 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT= 52144 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT= 33144 #实例监听守护进程TCP连接的端口
配置 dmarch.ini
增加异步归档的配置项。
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC ##异步归档类型
ARCH_DEST = GRP1_LOCAL_01 ##异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER ##定时器名称,和dmtimer.ini中的名称一致
配置 dmtimer.ini
配置 dmtimer.ini,用于定时触发实例发送归档日志到异步备库。
下面示例中定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整。
[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 = 00:00:00
DURING_START_DATE = 2016-02-11 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
如果配置异步备库时,实时主备环境已经配置完成,这里对主库不需要再做其他配置,由于在配置异步备库之前实时主备环境已经被正常关闭,此处可以使用 Mount 方式将主库重启启动,并启动主库的守护进程。
1.3配置备库 GRP1_RT_02
备库上也需要增加相同的异步备库配置,保证备库在切换为主库后可以继续向同一个异步备库同步数据。
配置 dm.ini
##配置有异步归档时,打开定时器,定时同步归档到异备库
TIMER_INI = 1
配置 dmmal.ini
可以直接拷贝主库修改后的dmmal.ini文件
配置 dmarch.ini
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC ##异步归档类型
ARCH_DEST = GRP1_LOCAL_01 ##异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER ##定时器名称,和dmtimer.ini中的名称一致
配置 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 = 00:00:00
DURING_START_DATE = 2016-02-11 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
如果配置异步备库时,实时主备环境已经配置完成,这里对实时备库不需要再做其他配置,由于在配置异步备库之前实时主备环境已被正常关闭,此处可以使用 Mount 方式将实时备库重新启动,并启动实时备库的守护进程。
1.4配置异步备库 GRP1_LOCAL_01
配置 dm.ini
#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16
INSTANCE_NAME = GRP1_LOCAL_01
PORT_NUM = 32143 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
TIMER_INI = 1 #打开定时器,定时同步归档到异步备库。目的是使GRP1_LOCAL_01能够定时发送归档信息到GRP1_LOCAL_02
RLOG_SEND_APPLY_MON = 64 #统计最近64次的日志重演信息
配置 dmmal.ini
拷贝主库的dmmal.ini文件
配置 dmarch.ini
在异步归档配置项中,ARCH_DEST 表示当前实例需要同步归档数据的目标实例名。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M
[ARCHIVE_ASYNC]
ARCH_TYPE= ASYNC #异步归档类型
ARCH_DEST= GRP1_LOCAL_02 #异步归档目标实例名
ARCH_TIMER_NAME= RT_TIMER #定时器名称,和dmtimer.ini中的名称一致
配置 dmtimer.ini
下面示例中定时器配置为每天 00:00:00 触发 GRP1_LOCAL_01 发送归档日志到异步备库 GRP1_LOCAL_02,可以根据实际情况再做调整。
[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 = 00:00:00
DURING_START_DATE = 2016-02-11 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
配置 dmwatcher.ini
配置为本地守护类型,异步备库不具备故障自动切换等功能,DW_MODE 配置并不起作用,此处配置为 MANUAL 即可。
[GRP1]
DW_TYPE = LOCAL #本地守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /dm/data/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动
启动异步备库
以 Mount 方式启动备库
./dmserver /dm/data/DAMENG/dm.ini mount
设置 OGUID
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
修改数据库模式
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
1.5级联配置异步备库 GRP1_LOCAL_02
配置 dm.ini
INSTANCE_NAME = GRP1_LOCAL_02
PORT_NUM = 32144 #数据库实例监听端口
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次的日志重演信息
配置 dmmal.ini
拷贝主库dmmal.ini
配置 dmarch.ini
只需要配置本地归档。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M
配置 dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL ##本地守护类型
DW_MODE = MANUAL ##故障手动切换模式
DW_ERROR_TIME = 10 ##远程守护进程故障认定时间
INST_ERROR_TIME = 10 ##本地实例故障认定时间
INST_OGUID = 453331 ##守护系统唯一OGUID值
INST_INI = /dm/data/DAMENG/dm.ini ##dm.ini配置文件路径
INST_AUTO_RESTART = 1 ##打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver ##命令行方式启动
启动异步备库
以 Mount 方式启动备库
./dmserver /dm/data/DAMENG/dm.ini mount
设置 OGUID
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
修改数据库模式
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
1.6配置监视器
配置单实例监视器
修改 dmmonitor.ini 配置确认监视器,增加到 GRP1_LOCAL_01 和 GRP1_LOCAL_02 守护进程的 MON_DW_IP 配置项,需要找到 dmmal.ini 中对应的配置项信息,MON_DW_IP 中的 IP 信息和 dmmal.ini 配置项中的 MAL_HOST 一致,PORT 信息和 dmmal.ini 配置项中的 MAL_DW_PORT 配置项保持一致。
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/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值
#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP = 192.168.169.141:52141
MON_DW_IP = 192.168.169.142:52142
#新增到异步备库GRP1_LOCAL_01/GRP1_LOCAL_02守护进程的连接信息
MON_DW_IP = 192.168.169.143:52143
MON_DW_IP = 192.168.169.144:52144
配置多实例监视器
MON_LOG_PATH = /dm/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
MON_DW_CONFIRM = 1
MON_INST_NUM = 3 #实例总个数
MON_HB_INTERVAL = 60 #通信心跳校验间隔
MON_BRO_INTERVAL = 100 #raft协议中实例通信心跳间隔
MON_VOTE_INTERVAL = 100 #raft协议中基础投票间隔
MON_ID = 1 #当前监视器在监视器系统中的ID
MON_MID = 45614 #当前监视器系统的唯一标识
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.169.141:52141
MON_DW_IP = 192.168.169.142:52142
#新增到异步备库GRP1_LOCAL_01/GRP1_LOCAL_02守护进程的连接信息
MON_DW_IP = 192.168.169.143:52143
MON_DW_IP = 192.168.169.144:52144
[MON1]
MON_HOST = 192.168.169.141 #系统监听TCP连接的IP地址
MON_PORT = 8339 #系统监听TCP连接的端口号
MON_INST_ID = 1 #监视器实例在监视器系统中的ID
[MON2]
MON_HOST = 192.168.169.141 #系统监听TCP连接的IP地址
MON_PORT = 8340 #系统监听TCP连接的端口号
MON_INST_ID = 2 #监视器实例在监视器系统中的ID
[MON3]
MON_HOST = 192.168.169.141 #系统监听TCP连接的IP地址
MON_PORT = 8341 #系统监听TCP连接的端口号
MON_INST_ID = 3 #监视器实例在监视器系统中的ID
1.7、启动守护进程
启动异步备库的守护进程:
./dmwatcher /dm/data/DAMENG/dmwatcher.ini
守护进程启动后,进入 Startup 状态,此时实例处于 Mount 状态,异步备库的守护进程会将本地实例自动 Open,并切换守护进程自身为 Open 状态。
1.8、启动监视器
./dmmonitor /dm/data/dmmonitor.ini
至此,实时主备环境下的异步备库和级联异步备库搭建完成。
2、配置同步备库
同步备库目的是在实时或即时主备环境中,当主备库切换或者主库故障时,备库接管以后可以继续向同一个同步备库同步数据。实时或即时备库只有在切换为主库时才会向其同步数据。
读写分离集群和 MPP 主备的同步备库搭建步骤是相同的,只需要根据实际情况调整配置项的具体值即可。
配置环境说明
机器名 | IP****地址 | 初始状态 | 操作系统 | 备注 |
DW_S2 | 192.168.64.135 192.168.169.145 | 同步备库 GRP1_SYNC_01 | Linux rh7 x86_64 GNU/Linux | 192.168.64.135 外部服务 IP; 192.168.169.145 内部通信 IP |
2.1 数据准备
备份还原的方式准备数据,详细步骤略。
如果实时主备守护环境已经处于运行状态,需要先正常退出主备库实例和守护进程。
2.2 配置主库 GRP1_RT_01
配置 dm.ini
主库的dm.ini不变
配置 dmmal.ini
增加同步备库 GRP1_SYNC_01 的 MAL 配置项。
[MAL_INST3]
MAL_INST_NAME = GRP1_SYNC_01 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.169.145 #MAL系统监听TCP连接的IP地址
MAL_PORT = 61145 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.64.135 #实例的对外服务IP地址
MAL_INST_PORT = 32145 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52145 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33145 #实例监听守护进程TCP连接的端口
配置 dmarch.ini
增加同步归档的配置项。
[ARCHIVE_SYNC]
ARCH_TYPE = SYNC #同步归档类型
ARCH_DEST = GRP1_SYNC_01 #同步归档目标实例名
ARCH_RECOVER_TIME = 1 #同步备库的异步恢复间隔
如果配置同步备库时,实时主备环境已经配置完成,这里对实时备库不需要再做其他配置,由于在配置同步备库之前实时主备环境已被正常关闭,此处可以使用 Mount 方式将实时备库重新启动,并启动实时备库的守护进程。
2.3 配置备库 GRP1_RT_02
备库上也需要增加相同的同步备库配置,保证备库在切换为主库后可以继续向同一个同步备库同步数据。
配置 dm.ini
dm.ini不变
配置 dmmal.ini
拷贝主库的dmmal.ini
配置 dmarch.ini
[ARCHIVE_SYNC]
ARCH_TYPE = SYNC #同步归档类型
ARCH_DEST = GRP1_SYNC_01 #同步归档目标实例名
ARCH_RECOVER_TIME = 1 #同步备库的异步恢复间隔
如果配置同步备库时,实时主备环境已经配置完成,这里对实时备库不需要再做其他配置,由于在配置同步备库之前实时主备环境已被正常关闭,此处可以使用 Mount 方式将实时备库重新启动,并启动实时备库的守护进程。
2.4 配置同步备库 GRP1_SYNC_01
配置 dm.ini
#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16
INSTANCE_NAME = GRP1_SYNC_01
PORT_NUM = 32145 #数据库实例监听端口
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次的日志重演信息
配置 dmmal.ini
拷贝主库的dmmal.ini
配置 dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/data/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M
配置 dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL #本地守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /dm/data/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动
启动同步备库
以 Mount 方式启动备库
./dmserver /dm/data/DAMENG/dm.ini mount
设置 OGUID
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
修改数据库模式
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.5 配置监视器
配置单实例监视器
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/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值
#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置
#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT
MON_DW_IP = 192.168.169.141:52141
MON_DW_IP = 192.168.169.142:52142
#新增到同步备库GRP1_SYNC_01守护进程的连接信息
MON_DW_IP = 192.168.169.145:52145
配置多实例监视器
MON_LOG_PATH = /dm/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
MON_DW_CONFIRM = 1
MON_INST_NUM = 3 #实例总个数
MON_HB_INTERVAL = 60 #通信心跳校验间隔
MON_BRO_INTERVAL = 100 #raft协议中实例通信心跳间隔
MON_VOTE_INTERVAL = 100 #raft协议中基础投票间隔
MON_ID = 1 #当前监视器在监视器系统中的ID
MON_MID = 45614 #当前监视器系统的唯一标识
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.169.141:52141
MON_DW_IP = 192.168.169.142:52142
#新增到同步备库GRP1_SYNC_01守护进程的连接信息
MON_DW_IP = 192.168.169.145:52145
[MON1]
MON_HOST = 192.168.169.141 #系统监听TCP连接的IP地址
MON_PORT = 8339 #系统监听TCP连接的端口号
MON_INST_ID = 1 #监视器实例在监视器系统中的ID
[MON2]
MON_HOST = 192.168.169.141 #系统监听TCP连接的IP地址
MON_PORT = 8340 #系统监听TCP连接的端口号
MON_INST_ID = 2 #监视器实例在监视器系统中的ID
[MON3]
MON_HOST = 192.168.169.141 #系统监听TCP连接的IP地址
MON_PORT = 8341 #系统监听TCP连接的端口号
MON_INST_ID = 3 #监视器实例在监视器系统中的ID
2.6 启动守护进程
启动同步备库的守护进程:
./dmwatcher /dm/data/DAMENG/dmwatcher.ini
2.7 启动监视器
./dmmonitor /dm/data/dmmonitor.ini
至此,实时主备环境下的同步备库搭建完成。在搭建步骤和各项配置都正确的情况下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于 Open 状态,即为正常运行状态。
达梦技术社区:https://eco.dameng.com/