达梦数据库部署实时主备集群

实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的 Redo 日志,通过实时归档机制,在主库写入联机 Redo 日志文件之前发送到备库,实时备库通过重演 Redo 日志与主库保持数据同步。当主库出现故障时,备库在将所有 Redo 日志重演结束后,就可以切换为主库对外提供数据库服务。

1、环境准备与说明

本示例中数据守护进程组名为"GRP1" ,配置为实时主备,主库实例名为"NODE1" ,备库实例名为"NODE2"。

集群配置环境说明:

如果服务器上面有多个网卡,服务ip和心跳ip可以使用不同的网卡ip,这里只有一个网卡,就是使用相同的ip进行测试使用。

主备角色

服务ip

心跳ip(MAL_HOST)

实例名

实例端口

主库

192.168.58.30

192.168.58.30

NODE1

5236

备库

192.168.58.31

192.168.58.31

NODE2

5236

监视器

192.168.58.32

端口规划:

实例名

PORT_NUM

MAL_INST_DW_ PORT

MAL_HOST

MAL_PORT

MAL_DW_ PORT

NODE1

5236

5237

192.168.58.30

5238

5239

NODE2

5236

5237

192.168.58.31

5238

5239

端口说明:

  • PORT_NUM:数据库实例监听端口。

  • MAL_INST_DW_ PORT:实例对守护进程的监听端口,守护进程使用 MAL_HOST + MAL_INST_DW_PORT 创建到实例的 TCP连接。

  • MAL_PORT:MAL系统监听TCP连接的端口。

  • MAL_DW_ PORT:守护进程监听端口,其他守护进程或监视器使用 MAL_HOST + MAL_DW_ PORT创建 TCP 连接。监视器配置文件 dmmonitor.ini 中,MON_DW_ IP 就是一组 MAL_HOST: MAL_DW_PORT。

MAL系统是基于 TCP 协议实现的一种内部通信机制,DM通过 MAL系统实现 Redo日志传输, 以及其他一些实例间的消息通讯。

守护进程 (dmwatcher ) 是数据库实例和监视器之间信息流转的桥梁。数据库实例向本地守护进程发送信息, 接收本地守护进程的消息和命令;

监视器 (dmmonitor) 接收守护进程的消息,并向守护进程发送命令;数据库实例与监视器之间没有直接的消 息交互;

守护进程解析并执行监视器发起的各种命令 (Switchover/Takeover/Open force 等) ,并在必要时通知数据库实例执行相应的操作。

2、在主库、备库、监视器三台服务器上安装达梦数据库

1、安装前的准备工作

详情请参考官方文档:https://eco.dameng.com/document/dm/zh-cn/ops/before-installation.html

1、创建达梦数据库对应的用户和组

注意:安装前必须创建 dmdba 用户,禁止使用 root 用户安装数据库。

groupadd dinstall    # 创建dinstall组
useradd -g dinstall dmdba    # 创建dmdba用户
echo "DaMeng12345" |passwd --stdin dmdba    # 为dmdba用户设置密码

2、创建达梦数据库安装目录

# dminstall是达梦数据库软件安装的位置,dmdata是达梦数据库实例存放位置,dmarch是达梦数据库归档日志存放位置,dmbak是达梦数据库备份文件存放位置
mkdir -p /dm8/{dminstall,dmdata,dmarch,dmbak}
chown -R dmdba:dinstall /dm8
chmod -R 755 /dm8

3、调整系统资源限制

查看dmdba用户的系统资源情况:

su - dmdba
ulimit -a

官方建议:

root用户下配置资源限制,在/etc/security/limits.conf文件中追加下面的内容:

# soft软连接,hard硬连接,nofile打开文件,nproc打开的进程
dmdba   soft    nofile  65536
dmdba   hard    nofile  65536
dmdba   soft    nproc   65536
dmdba   hard    nproc   65536

配置完成之后,到dmdba用户下查看资源限制

su - dmdba
ulimit -a

2、去官网下载达梦8镜像并解压挂载到服务器上

选择好自己的cpu平台和操作系统版本,开放版这里没有银河麒麟v10,选择redhat7代替

root用户操作:

# 下载dm8
wget https://download.dameng.com/eco/adapter/DM8/202401END/dm8_20240408_x86_rh7_64.zip
# 解压dm8
unzip dm8_20240408_x86_rh7_64.zip

挂载iso镜像:

mount -o loop dm8_20240408_x86_rh7_64.iso /mnt

3、切换到dmdba用户下安装达梦数据库

注意:如果/tmp 目录不能保证 2GB 的存储空间,在安装达梦数据库的时候会报错,用户可以扩展/tmp 目录存储空间或者通过设置环境变量 DM_INSTALL_TMPDIR 指定安装程序的临时目录。具体操作如下所示:

1、切换到dmdba用户下:su - dmdba

2、在环境变量文件中追加配置:vim ~/.bash_profile

追加内容为:export DM_INSTALL_TMPDIR=/dm8/dmtmp

(/dm8/dmtmp这个目录确保有2g的空间,并且dmdba用户有权限操作该目录)

3、加载环境变量,让它生效:source ~/.bash_profile

# 切换成dmdba用户
su - dmdba
# 执行安装命令,这个是命令行安装命令,-i指定命令行
/mnt/DMInstall.bin -i

根据实际情况去配置:

根据上面执行结果的要求,新开一个窗口登录root用户执行上述root_installer.sh脚本注册数据库服务:

/dm8/dminstall/script/root/root_installer.sh

到这里,dm8软件就安装完成了

4、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

3、在主、备库节点上初始化实例(使用dmdba用户操作)

按实际需要初始化实例:

本例只指定数据库存放路径、DB_NAME、INSTANCE_NAME,页大小为32k,其它参数使用默认值。

主库:192.168.58.30

su - dmdba
cd /dm8/dminstall/bin
./dminit PATH=/dm8/dmdata DB_NAME=APP INSTANCE_NAME=NODE1 PORT_NUM=5236 PAGE_SIZE=32

# 初始化成功后,前台启动实例
./dmserver /dm8/dmdata/APP/dm.ini

# 没有问题就exit退出数据库
exit

备库:192.168.58.31

su - dmdba
cd /dm8/dminstall/bin
./dminit PATH=/dm8/dmdata DB_NAME=APP INSTANCE_NAME=NODE2 PORT_NUM=5236 PAGE_SIZE=32

# 初始化成功后,前台启动实例
./dmserver /dm8/dmdata/APP/dm.ini

# 没有问题就exit退出数据库
exit

4、注册服务(使用root用户操作)

主库:192.168.58.30

# 切换到root用户,注册服务要使用root用户操作
su - root
/dm8/dminstall/script/root/dm_service_installer.sh -t dmserver -p NODE1 -dm_ini /dm8/dmdata/APP/dm.ini

#关闭DmServiceNODE1服务开机自启动,生产中用手动启动
systemctl disable DmServiceNODE1.service

备库:192.168.58.31

# 切换到root用户,注册服务要使用root用户操作
su - root
/dm8/dminstall/script/root/dm_service_installer.sh -t dmserver -p NODE2 -dm_ini /dm8/dmdata/APP/dm.ini

#关闭DmServiceNODE2服务开机自启动
systemctl disable DmServiceNODE2.service

5、脱机备份主库,还原备库(使用dmdba用户操作)

主库:192.168.58.30

su - dmdba
cd /dm8/dminstall/bin
# 备份数据库
./dmrman CTLSTMT="BACKUP DATABASE '/dm8/dmdata/APP/dm.ini' FULL BACKUPSET '/dm8/dmbak/DB_APP_FULL'" 

# 主库上拷贝备份文件到备库
scp -r /dm8/dmbak/DB_APP_FULL dmdba@192.168.58.31:/dm8/dmbak/DB_APP_FULL
# 输入dmdba用户的密码

备库:192.168.58.31

su - dmdba
cd /dm8/dminstall/bin
# 还原数据库
./dmrman CTLSTMT="RESTORE DATABASE '/dm8/dmdata/APP/dm.ini' FROM BACKUPSET '/dm8/dmbak/DB_APP_FULL'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/APP/dm.ini' FROM BACKUPSET '/dm8/dmbak/DB_APP_FULL'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/APP/dm.ini' UPDATE DB_MAGIC"

6、修改dm.ini文件参数(使用dmdba用户操作)

主库:192.168.58.30

vim /dm8/dmdata/APP/dm.ini

#修改内容如下:
INSTANCE_NAME = NODE1    # 主库实例名
PORT_NUM = 5236    # 数据库实例监听端口
ALTER_MODE_STATUS = 0    # 0不允许手工方式修改实例模式/状态,1是允许
ENABLE_OFFLINE_TS = 2    # 不允许备库OFFLINE(脱机)表空间
MAL_INI = 1    # 打开MAL系统
ARCH_INI = 1    # 打开归档配置

备库:192.168.58.31

vim /dm8/dmdata/APP/dm.ini

#修改内容如下:
INSTANCE_NAME = NODE2    # 主库实例名
PORT_NUM = 5236    # 数据库实例监听端口
ALTER_MODE_STATUS = 0    # 0不允许手工方式修改实例模式/状态,1是允许
ENABLE_OFFLINE_TS = 2    # 不允许备库OFFLINE(脱机)表空间
MAL_INI = 1    # 打开MAL系统
ARCH_INI = 1    # 打开归档配置

7、配置dmmal.ini文件(使用dmdba用户操作)

集群中所有节点dmmal.ini文件内容必须一致。

主库和备库:192.168.58.30、192.168.58.31

vim /dm8/dmdata/APP/dmmal.ini

# 添加内容:
MAL_CHECK_INTERVAL = 5    # MAL系统链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5    #判定MAL系统链路断开的时间
[MAL_INST1]
MAL_INST_NAME = NODE1    # 主库实例名
MAL_HOST = 192.168.58.30    # 主库MAL系统监听TCP连接的IP地址
MAL_PORT = 5238    # 主库中MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.58.30    # 主库实例的对外服务IP地址
MAL_INST_PORT = 5236    # 主库实例的对外服务端口, 和主库dm.ini配置中的PORT_NUM一致
MAL_INST_DW_PORT = 5237    # 主库实例监听守护进程TCP连接的端口
MAL_DW_PORT = 5239    # 主库中dmwatcher守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME=NODE2    # 备库实例名
MAL_HOST = 192.168.58.31    # 备库MAL系统监听TCP连接的IP地址
MAL_PORT = 5238    # 备库MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.58.31    # 备库实例的对外服务 IP 地址
MAL_INST_PORT = 5236    # 备库实例的对外服务端口, 和dm.ini 中的 PORT_NUM 一致
MAL_INST_DW_PORT = 5237    # 备库实例监听守护进程TCP连接的端口
MAL_DW_PORT = 5239    # 备库中dmwatcher守护进程监听 TCP 连接的端口

8、配置归档dmarch.ini文件(使用dmdba用户操作)

实时归档只有数据库是primary角色时才有效,指定的实例名对应mal配置文件中的实例名。

主备2个节点都配置,ARCH_DEST 分写写对方的实例。比如当前实例NODE1是主库,则ARCH_ DEST配置为NODE2。

主库:192.168.58.30

vim /dm8/dmdata/APP/dmarch.ini

# 添加如下:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME    # 实时归档类型
ARCH_DEST = NODE2    # 实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL    # 本地归档类型
ARCH_DEST = /dm8/dmarch    # 本地归档文件存放路径
ARCH_FILE_SIZE = 128    # 单位 Mb ,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0    # 单位 Mb ,0表示无限制,范围 1024~4294967294M

备库:192.168.58.31

vim /dm8/dmdata/APP/dmarch.ini

# 内容如下:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME    # 实时归档类型
ARCH_DEST = NODE1    # 实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL    # 本地归档类型
ARCH_DEST = /dm8/dmarch    # 本地归档文件存放路径
ARCH_FILE_SIZE = 128    # 单位 Mb ,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0    # 单位 Mb ,0表示无限制,范围 1024~4294967294M

9、配置dmwatcher.ini(使用dmdba用户操作)

主库:192.168.58.30

vim /dm8/dmdata/APP/dmwatcher.ini

# 内容如下:
[GRP1]
DW_TYPE = GLOBAL    # 全局守护类型
DW_MODE = MANUAL    # MANUAL为手动切换模式,AUTO为自动切换模式
DW_ERROR_TIME = 10    # 远程守护进程故障认定时间
INST_RECOVER_TIME = 60    # 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10    # 本地实例故障认定时间
INST_OGUID = 240605    # 守护进程唯一OGUID值
INST_INI = /dm8/dmdata/APP/dm.ini    # dm.ini配置文件路径
INST_AUTO_RESTART = 0    # 0关闭实例的自动启动功能,1是打开
INST_STARTUP_CMD = /dm8/dminstall/bin/dmserver    # 命令行方式启动
RLOG_SEND_THRESHOLD = 0    # 指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0    # 指定备库重演日志的时间阀值,默认关闭

备库:192.168.58.31

vim /dm8/dmdata/APP/dmwatcher.ini

# 内容如下:
[GRP1]
DW_TYPE = GLOBAL    # 全局守护类型
DW_MODE = MANUAL    # MANUAL为手动切换模式,AUTO为自动切换模式
DW_ERROR_TIME = 10    # 远程守护进程故障认定时间
INST_RECOVER_TIME = 60    # 主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10    # 本地实例故障认定时间
INST_OGUID = 240605    # 守护进程唯一OGUID值
INST_INI = /dm8/dmdata/APP/dm.ini    # dm.ini配置文件路径
INST_AUTO_RESTART = 0    # 0关闭实例的自动启动功能,1是打开
INST_STARTUP_CMD = /dm8/dminstall/bin/dmserver    # 命令行方式启动
RLOG_SEND_THRESHOLD = 0    # 指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0    # 指定备库重演日志的时间阀值,默认关闭

10、配置监视器(192.168.58.32机器使用dmdba用户操作)

本例为自动切换需要配置确认监视器dmmonitor.ini文件(确认监视器只能配一个,一般选择主备库以外的其他机器,安装了达梦服务端的即可),其中 MON_DW_IP中的IP和PORT和dmmal.ini中的MAL_HOST和MAL_DW_PORT配置项保持一致。

vim /dm8/dmdata/dmmonitor.ini

# 添加内容如下:
MON_DW_CONFIRM = 1    # 1是确认监视器模式,0是非确认监视器
MON_LOG_PATH = /dm8/dmdata/log    # 监视器日志文件存放路径
MON_LOG_INTERVAL = 60    # 每隔 60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32    # 每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 0    # 不限定日志文件总占用空间

# 守护进程组,跟dmwatcher.ini文件里面的组对应
[GRP1]
MON_INST_OGUID = 240605    # 组 GRP1的唯一OGUID值
MON_DW_IP = 192.168.58.30:5239
MON_DW_IP = 192.168.58.31:5239

11、以 mount 模式启动主备库(使用dmdba用户操作)

注意:

一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间, 生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主 备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。

主库:192.168.58.30

cd /dm8/dminstall/bin
./dmserver /dm8/dmdata/APP/dm.ini mount

备库:192.168.58.31

cd /dm8/dminstall/bin
./dmserver /dm8/dmdata/APP/dm.ini mount

12、设置 OGUID并修改主备库模式(使用dmdba用户操作)

主库:192.168.58.30

# 新开一个窗口操作
su - dmdba

# 启动命令行工具 DIsql,登录主库设置 OGUID 值为 240605,并修改为主库模式
cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.58.30:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
sp_set_oguid(240605); 
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit

备库:192.168.58.31

# 新开一个窗口操作
su - dmdba

# 启动命令行工具 DIsql,登录备库设置 OGUID 值为 240605,并修改为备库模式
cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.58.31:5236
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
sp_set_oguid(240605); 
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit

13、启动数据库守护和监视器(使用dmdba用户操作)

主库:192.168.58.30

启动数据守护进程:

su - dmdba
cd /dm8/dminstall/bin
./dmwatcher /dm8/dmdata/APP/dmwatcher.ini

查看数据库状态:先执行完备库守护进程启动再操作下面的命令查看

# 另开一个窗口操作
su - dmdba
cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.58.30:5236


select STATUS$ from v$instance;
# 显示内容如下:
行号     STATUS$
---------- -------
1          OPEN

备库:192.168.58.31

启动数据守护进程:

su - dmdba
cd /dm8/dminstall/bin
./dmwatcher /dm8/dmdata/APP/dmwatcher.ini

查看数据库状态:

# 另开一个窗口操作
su - dmdba
cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.58.31:5236


select STATUS$ from v$instance;
# 显示内容如下:
行号     STATUS$
---------- -------
1          OPEN

监视器:192.168.58.32

启动监视器:查看主备集群运行情况:

su - dmdba
cd /dm8/dminstall/bin
./dmmonitor /dm8/dmdata/dmmonitor.ini
# 通过show命令查看主备集群信息
show

14、主备同步测试(使用dmdba用户操作)

主库:192.168.58.30

cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.58.30:5236
# 新建一个表,并插入数据
create table test(id int,username varchar(20),age int);
insert into test(id,username,age) values (1,'张三',18),(2,'李四',19);
commit;
exit

备库:192.168.58.31

cd /dm8/dminstall/bin
./disql SYSDBA/SYSDBA@192.168.58.31:5236
# 查看test表是否有数据
select * from test;
exit

如果上面的操作都没有什么问题,主备集群状态都正常,按照顺序关闭监视器、备库数据守护进程、主库数据守护进程、主库实例、备库实例。

15、注册集群服务(使用root用户操作)

主库:192.168.58.30

注册数据守护进程服务:

需要root用户登录注册服务:

/dm8/dminstall/script/root/dm_service_installer.sh -t dmwatcher -p NODE1 -watcher_ini /dm8/dmdata/APP/dmwatcher.ini

# 禁用数据守护进程开机自启
systemctl disable DmWatcherServiceNODE1.service

备库:192.168.58.31

注册数据守护进程服务:

将守护进程注册为服务(数据库会由数据守护自动拉起),需要root用户登录注册服务:

/dm8/dminstall/script/root/dm_service_installer.sh -t dmwatcher -p NODE2 -watcher_ini /dm8/dmdata/APP/dmwatcher.ini

# 禁用数据守护进程开机自启
systemctl disable DmWatcherServiceNODE2.service

监视器:192.168.58.32

将确认监视器注册为服务:

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

vim /dm8/dmdata/dmmonitor_0.ini
# 修改dmmonitor_0.ini文件,内容如下:
MON_DW_CONFIRM = 0 # 0非确认监视器模式

16、修改后台启动文件,配置以mount启动(使用dmdba用户操作)

主库:192.168.58.30

su - dmdba
cd /dm8/dminstall/bin

vim DmServiceNODE1
# 修改内容
START_MODE=open改为START_MODE=mount

备库:192.168.58.31

su - dmdba
cd /dm8/dminstall/bin

vim DmServiceNODE2
# 修改内容
START_MODE=open改为START_MODE=mount

17、启动实时主备守护集群(使用dmdba用户操作)

1、启动主库实例(192.168.58.30)

cd /dm8/dminstall/bin
./DmServiceNODE1 start

2、启动备库实例(192.168.58.31)

cd /dm8/dminstall/bin
./DmServiceNODE2 start

3、启动主库守护进程(192.168.58.30)

cd /dm8/dminstall/bin
./DmWatcherServiceNODE1 start

4、启动备库守护进程(192.168.58.31)

cd /dm8/dminstall/bin
./DmWatcherServiceNODE2 start

5、启动监视器(192.168.58.32)

启动确认监视器:

cd /dm8/dminstall/bin
./DmMonitorServiceAPP start

启动非确认监视器查看主备运行情况:

/dm8/dminstall/bin/dmmonitor /dm8/dmdata/dmmonitor_0.ini

18、配置dm_svc.conf(使用dmdba用户操作)

dm_svc.conf配置文件,Windows平台下位于%SystemRoot%\system32目录中,Linux平台下位于/etc目录。

参数说明:

  • LOGIN_MODE:指定优先登录的服务器模式。0:优先连接 Primary 模式的库,Normal 模式次之, 最后选择 Stantby 模式;1:只连接主库;2:只连接备库;3:优先连接 Standby 模式的库,Primary 模式次之,最后选择Normal模式;4:优先连接Normal模式的库,Primary 模式次之,最后选择 Standby 模式。默认值为 4。

  • SWITCH_TIME:检测到数据库实例故障时,接口在服务器之间切换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。有效值范围 1~9223372036854775807,默认值为 3。

  • SWITCH_INTERVAL:表示在服务器之间切换的时间间隔 ,单位为毫秒,默认值为 200,有效值范围是1~9223372036854775807。

