达梦主备集群数据守护集群配置与故障模拟
书接上文,主备搭建可以参考这篇博客
https://blog.csdn.net/weixin_49370146/article/details/142147301
1. 注册集群服务(使用 root 用户操作)
1.1 主库:192.168.58.138
-
注册数据守护进程服务:
需要 root 用户登录注册服务:
/dm8/dminstall/script/root/dm_service_installer.sh -t dmwatcher -p NODE1 -watcher_ini /dm8/dmdata/APP/dmwatcher.ini
-
禁用数据守护进程开机自启:
systemctl disable DmWatcherServiceNODE1.service
1.2 备库:192.168.58.139
-
注册数据守护进程服务:
将守护进程注册为服务(数据库会由数据守护自动拉起),需要 root 用户登录注册服务:
/dm8/dminstall/script/root/dm_service_installer.sh -t dmwatcher -p NODE2 -watcher_ini /dm8/dmdata/APP/dmwatcher.ini
-
禁用数据守护进程开机自启:
systemctl disable DmWatcherServiceNODE2.service
1.3 监视器:192.168.58.140
-
确认监视器注册为服务:
root 用户登录注册服务:
/dm8/dminstall/script/root/dm_service_installer.sh -t dmmonitor -p APP -monitor_ini /dm8/dmdata/dmmonitor.ini
注:-p 原本是指定实例名,但是这个监视器是部署到第三台机器上,没有数据库实例,所以就使用主备库中 APP 数据库名。
-
关闭自启动服务:
systemctl disable DmMonitorServiceAPP.service
-
创建非确认监视器用于管理:
su - dmdba cp /dm8/dmdata/dmmonitor.ini /dm8/dmdata/dmmonitor_0.ini
-
修改 dmmonitor_0.ini 文件,内容如下:
vim /dm8/dmdata/dmmonitor_0.ini MON_DW_CONFIRM = 0 # 0非确认监视器模式
2. 修改后台启动文件,配置以 mount 启动(使用 dmdba 用户操作)
2.1 主库:192.168.58.138
su - dmdba
cd /dm8/dminstall/bin
vim DmServiceNODE1
- 修改内容:`START_MODE=open` 改为 `START_MODE=mount`
2.2 备库:192.168.58.139
su - dmdba
cd /dm8/dminstall/bin
vim DmServiceNODE2
- 修改内容:`START_MODE=open` 改为 `START_MODE=mount`
3. 启动实时主备守护集群(使用 dmdba 用户操作)
3.1 启动主库实例(192.168.58.138)
cd /dm8/dminstall/bin
./DmServiceNODE1 start
3.2 启动备库实例(192.168.58.139)
cd /dm8/dminstall/bin
./DmServiceNODE2 start
3.3 启动主库守护进程(192.168.58.138)
cd /dm8/dminstall/bin
./DmWatcherServiceNODE1 start
3.4 启动备库守护进程(192.168.58.139)
cd /dm8/dminstall/bin
./DmWatcherServiceNODE2 start
3.5 启动监视器(192.168.58.140)
-
启动确认监视器:
cd /dm8/dminstall/bin ./DmMonitorServiceAPP start
-
启动非确认监视器查看主备运行情况:
/dm8/dminstall/bin/dmmonitor /dm8/dmdata/dmmonitor_0.ini
4. 配置 dm_svc.conf(使用 dmdba 用户操作)
dm_svc.conf 配置文件,Windows 平台下位于 %SystemRoot%\system32
目录中,Linux 平台下位于 /etc
目录。
参数说明:
- LOGIN_MODE:指定优先登录的服务器模式。
- SWITCH_TIME:检测到数据库实例故障时,接口在服务器之间切换的次数。
- SWITCH_INTERVAL:表示在服务器之间切换的时间间隔,单位为毫秒。
4.1 主库:192.168.58.138
vim /etc/dm_svc.conf
- 添加内容如下:
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DM_APP=(192.168.58.138:5236,192.168.58.139:5236)
[DM_APP]
LOGIN_MODE=(1)
SWITCH_TIME=2000
SWITCH_INTERVAL=10
- 测试:
/dm8/dminstall/bin/disql SYSDBA/SYSDBA@DM_APP
4.2 备库:192.168.58.139
vim /etc/dm_svc.conf
- 添加内容如下:
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DM_APP=(192.168.58.138:5236,192.168.58.139:5236)
[DM_APP]
LOGIN_MODE=(1)
SWITCH_TIME=2000
SWITCH_INTERVAL=10
- 测试:
/dm8/dminstall/bin/disql SYSDBA/SYSDBA@DM_APP
5. 数据守护环境启动与关闭测试(使用 dmdba 用户操作)
因为 Global 守护类型的守护进程,会自动将数据库实例切换到 Open 状态,并将守护进程状态也切换为 Open。因此在关闭 dmwatcher 系统时,必须按照一定的顺序来关闭守护进程和实例。
5.1 手动关闭 dmwatcher 环境
-
关闭监视器进程(192.168.58.140)
cd /dm8/dminstall/bin ./DmMonitorServiceAPP stop
-
关闭备库数据守护进程(192.168.58.139)
cd /dm8/dminstall/bin ./DmWatcherServiceNODE2 stop
-
关闭主库数据守护进程(192.168.58.138)
cd /dm8/dminstall/bin ./DmWatcherServiceNODE1 stop
-
关闭主库实例(192.168.58.138)
cd /dm8/dminstall/bin ./DmServiceNODE1 stop
-
关闭备库实例(192.168.58.139)
cd /dm8/dminstall/bin ./DmServiceNODE2 stop
5.2 手动启动 dmwatcher 环境
-
启动主库实例(192.168.58.138)
cd /dm8/dminstall/bin ./DmServiceNODE1 start
-
启动备库实例(192.168.58.139)
cd /dm8/dminstall/bin ./DmServiceNODE2 start
-
启动主库守护进程(192.168.58.138)
cd /dm8/dminstall/bin ./DmWatcherServiceNODE1 start
-
启动备库守护进程(192.168.58.139)
cd /dm8/dminstall/bin ./DmWatcherServiceNODE2 start
-
启动监视器(192.168.58.140)
-
启动确认监视器:
cd /dm8/dminstall/bin ./DmMonitorServiceAPP start
-
启动非确认监视器查看主备运行情况:
/dm8/dminstall/bin/dmmonitor /dm8/dmdata/dmmonitor_0.ini
-
6. 在监视器上手动切换主备数据库(192.168.58.140)
1. 主备库切换
# 1、查看数据守护集群中的状态信息
show
# 2、查看grp1组中允许执行Switchover命令的备库,也就是查看数据守护集群组中可以进行切换的数据库实例
choose switchover grp1
# 3、选择NODE2备库切换为新的主库,将当前的主库切换为新的备库,此命令要求执行切换的主备库都是正常 Open 状态,另外执行此命令需要先登录监视器。
switchover grp1.NODE2
# 可以看到NODE2已经切换为了主库,NODE1切换为了备库。
步骤截图
这里要输入login,登录
2、主库故障时,指定备库接管故障的主库
# 组中主库出现故障时,可以通过此命令选出组中可以执行正常接管的备库列表
choose takeover grp1
将主库网络直接中断,模拟主库故障,主库中执行命令
[root@NODE2 ~]# systemctl stop network
choose takeover grp1
# 用指定组中的指定备库接管组中的故障主库
takeover grp1.NODE1
# 该命令要求监视器曾经收到过故障主库的历史信息,并且主库的历史信息必须满足被接管条件,可以先通过 choose takeover [group_name]选出符合正常接管条件的备库列表,选择其中一个备库执行接管操作即可。
步骤截图,断网后的的集群状态
出现主库故障时,需要优先使用
choose takeover [group_name]
选出可接管主库,并使用takeover [group_name][.] [db_name]
执行正常接管。如果不存在可以正常接管的备库,但又需要主库对外提供服务,可以考虑使用
choose takeover force [group_name]
选出可强制接管的备库,并使用takeover force [group_name][.] [db_name]
进行强制接管。但是强制接管可能会导致数据一致性问题。
如果执行choose takeover grp1出现下面的提示
no database can do takeover! --守护进程是STARTUP状态不能执行takeover命令
可以使用备库强制接管
如果执行 Takeover 命令不成功,但主库可能由于硬件损坏等原因无法马上恢复,为DM 数据守护与读写分离集群 V4.0了及时恢复数据库服务,DM 提供了 Takeover Force 命令,强制将备库切换为主库。但需要由用户确认主库故障前,主库与接管备库的数据是一致的(主库到备库的归档是 Valid状态),避免引发守护进程组分裂。
RSTAT : 此 字 段 对 备 库 有效,表 示 主 库 到 备 库 的 归 档 状 态 , 可 能 为Valid/Invalid/Unknown,对于本地守护类型的备库,此字段为 NULL,对于主库本身,此字段值为 Valid。该字段值要从备库对应的主库实例上取,如果当前没有活动主库或者
DM 数据守护与读写分离集群 V4.0备库无法确认对应的主库,则该字段显示为 Unknown。
# 指定组中主库出现故障时,可以通过此命令选出组中可以执行强制接管的备库列表
choose takeover force grp1
# 使用指定组中的指定备库强制接管组中的故障主库。执行此命令需要先登录监视器。
takeover force grp1.NODE1
至此切换成功