【达梦8】主备守护集群部署

概述

DM 数据守护(DM Data Watch)的实现原理:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
整个DMWatch系统主要由主库、备库、Redo 日志、Redo 日志传输、 Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

1、系统构成

1)主库

Primary 模式,提供完整数据库服务的实例,一般来说主库是用来直接支撑应用系统的生产库。

2)备库

Standby 模式,提供只读数据库服务的实例。备库除了用于容灾,还可以提供备份、查询等只读功能,并且备库还支持临时表的 Insert/Delete/Update操作。

3)redo日志

Redo 日志记录物理数据页内容变动情况,在数据库系统故障重启时,利用 Redo 日志可以把数据恢复到故障前的状态。
Redo 日志也是数据守护的实现基础,数据库中 Insert、Delete、Update 等 DML 操作以及 Create TABLE 等 DDL 操作最终都会体现为对某一个或者多个物理数据页的修改,因此备库通过重做 Redo 日志可以与主库数据保持一致。

4)redo日志传输

主备库之间的 Redo 日志传输,以日志包 RLOG_PKG 为单位,主库通过 MAL 系统发送 Redo 日志到备库。各种不同数据守护类型的区别,就在于主库日志包 RLOG_PKG 的发送时机,以及备库收到 Redo 日志后的处理策略。

5)redo日志重演

Redo 日志重演的过程,就是备库收到主库发送的 Redo 日志后,在物理数据页上,重新修改数据的过程。Redo 日志重演由专门的 Redo 日志重演服务完成,重演服务严格按照 Redo 日志产生的先后顺序,解析 Redo 日志、修改相应的物理数据页,并且重演过程中备 库会生成自身的 Redo 日志写入联机日志文件。

6)守护进程

守护进程(dmwatcher)是数据守护系统的核心工具,监控数据库实例的运行状态和主备库数据同步情况,在出现故障时启动各种处理预案。守护进程是各种消息的中转站,接收数据库实例、其他守护进程、以及监视器发送的各种消息;同时,守护进程也会将收到的数据库实例消息转发给其他守护进程和监视器。守护进程必须和被守护的数据库实例部署在 同一台机器上。

7)监视器

监视器(dmmonitor)用来监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等。监视器一般配置在数据库实例和守护进程以外的机器上。

2、主要特性

1)完整功能的主库

主库提供完整的数据库服务,与普通单节点数据库相比,主要的功能限制包括:不支持修改表空间文件名、不支持修改 arch_ini 参数。

2)活动的备库

备库在 Open 状态下执行数据同步,是真正意义上的热备库;在实现异地容灾的同时,用户可以只读访问备库,执行报表生成、数据备份等功能,减轻主库的系统负载,提高资源利用率。

3)多重数据守护

每个备库都是一个完整的数据库备份,可以同时配置多个备库,为数据安全提供全方位的保护。

4)高可用性

主库出现故障时,可以快速将备库切换为主库,继续提供数据库服务,确保数据库服务不中断。切换过程一般在数秒钟之内完成。

5)多种守护模式

提供自动切换和手动切换两种守护模式。其中,配置自动切换的前提是已经部署确认监视器。在提供第三方机器部署确认监视器情况下,可以配置为故障自动切换模式,主库出现故障时,系统自动将备库切换为主库对外提供数据库服务。

6)故障自动重连

配置、使用连接服务名访问数据库,在发生主备库切换后,接口会自动将连接迁移到新的主库上。

7)故障库自动加入

主库故障,发生主备库切换。故障主库重启后,可以自动切换为 Standby 模式,作为备库重新加入数据守护系统。

8)历史数据自动同步

故障备库恢复后,可以自动同步历史数据,无需用户干预,并在同步完成以后,自动恢复为可切换备库。

9)自动负载均衡

配置读写分离集群,可以将只读操作分流到备库上执行,减轻主库访问压力,提高数据库系统的吞吐量。读写分离的过程由 JDBC 等接口配合服务器自动完成,无需用户干预,也不需要修改应用程序。

DW配置

1、设备规划与路径规划

—机器准备
192.168.168.11 pri 主库
192.168.168.12 stb 从库
192.168.168.10 mon 监视
—用户创建和路径规划
groupadd dinstall
useradd -g dinstall dmdba
mkdir -p /data/dm/{dmdbms,dmarch,dmbak,dmdata,dmmon,dmcheck}
chown -R dmdba:dinstall /data/dm
chmod -R 775 /data/dm
—dmdba用户环境变量设置
vim .bash_profile
export LD_LIBRARY_PATH=“ L D L I B R A R Y P A T H : / d a t a / d m / d m d b m s / b i n " e x p o r t D M H O M E = " / d a t a / d m / d m d b m s " e x p o r t P A T H = " LD_LIBRARY_PATH:/data/dm/dmdbms/bin" export DM_HOME="/data/dm/dmdbms" export PATH=" LDLIBRARYPATH:/data/dm/dmdbms/bin"exportDMHOME="/data/dm/dmdbms"exportPATH="PATH: D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:DM_HOME/tool”

2、单实例部署(主从都执行)

—初始化主库实例(dmdba用户执行)
dminit PATH=/data/dm/dmdata DB_NAME=DMOA INSTANCE_NAME=DMOA01 SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=1 LOG_SIZE=2048 CASE_SENSITIVE=Y CHARSET=1 PORT_NUM=5234
dminit PATH=/data/dm/dmdata DB_NAME=DMOA INSTANCE_NAME=DMOA02 SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=1 LOG_SIZE=2048 CASE_SENSITIVE=Y CHARSET=1 PORT_NUM=5234
—注册服务(root用户执行)
sh /data/dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dm/dmdata/DMOA/dm.ini -p DMOA01 -m mount
sh /data/dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dm/dmdata/DMOA/dm.ini -p DMOA02 -m mount
—测试注册服务
systemctl start DmServiceDMOA01.service
systemctl start DmServiceDMOA02.service

3、主库配置

1)获取主库备份(为保持一致性先关闭服务)

—停止服务
su - root
systemctl stop DmServiceDMOA01.service
—执行备份
su - dmdba
[dmdba@pri ~]$ dmrman
dmrman V8
RMAN>backup database ‘/data/dm/dmdata/DMOA/dm.ini’ full backupset ‘/data/dm/dmbak/FULL’;

2)主库配置文件修改

—修改dm.ini文件
vim /data/dm/dmdata/DMOA/dm.ini
DW_PORT=5336
ALTER_MODE_STATUS=0
ENABLE_OFFLINE_TS=2
MAL_INI=1
ARCH_INI=1

—新建dmmal.ini文件
vim /data/dm/dmdata/DMOA/dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMOA01
MAL_HOST = 192.168.168.11
MAL_PORT = 5436
MAL_INST_HOST = 192.168.168.11
MAL_INST_PORT = 5234
MAL_DW_PORT = 5536
[MAL_INST2]
MAL_INST_NAME = DMOA02
MAL_HOST = 192.168.168.12
MAL_PORT = 5436
MAL_INST_HOST = 192.168.168.12
MAL_INST_PORT = 5234
MAL_DW_PORT = 5536

—新建dmarch.ini文件
vim /data/dm/dmdata/DMOA/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMOA02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dm/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 102400

—新建dmwatcher.ini文件
vim /data/dm/dmdata/DMOA/dmwatcher.ini
[GRP1]
DW_TYPE =GLOBAl
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /data/dm/dmdata/DMOA/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /data/dm/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

3)启动主库至mount

su - dmdba
/data/dm/dmdbms/bin/DmServiceDMOA01 start mount
[dmdba@pri bin]$ ls Dm*
DmAPService DmAuditMonitorService DmInstanceMonitorService DmJobMonitorService DmServiceDMOA01
[dmdba@pri bin]$ ./DmServiceDMOA01 start mount
Starting DmServiceDMOA01: [ OK ]

4)修改主库参数

[dmdba@pri bin]$ disql sysdba/dameng123@localhost:5234
服务器[localhost:5234]:处于普通配置状态
登录使用时间 : 16.383(ms)
disql V8
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 5.637(毫秒). 执行号:0.
SQL> alter database primary;
操作已执行
已用时间: 5.011(毫秒). 执行号:0.
SQL> exit

5)配置守护进程并启动

su - root
sh /data/dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /data/dm/dmdata/DMOA/dmwatcher.ini -p DMOA01
—启动守护进程服务
systemctl start DmWatcherServiceDMOA01

4、从库配置

1)获取主库备份并恢复(主库操作)