主库:192.168.58.30

vim  /etc/dm_svc.conf

# 添加内容如下:
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DM_APP=(192.168.58.30:5236,192.168.58.31:5236)
 
[DM_APP]
LOGIN_MODE=(1)
SWITCH_TIME=2000
SWITCH_INTERVAL=10

测试:

/dm8/dminstall/bin/disql SYSDBA/SYSDBA@DM_APP

备库:192.168.58.31

vim  /etc/dm_svc.conf

# 添加内容如下:
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DM_APP=(192.168.58.30:5236,192.168.58.31:5236)
 
[DM_APP]
LOGIN_MODE=(1)
SWITCH_TIME=2000
SWITCH_INTERVAL=10

测试:

/dm8/dminstall/bin/disql SYSDBA/SYSDBA@DM_APP

19、数据守护环境启动与关闭测试(使用dmdba用户操作)

因为Global守护类型的守护进程,会自动将数据库实例切换到 Open状态,并将守护进程状态也切换为 Open。 因此在关闭dmwatcher系统时,必须按照一定的顺序来关闭守护进程和实例。

可以在监视器中执行Stop Instance 命令关闭数据守护系统,命令执行成功后,数据库实例正常关闭。但守护进程并没有真正退出,而是将状态切换为 Shutdown 状态。

如果使用手动方式关闭数据守护进程系统,请严格按照以下顺序:

  1. 如果启动了确认监视器,先关闭确认监视器 (防止自动接管)

  2. 关闭备库守护进程 (防止重启实例)

  3. 关闭主库守护进程 (防止重启实例)

  4. 关闭主库实例

  5. 关闭备库实例

1、手动关闭dmwatcher环境

1、关闭监视器进程(192.168.58.32)

cd /dm8/dminstall/bin
./DmMonitorServiceAPP stop

2、关闭备库数据守护进程(192.168.58.31)

cd /dm8/dminstall/bin
./DmWatcherServiceNODE1 stop

3、关闭主库数据守护进程(192.168.58.30)

cd /dm8/dminstall/bin
./DmWatcherServiceNODE2 stop

4、关闭主库实例(192.168.58.30)

cd /dm8/dminstall/bin
./DmServiceNODE1 stop

5、关闭备库实例(192.168.58.31)

cd /dm8/dminstall/bin
./DmServiceNODE2 stop

2、手动启动dmwatcher环境

1、启动主库实例(192.168.58.30)

cd /dm8/dminstall/bin
./DmServiceNODE1 start

2、启动备库实例(192.168.58.31)

cd /dm8/dminstall/bin
./DmServiceNODE2 start

3、启动主库守护进程(192.168.58.30)

cd /dm8/dminstall/bin
./DmWatcherServiceNODE1 start

4、启动备库守护进程(192.168.58.31)

cd /dm8/dminstall/bin
./DmWatcherServiceNODE2 start

5、启动监视器(192.168.58.32)

启动确认监视器:

cd /dm8/dminstall/bin
./DmMonitorServiceAPP start

启动非确认监视器查看主备运行情况:

/dm8/dminstall/bin/dmmonitor /dm8/dmdata/dmmonitor_0.ini

20、在监视器上手动切换主备数据库(192.168.58.32)

1、主备库切换

# 1、查看数据守护集群中的状态信息
show

# 2、查看grp1组中允许执行Switchover命令的备库,也就是查看数据守护集群组中可以进行切换的数据库实例
choose switchover grp1

# 3、选择NODE2备库切换为新的主库,将当前的主库切换为新的备库,此命令要求执行切换的主备库都是正常 Open 状态,另外执行此命令需要先登录监视器。
switchover grp1.NODE2
# 可以看到NODE2已经切换为了主库,NODE1切换为了备库。

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

 大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区地址(https://eco.dameng.com

制作不易,各位看官如果觉得还可以,对您有帮助,请给小弟一键三连鼓励一下,后续还会继续保持 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值