实时主备(读写分离)"/>
达梦7 搭建数据守护实时主备(读写分离)
达梦7 搭建数据守护实时主备(读写分离)
目录
创建主库实例... 2
注册服务... 2
启动实例... 2
初始化备库... 2
注册服务... 2
环境变量... 2
开启归档模式... 3
备份主库(离线)... 3
检查数据一致性... 3
在备库上恢复... 4
还原... 4
恢复... 4
... 4
配置主库dm.ini 4
配置 dmmal.ini 5
配置dmarch.ini (实时 即时ARCHIVE_TIMELY )... 6
配置 dmwatcher.ini 6
配置 dmwatcher.ctl 7
启动主库... 8
设置OGUID;和修改数据库模式... 8
配置备库... 8
配置 dm.ini 8
配置 dmmal.ini 9
配置 dmarch.ini 9
配置 dmwatcher.ini 10
配置 dmwatcher.ctl 10
启动备库... 10
设置 OGUID和数据库模式... 10
配置监视器... 10
注册监视器服务... 11
注册守护进程... 11
启动顺序... 11
同步测试... 12
读写分离 验证... 12
注意事项:端口号
创建主库实例
dminit PATH=/dm7/data DB_NAME=DM INSTANCE_NAME=DM_RT_01
dminit PATH=/dm7/data DB_NAME=DM INSTANCE_NAME=DM_RW_01
注册服务
/dm7/script/root/dm_service_installer.sh -t dmserver -i /dm7/data/DM/dm.ini -p DM_RT_01
/dm7/script/root/dm_service_installer.sh -t dmserver -i /dm7/data/DM/dm.ini -p DM_RW_01
启动实例
service DmServiceDM_RT_01 start
初始化备库
dminit PATH=/dm7/data DB_NAME=DM INSTANCE_NAME=DM_RT_02
dminit PATH=/dm7/data DB_NAME=DM INSTANCE_NAME=DM_RW_02
注册服务
/dm7/script/root/dm_service_installer.sh -t dmserver -i /dm7/data/DM/dm.ini -p DM_RT_02
/dm7/script/root/dm_service_installer.sh -t dmserver -i /dm7/data/DM/dm.ini -p DM_RW_02
export PATH export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm7/bin" export DM_HOME="/dm7" export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool alias disql='rlwrap disql' alias dmrman='rlwrap dmrman' |
环境变量
开启归档模式
SQL> alter database mount; SQL> alter database add archivelog 'dest=/dm7/arch ,type=local,file_size=128,space_limit=0'; SQL> alter database archivelog; SQL> alter database open; |
备份主库(离线)
service DmServiceDM_RT_01 stop
service DmServiceDM_RW_01 stop
/dm7/bin/dmrman
./dmrman
backup database '/dm7/data/DM/dm.ini' full backupset '/dm7/bak/full_01';
将备份发送到备库
scp -r /dm7/bak/full_01/ 10.10.10.20:/dm7/bak/
SQL> BACKUP DATABASE FULL BACKUPSET ‘/dm7/bak/full_01’; ---联机备份
检查数据一致性
select file_LSN, cur_LSN from v$rlog;
主库和备库的 FILE_LSN和 CUR_LSN 值相同,可以确保数据完全一致。
select permanent_magic;
确保 LSN 和永久魔数都一致的情况下,正常关闭各个实例,继续配置数据守护
在备库上恢复
(要在DM_HOME/bin下, 不然CMD END.CODE:-7103,DESC:[创建命名管道失败])
还原
./dmrman CTLSTMT="RESTORE DATABASE '/dm7/data/DM/dm.ini' FROM BACKUPSET '/dm7/bak/full_01'" |
恢复
./dmrman CTLSTMT="RECOVER DATABASE '/dm7/data/DM/dm.ini' FROM BACKUPSET '/dm7/bak/full_01'" |
配置主库dm.ini
NSTANCE_NAME = DM_RT_01 PORT_NUM = 5236 #数据库实例监听端口 DW_PORT = 5239#守护环境下,监听守护进程连接端口 DW_ERROR_TIME = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态 ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息 |
配置 dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = DM_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 10.10.10.10 #内网 IP 地址 MAL_PORT = 5237 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.191.20 #实例的对外服务 IP 地址 MAL_INST_PORT =5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5238 #实例对应的守护进程监听 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = DM_RT_02 MAL_HOST = 10.10.10.20 MAL_PORT = 5237 MAL_INST_HOST = 192.168.191.21 MAL_INST_PORT =5236 MAL_DW_PORT = 5538 |
配置dmarch.ini (实时 即时ARCHIVE_TIMELY )
[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DM_RW_02 #即时归档目标实例名 [ARCHIVE_ REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = DM_RT_02 #实时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm7/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M |
配置 dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453332 #守护系统唯一 OGUID 值 INST_INI = /dm7/data/DM/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm7/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭 |
配置 dmwatcher.ctl
同一个守护进程组,必须使用同一份 dmwatcher.ctl。因此,只需要使用 dmctlcvt工具生成一份 dmwatcher.ctl 文件,然后分别拷贝到各个数据库目录下即可。在配置完成 dmwatcher.ini 后,使用 dmctlcvt 工具生成 dmwatcher.ctl:
dmctlcvt TYPE=3 SRC=/dm7/data/DM/dmwatcher.ini DEST=/dm7/data/DM |
默认生成控制文件有个子目录,需要移动到父目录中:
#拷贝生成的 dmwatcher.ctl 文件到数据文件目录/dm7/data/DMSVR。
[dmdba@DMP DMSVR]$ cd GRP1/
[dmdba@DMP GRP1]$ ls
dmwatcher.ctl
[dmdba@DMP GRP1]$ mv dmwatcher.ctl ../
启动主库
dmserver /dm7/data/DM/dm.ini mount
一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库
设置OGUID;和修改数据库模式
SQL> sp_set_oguid(453332); SQL> alter database primary; |
系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
配置备库
配置 dm.ini
INSTANCE_NAME = DM_RT_02 PORT_NUM = 5236 #数据库实例监听端口 DW_PORT = 5239 #守护环境下,监听守护进程连接端口 DW_ERROR_TIME = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态 ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息 |
配置 dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = DM_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 10.10.10.10 #内网 IP 地址 MAL_PORT = 5237 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.191.20 #实例的对外服务 IP 地址 MAL_INST_PORT =5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5238#实例对应的守护进程监听 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = DM_RT_02 MAL_HOST = 10.10.10.20 MAL_PORT = 5237 MAL_INST_HOST = 192.168.191.21 MAL_INST_PORT =5236 MAL_DW_PORT = 5238 |
配置 dmarch.ini
[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY #即时归档类型 ARCH_DEST = DM_RW_01 #即时归档目标实例名 [ARCHIVE_ REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = DM_RT_01 #实时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm7/arch #本地归档文件存放路径 ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M |
配置 dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453332 #守护系统唯一 OGUID 值 INST_INI = /dm7/data/DM/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm7/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭 |
配置 dmwatcher.ctl
复制主库时已经生成的 dmwatcher.ctl
启动备库
./dmserver /dm7/data/DM/dm.ini mount
设置 OGUID和数据库模式
SQL> sp_set_oguid(453332); SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> alter database standby; SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); |
配置监视器
MON_DW_Confirm = 1 #确认监视器模式 MON_LOG_PATH = /dm7/data/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 [GRP1] MON_INST_OGUID = 453332 #组 GRP1 的唯一 OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 10.10.10.10:5238 MON_DW_IP = 10.10.10.20:5238 |
注册监视器服务
/dm7/script/root/dm_service_installer.sh -t dmmonitor -i /dm7/data/dmmonitor.ini -p monitor
注册守护进程
/dm7/script/root/dm_service_installer.sh -t dmwatcher -i /dm7/data/DM/dmwatcher.ini -p wat01
/dm7/script/root/dm_service_installer.sh -t dmwatcher -i /dm7/data/DM/dmwatcher.ini -p wat02
启动顺序
先启动数据库服务 在启动守护进程 在启动监视器 关闭反着关
dmserver /dm7/data/DM/dm.ini mount
dmwatcher /dm7/data/DM/dmwatcher.ini
dmmonitor /dm7/data/dmmonitor.ini
service DmServiceDM_RT_01 start
service DmServiceDM_RT_02 start
service DmWatcherServicewat01 start
service DmWatcherServicewat02 start
service DmMonitorServicemonitor start
同步测试
主库操作
备库验证
读写分离 验证
更多达梦咨讯请关注
更多推荐
达梦7 搭建数据守护实时主备(读写分离)
发布评论