参考博客
注意,为更好区分,如下黑框为主库,白框为备库
文章目录
数据库规划
本地目录规划
目录用途 | 目录路径 |
---|---|
数据库目录 | /home/dmdba/dmdbms |
实例目录 | /home/dmdba/dmdata |
归档日志目录 | /home/dmdba/dmarch/arch |
备份文件目录 | /home/dmdba/dmbak |
IP以及实例规划
服务器 | ip | 实例名 |
---|---|---|
监视器 | 192.168.32.148 | - |
主库 | 192.168.32.128 | DM_MF |
实时备库 | 192.168.32.148 | DM_SYNC |
异步备库 | 192.168.32.154 | DM_ASYNC |
端口规划
不同主机最好是相同用途的端口配置成相同的端口号,实际中也可以按需要修改端口号。端口规划如下:
端口 | 用途 |
---|---|
5236 | 数据库实例监听端口 |
61141 | MAL系统监听TCP连接的端口 |
52141 | 实例本地的守护进程监听TCP连接的端口 |
33141 | 实例监听守护进程TCP连接的端口 |
数据准备
对主库进行脱机备份
对实时备库进行脱机还原
对异步备库进行脱机还原
添加配置文件
主库
dm.ini
INSTANCE_NAME = DM_MF #修改实例名
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
TIMER_INI = 1 #打开定时器配置,除异步备库外的主备库需要
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
dmarch.ini
实例目录下若没有就新建,添加如下内容:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM_SYNC #实时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmarch/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
dmmal.ini
实例目录下若没有就新建,添加如下内容:
MAL_CHECK_INTERVAL = 5 # MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 # 判定 MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DM_MF #与 dm.ini中的 INSTANCE_NAME一致
MAL_HOST = 10.0.0.151 # MAL系统监听 TCP 内部网络 IP
MAL_PORT = 61141 # MAL系统监听 TCP连接的端口
MAL_INST_HOST = 192.168.163.151 #实例的对外服务 IP地址
MAL_INST_PORT = 5236 #与 dm.ini中的 PORT_NUM一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DM_SYNC #与 dm.ini中的 INSTANCE_NAME 一致
MAL_HOST = 10.0.0.152 # MAL系统监听 TCP内部网络 IP
MAL_PORT = 61141 # MAL系统监听 TCP连接的端口
MAL_INST_HOST = 192.168.163.152 #实例的对外服务 IP地址
MAL_INST_PORT = 5236 #与 dm.ini中的 PORT_NUM一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP端口
MAL_INST_DW_PORT = 33141
[MAL_INST3]
MAL_INST_NAME = DM_ASYNC
MAL_HOST = 10.0.0.153
MAL_PORT = 61141
MAL_INST_HOST = 192.168.32.154
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
dmwatcher.ini
[GRP_RW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dmdata/DM_MF/dm.ini # dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
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 = 11:00:00
END_TIME = 11:01:00
DURING_START_DATE = 2023-7-24 17:00:00
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
此处定时器配置为每天 11:00:00 触发主库和实时备库发送归档日志到异步备库,起始日期时间是 2023-07-24 15:00 。具体可以根据实际情况再做调整。
实时备库
dm.ini
INSTANCE_NAME = DM_SYNC #修改实例名
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
TIMER_INI = 1 #打开定时器配置,除异步备库外的主备库需要
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM_MF #实时归档目标实例名(备库侧填写主库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmarch/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
dmmal.ini
与主库一致
dmwatcher.ini
[GRP_RW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dmdata/DM_SYNC/dm.ini # dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
dmtimer.ini
与主库一致,异步备库不需要
dmmonitor.ini
可以配置在其他备库上
MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdata/DM_SYNC/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP_RW]
MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.0.0.151:52141
MON_DW_IP = 10.0.0.152:52141
MON_DW_IP = 10.0.0.153:52141
异步备库
dm.ini
INSTANCE_NAME = DM_ASYNC #修改实例名
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmarch/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
dmmal.ini
与主库一致
dmwatcher.ini
[GRP_RW]
DW_TYPE = LOCAL #本地守护类型
DW_MODE = MANUAL #手动切换模式
DW_ERROR_TIME = 10
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdata/DM_ASYNC/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
启动集群
启动实例
-
主备库同时启动到mount状态
//主库 ./dmserver /home/dmdba/dmdata/DM_MF/dm.ini mount //实时备库 ./dmserver /home/dmdba/dmdata/DM_SYNC/dm.ini mount //异步备库 ./dmserver /home/dmdba/dmdata/DM_ASYNC/dm.ini mount
-
使用disql修改模式和oguid
主库SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> sp_set_oguid(453331); #修改 oguid SQL> alter database primary; #修改为 primary 模式 SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
实时备库、异步备库
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> sp_set_oguid(453331); #修改 oguid SQL> alter database standby; #修改为 standby 模式 SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
启动守护进程
主备库都执行:
./dmwatcher /home/dmdba/dmdata/dmrw/dmwatcher.ini
启动监视器
./dmmonitor /home/dmdba/dmdata/dmrw/dmmonitor.ini
监视器启动后可以看到各个主机的启动状态
验证数据同步
验证实时同步
-
主库创建测试表,插入数据
-
备库查询(commit前后)
-
输入show需要关注的信息有:
监视器输入show可以发现invalid,可能导致同步不成功,此处需要修改错误
参见
主库和实时备库的 FLSN 和 CLSN 的值会随时间增长而同步增长,而异步备库的这两个值一般不变,只有等触发定时器后才会更新。
验证主备切换后数据同步
-
切换主备库,监视进程输入login switchover
再次输入show查看:
-
原本的实时备库插入数据:
-
原本的主库查询:
-
再次输入switchover切换主备,恢复原状
验证异步同步
- 定时器时间设置为18:24
- 监视器查看异步备库的归档日志接收信息(18:24前后)
-
disql查询(18:24前后)
-
到相应路径下查看归档日志
这里一定要注意系统时间的问题,最开始主库一直不发送,查看show发现系统时间不对,修改过来就可以了
修改前:
修改后: