注册
数据守护集群搭建
专栏/培训园地/ 文章详情 /

数据守护集群搭建

DM_902403 2024/03/27 519 0 0
摘要

数据守护集群搭建

DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。DM 数据守护的实现原理为:将主库(生产库)产生的 Redo日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。
以下为数据守护集群搭建分享:

1 初始化实例

1.1创建实例

/dmdb/dmdbms/bin/dminit INI_FILE=/dmdb/dmdata/DAMENG/dm.ini PATH=/dmdb/dmdata/ DB_NAME=DAMENG INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=1 CHARSET=1 PORT_NUM=5237 ./dminit path=/dmdb/dmdata page_size=16 charset=0 log_size=2048 db_name=DAMENG instance_name=DW0 /dmdb/dmdbms/bin/dminit INI_FILE=/dmdb/dmdata/DAMENG/dm.ini PATH=/dmdb/dmdata/ DB_NAME=DAMENG INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=1 CHARSET=1 PORT_NUM=5237

1.2 本地归档配置

//打开归档配置 配置 dm.ini,打开 ARCH_INI参数;ARCH_INI = 1 并且建立归档文件: dmarch.ini [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdb/dmarch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 10240 #归档上限,单位 MB

1.3 脱机备份

1.2.1 备份数据

./DmService stop ./dmrman CTLSTMT="BACKUP DATABASE '/dmdb/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE BACKUPSET '/dmdb/dmbak/BACKUP_FILE'"

1.2.2 拷贝备份文件到备机B机器

scp -r /dmdb/dmbak/BACKUP_FILE dmdba@192.168.100.103:/dmdb/dmbak/

1.2.3 从机器A中获取的备份文件进行恢复

./dmrman CTLSTMT="RESTORE DATABASE '/dmdb/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdb/dmbak/BACKUP_FILE'" ./dmrman CTLSTMT="RECOVER DATABASE '/dmdb/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdb/dmbak/BACKUP_FILE'" ./dmrman CTLSTMT="RECOVER DATABASE '/dmdb/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"

1.4 联机备份

1.4.1 备份数据

启动:/dmdb/dmdbms/bin/dmserver /dmdb/dmdata/DAMENG/dm.ini 连接:/dmdb/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.100.102:5236 SQL> BACKUP DATABASE BACKUPSET '/dmdb/dmbak/BACKUP_FILE';

1.4.2 拷贝备份文件到 B 机器

scp -r /dmdb/dmbak/BACKUP_FILE dmdba@192.168.100.103:/dmdb/dmbak/

1.4.3 从机器A中获取的备份文件进行恢复

/dmdb/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dmdb/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdb/dmbak/'" /dmdb/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdb/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdb/dmbak/'" /dmdb/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdb/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"

2 主库配置

2.1 修改dm.ini文件

//方式一: INSTANCE_NAME = GRP1_RT_01 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 //方式二: 启动服务:/dmdb/dmdbms/bin/dmserver /dmdb/dmdata/DAMENG/dm.ini 连接:/dmdb/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.100.102:5236 SP_SET_PARA_VALUE (2,'PORT_NUM',5236); SP_SET_PARA_VALUE (1,'DW_INACTIVE_INTERVAL',60); SP_SET_PARA_VALUE (1,'ALTER_MODE_STATUS',0); SP_SET_PARA_VALUE (1,'ENABLE_OFFLINE_TS',2); SP_SET_PARA_VALUE (2,'MAL_INI',1); SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

2.2 修改dmarch.ini

vim /dmdb/dmdata/DAMENG/dmarch.ini ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdb/dmarch/ #本地归档存放路径 ARCH_FILE_SIZE = 2048 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 10240 #归档上限,单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = GRP1_RT_02 #实时归档目标实例名

2.3 创建dmmal.ini

/dmdb/dmdata/DAMENG/dmmal.ini MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 15 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_HOST = 192.168.200.102 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.100.102 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 192.168.200.103 MAL_PORT = 61142 MAL_INST_HOST = 192.168.100.103 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142

2.4 创建dmwatcher.ini