—传输备份
[root@pri dmbak]# scp -r FULL 192.168.168.12:/data/dm/dmbak
–修改备份权限(权限不对后面恢复会有问题)
[root@stb dmbak]# ll
total 0
drwxr-xr-x. 2 root root 39 May 7 13:07 FULL
[root@stb dmbak]# chmod -R 775 FULL/
[root@stb dmbak]# chown -R dmdba:dinstall FULL/
—恢复主库数据(要关闭当前从库实例)
su - dmdba
dmrman CTLSTMT=“restore database ‘/data/dm/dmdata/DMOA/dm.ini’ from backupset ‘/data/dm/dmbak/FULL’”
dmrman CTLSTMT=“recover database ‘/data/dm/dmdata/DMOA/dm.ini’ from backupset ‘/data/dm/dmbak/FULL’”
dmrman CTLSTMT=“recover database ‘/data/dm/dmdata/DMOA/dm.ini’ update db_magic”

2)从库配置文件修改

—修改dm.ini文件
vim /data/dm/dmdata/DMOA/dm.ini
DW_PORT=5336
ALTER_MODE_STATUS=0
ENABLE_OFFLINE_TS=2
MAL_INI=1
ARCH_INI=1

—新建dmmal.ini文件
vim /data/dm/dmdata/DMOA/dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMOA01
MAL_HOST = 192.168.168.11
MAL_PORT = 5436
MAL_INST_HOST = 192.168.168.11
MAL_INST_PORT = 5234
MAL_DW_PORT = 5536
[MAL_INST2]
MAL_INST_NAME = DMOA02
MAL_HOST = 192.168.168.12
MAL_PORT = 5436
MAL_INST_HOST = 192.168.168.12
MAL_INST_PORT = 5234
MAL_DW_PORT = 5536

—新建dmarch.ini文件
vim /data/dm/dmdata/DMOA/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMOA01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dm/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240

—新建dmwatcher.ini文件
vim /data/dm/dmdata/DMOA/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /data/dm/dmdata/DMOA/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /data/dm/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

3)启动从库至mount

su - dmdba
/data/dm/dmdbms/bin/DmServiceDMOA02 start mount
[dmdba@stb ~]$ /data/dm/dmdbms/bin/DmServiceDMOA02 start mount
Starting DmServiceDMOA02: [ OK ]

4)修改从库参数

disql sysdba/dameng123@localhost:5234
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);

5)配置守护进程并启动

su - root
sh /data/dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /data/dm/dmdata/DMOA/dmwatcher.ini -p DMOA02
systemctl start DmWatcherServiceDMOA02

5、主从验证

1)检查从库当前状态

[dmdba@stb ~]$ disql sysdba/dameng123@localhost:5234
服务器[localhost:5234]:处于备库配置状态
登录使用时间 : 8.087(ms)
disql V8
SQL> select NAME,INSTANCE_NAME,STATUS , M O D E ,MODE ,MODE from v$instance;

2)检查主库和从库的日志

vim dm_dmwatcher_DMOA02_202405.log
在这里插入图片描述
看样子好像是网络不通,突然想起来防火墙一直没有关过

3)关闭主库和从库的防火墙

[root@stb FULL]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2024-05-07 10:48:40 EDT; 2h 47min ago
Docs: man:firewalld(1)
Main PID: 855 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─855 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
May 07 10:48:40 stb systemd[1]: Starting firewalld - dynamic firewall daemon…
May 07 10:48:40 stb systemd[1]: Started firewalld - dynamic firewall daemon.
May 07 10:48:40 stb firewalld[855]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a futur…ing it now.
Hint: Some lines were ellipsized, use -l to show in full.
[root@stb FULL]# systemctl stop firewalld.service
[root@stb FULL]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

4)重新检查主库和从库的状态

[dmdba@pri ~]$ disql sysdba/dameng123@localhost:5234
服务器[localhost:5234]:处于主库打开状态
登录使用时间 : 8.110(ms)
disql V8
SQL> select NAME,INSTANCE_NAME,STATUS , M O D E ,MODE ,MODE from v$instance;

6、监视配置

1)监视节点配置确认监视器

vim /data/dm/dmmon/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /data/dm/dmmon/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.168.11:5536
MON_DW_IP = 192.168.168.12:5536

2)监视节点配置普通监视器

vim /data/dm/dmmon/dmmonitor_normal.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /data/dm/dmmon/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.168.11:5536
MON_DW_IP = 192.168.168.12:5536

3)配置监视服务

su - root
sh /data/dm/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /data/dm/dmmon/dmmonitor.ini -p mon
systemctl start DmMonitorServicemon.service

4)通过监视器查看主从状态

在这里插入图片描述
社区地址:https://eco.dameng.com

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值