/dmdb/dmdata/DAMENG/dmwatcher.ini [GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 30 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /dmdb/dmdata/DAMENG/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

2.5 主库注册实例和守护进程服务

方式一:手动配置 cp /dmdb/dmdbms/bin/service_template/DmService /dmdb/dmdbms/bin/ vim /dmdb/dmdbms/bin/DmService 修改ini路径为: /dmdb/dmdata/DAMENG/dm.ini 修改START_MODE为mount 保存修改后,执行命令:./DmService start启动主库数据库后台服务 cp /dmdb/dmdbms/bin/service_template/DmWatcherService /dmdb/dmdbms/bin/ vim /dmdb/dmdbms/bin/DmWatcherService 修改ini路径为: /dmdb/dmdata/DAMENG/dmwatcher.ini ./DmWatcherService start 方式二:自动使用脚本注册服务并启动,需要使用root /dmdb/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dmdb/dmdata/DAMENG/dm.ini -m mount /dmdb/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdb/dmdata/DAMENG/dmwatcher.ini // 若要删除自启服务,按照以下方式运行即可 (以root身份运行) /dmdb/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_01 /dmdb/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

2.6 设置主库 OGUID

./dmserver /dmdb/dmdata/DAMENG/dm.ini mount /dmdb/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.100.102:5236 SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>SP_SET_OGUID(45331); SQL>ALTER DATABASE PRIMARY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

3 备库配置

3.1 修改dm.ini

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置

3.2 创建 dmarch.ini

// 实时归档时,dmarch.ini 中的 ARCH_WAIT_APPLY 配置项默认值为 0,可以省略 vim /dmdb/dmdata/DAMENG/dmarch.ini ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdb/dmarch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 10240 #归档上限,单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = GRP1_RT_01 #即时归档目标实例名

3.3 创建dmmal.ini

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 15 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 #实例名,和dm.ini的 INSTANCE_NAME 一致 MAL_HOST =192.168.200.102 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.100.102 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 192.168.200.103 MAL_PORT = 61142 MAL_INST_HOST = 192.168.100.103 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142

3.4 创建dmwatcher.ini

[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 30 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /dmdb/dmdata/DAMENG/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

3.5 备库注册实例和守护进程服务

方式一:手动配置 cp /dmdb/dmdbms/bin/service_template/DmService /dmdb/dmdbms/bin/ vim /dmdb/dmdbms/bin/DmService 修改ini路径为: /dmdb/dmdata/DAMENG/dm.ini 修改START_MODE为mount 保存修改后,执行命令:./DmService start启动主库数据库后台服务 cp /dmdb/dmdbms/bin/service_template/DmWatcherService /dmdb/dmdbms/bin/ vim /dmdb/dmdbms/bin/DmWatcherService 修改ini路径为: /dmdb/dmdata/DAMENG/dmwatcher.ini ./DmWatcherService start 方式二:自动使用脚本注册服务并启动,需要使用root /dmdb/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dmdb/dmdata/DAMENG/dm.ini -m mount /dmdb/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdb/dmdata/DAMENG/dmwatcher.ini //删除自启服务 /dmdb/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_02 /dmdb/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

3.6 设置备库 OGUID

./dmserver /dmdb/dmdata/DAMENG/dm.ini mount /dmdb/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.100.103:5236 SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>SP_SET_OGUID(45331); SQL>ALTER DATABASE STANDBY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

4 配置监视器

4.1 修改dmmonitor.ini配置文件

4.1.1 单实例监视器

vim /dmdb/dmdbms/bin/dmmonitor.ini MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /dmdb/log #监视器日志文件存放路径 /dmdb/log MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 128 #单个日志大小,单位 MB MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB [GRP1] MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值 MON_DW_IP = 192.168.200.102:52141 #IP对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 192.168.200.103:52141

4.1.2 多实例监视器

//为每个实例配置一个 dmmonitor.ini。众多 dmmonitor.ini 中,除 MON_ID 参数不同以外,其他参数应完全一致。 MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /dmdb/log #监视器日志文件存放路径 /dmdb/log MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 128 #单个日志大小,单位 MB MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB MON_INST_NUM = 2 #实例总个数 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 = 45331 #组 GRP1 的唯一 OGUID 值 MON_DW_IP = 192.168.200.102:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 192.168.200.103:5436 [MON1] MON_HOST = 192.168.200.102 ##系统监听TCP连接的IP地址 MON_PORT = 5336 ##系统监听TCP连接的端口号 MON_INST_ID = 1 ##监视器实例在监视器系统中的ID [MON2] MON_HOST = 192.168.200.103 ##系统监听TCP连接的IP地址 MON_PORT = 5336 ##系统监听TCP连接的端口号 MON_INST_ID = 2 ##监视器实例在监视器系统中的ID

4.2 监视器注册服务

方式一:手动配置 cp /dmdb/dmdbms/bin/service_template/DmMonitorService /dmdb/dmdbms/bin/ vim /dmdb/dmdbms/bin/DmMonitorService 修改ini路径为: /dmdb/dmdata/DAMENG/dmmonitor.ini ./DmMonitorService start 方式二:自动使用脚本注册服务并启动,需要使用root /dmdb/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdb/dmdbms/bin/dmmonitor.ini //删除: /dmdb/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor

5 启动

开启集群顺序为: 备库实例(DmService2)——>主库实例(DmService1)——>主库守护进程(DmWatcherService1)——>备库守护进程(DmWatcherService2)——>监视器服务(DmMonitorService)

5.1 启动主备库实例服务

./DmService start

5.2 启动守护进程服务

主库:./DmWatcherService start 备库:./DmWatcherService start

5.3 启动监视器

前台启动: /dmdb/dmdbms/bin/dmmonitor /dmdb/dmdbms/bin/dmmonitor.ini 后台启动: /dmdb/dmdbms/bin/DmMonitorService start

5.4 停止集群

A/B机器: 备库:./DmWatcherService stop 主库:./DmWatcherService stop 主库:./DmServiceGRP1_RT_01 stop 备库:./DmServiceGRP1_RT_02 stop 关闭集群的顺序为: 监视器服务(DmMonitorService)——>备库守护进程(DmWatcherService2)——>主库守护进程(DmWatcherService1)——>主库实例(DmService1)——>备库实例(DmService2)

以上就是DM数据守护集群的搭建过程。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服