达梦数据库在Linux上主备集群部署流程

1、 安装规划

跟上次的单机部署配置基本一致,部署背景不同

1.1、背景:

本次达梦8采用主备安装在Centos 7.6 64Bit系统上,采用了x86处理器,通过命令行方式完成数据库安装并进行主备集群测试连接。

实时主备:
达梦数据库实时主备的原理是主库修改数据产生的REDO日志, 通过实时归档机制, 在写入本地REDO之前发送给备库,备库接收到REDO后重新应用REDO日志来保持与主库数据同步,当主库故障时, 备库再将所有REOD日志应用完成后,就切换为主库对外提供服务。

搭建DM两节点主备集群需要准备2台服务器,一台主库服务器,一台备库服务器,额外再部署一台监视器服务器monitor使用。

1.2、虚拟机信息:

Dm1:vCPU2核心,内存4g,硬盘100g,IP:192.168.126.145      实例名lh1 数据库名DM
Dm2: vCPU2核心,内存4g,硬盘100g,IP:192.168.126.146     实例名lh2 数据库名DM
monitor:vCPU2核心,内存4g,硬盘50g,IP:192.168.126.147   注意monitor也需要配置环境和安装达梦以及初始化(因为初始化才能设置DM数据库路径)

1.3、目录规划:(两台都需要配置)

/home/db/dmdbms   #达梦数据库软件安装目录
/home/db/dmdata   #创建数据文件的路径(参数文件和数据文件同路径)
/home/db/dmarch   #归档日志存放目录
/home/db/dmbak    #数据库备份文件存放目录

1.4、端口规划

MAL_INST_PORT    5236    #数据库实例监听端口
MAL_PORT         61141   #MAL系统监听 TCP 连接的端口
MAL_DW_PORT      33141   #实例监听守护进程 TCP 连接的端口
MAL_INST_DW_PORT 52141   #实例本地的守护进程监听 TCP 连接的端口

2、 安装前准备

2.1、环境检查(与上篇单机部署一样);

2.2、查看防火墙并且关闭安全策略selinux(与上篇单机部署一样);

2.3、用root创建安装目录和安装的用户以及用户组

mkdir -p /home/db/dmdbms         #创建达梦安装目录
mkdir -p /home/db/dmdata         #创建数据盘目录(存放数据库的数据信息)
groupadd dinstall                #创建组
useradd -g dinstall dma          #创建组中用户
passwd dma                       #设置密码(密码:1qaz@WSX,也可以自定义)
chown dma:dinstall -R /home/db   #更改安装以及实例目录所有者

(注意:因为数据库需要用到专有用户,目录权限一定要设置好)

下图所示可以查看目录是归dma用户所有

在这里插入图片描述

2.4、更改资源限制(永久生效)

说明:参数使用限制
1.data seg size
建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导 致数据库启动失败。
2.file size
建议用户设置为 unlimited(无限制),此参数过小将导致数据库安装或初始化失败。
3.open files
建议用户设置为 65536 以上或 unlimited(无限制)。
4.virtual memory
建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导 致数据库启动失败。
如果用户需要为当前安装用户更改ulimit的资源限制,修改文件/etc/security/limits.conf

root用户在 /etc/security/limits.conf 添加如下内容:(建议下载vim方便一点)

vim /etc/security/limits.conf   #注意在末行添加这些配置命令
dma soft nofile 65536           #必须配置,否则会出现数据库启动失败的可能
dma hard nofile 65536           #必须配置,否则会出现数据库启动失败的可能
dma soft nproc 10240            #必须配置,否则会出现数据库启动失败的可能
dma hard nproc 10240            #必须配置,否则会出现数据库启动失败的可能
dma hard data unlimited
dma soft data unlimited
dma hard fsize unlimited
dma soft fsize unlimited
dma soft core unlimited
dma hard core unlimited

建议:配置完成后如果没有显示则需要重启服务器

切换dma用户查看open file是否生效:直接根目录下进入bin目录查看即可(显示65536表示配置成功)

2.5、环境变量配置

可以先通过root用户安装vim编辑器,然后切换回dma进入bash

su - dma
vim .bash_profile

添加以下语句:(如果有重复则不用填写)

PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
export DM_HOME=/home/db/dmdbms                   #达梦数据库安装目录一定不能填错!
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool

配置完成后刷新脚本

[dma@dm1 ~]$ source .bash_profile

再次切换回root上传达梦8数据库安装包,挂载到/mnt目录下

tar -xvf dm8_20230418_x86_rh6_64.tar.gz               #如果后缀有iso就不需要解压了
mount -o loop dm8_20230418_x86_rh6_64.iso  /mnt       #挂载到根目录下的/mnt目录

3、命令行安装

3.1、进入到挂载目录进行安装

需要先切换dma用户,然后进入到挂载的目录下进行安装

执行./DMInstall.bin,记得 -i 安装(-i其实是每个步骤询问安装,这样比较保险不易出错)

su - dma
cd /mnt
./DMInstall.bin -i

在这里插入图片描述

没有找到key文件,先选择否 n ;

设置时区,选择 y ;

时区选择 21 中国 ;

安装类型:选择1、典型安装 ;

选择安装目录:

/home/db/dmdbms

确认该路径安装:y ;

如下图安装所示:

在这里插入图片描述

安装结束如图:
在这里插入图片描述

切换到root用户执行:

sh /home/db/dmdbms/script/root/root_installer.sh

(或者进入到/home/db/db/script/root,然后./root_installer.sh执行

在这里插入图片描述

3.2、初始化实例

首先切换到dma用户,然后进入到安装目录下的bin(/home/db/dmdbms/bin)

1、主库(DM是数据库名称,lh1是实例名称)

./dminit PATH=/home/db/dmdata db_name=DM instance_name=lh1          

在这里插入图片描述

2、 备库(与主库一样,注意名称)

./dminit PATH=/home/db/dmdata db_name=DM instance_name=lh2

在这里插入图片描述

3、监视器(与前面一样,实例名称默认即可)

./dminit PATH=/home/db/dmdata db_name=DM 

3.3、前台测试启动各个数据库服务,启动后关闭

1、**主库启动 **

./dmserver /home/db/dmdata/DM/dm.ini

在这里插入图片描述

2、**备库启动 **

./dmserver /home/db/dmdata/DM/dm.ini

关闭:输入exit后显示shutdown成功即可

在这里插入图片描述

3.4、同步主备库保持数据一致

主库进行脱机备份(如果备份失败可以查看dmap服务是否启动 ps -ef|grep dmap 启动dmap命令./DmAPService start)

注意:脱机备份前需要关闭数据库实例,否则备份会出错!

首先主库创建备份目录文件:

mkdir -p /home/db/dmbak/full_database

主库输入

[dma@dm1 bin]$ ./dmrman           

进入RMAN系统后执行脱机备份语句(注意标点符号,建议复制)

backup database '/home/db/dmdata/DM/dm.ini' full backupset '/home/db/dmbak/full_database '; 

在这里插入图片描述

3.5、备库进行数据恢复

1、主库复制备份文件到备库(dma用户发送)

scp -r /home/db/dmbak/full_database 192.168.126.146:/home/db/dmbak/

成功传输到备库

在这里插入图片描述

2、备库进行恢复(这里注意数据库语句,特别是引号输错会报语法错误)

[dma@dm2 bin]$ ./dmrman
dmrman V8
RMAN> RESTORE DATABASE '/home/db/dmdata/DM/dm.ini' FROM BACKUPSET '/home/db/dmbak/';

RMAN> RECOVER DATABASE '/home/db/dmdata/DM/dm.ini' FROM BACKUPSET '/home/db/dmbak/';

RMAN> RECOVER DATABASE '/home/db/dmdata/DM/dm.ini' UPDATE DB_MAGIC;

第一个恢复语句执行成功:
在这里插入图片描述

第二个恢复语句执行成功:

在这里插入图片描述

第三个恢复语句执行成功:

在这里插入图片描述

4、配置主备库集群的配置文件

4.1、主库配置所需的配置文件

1、切换到dma用户修改dm.ini配置文件

路径:

/home/db/dmdata/DM/dm.ini
[dma@dm1 DM]$ vim dm.ini     #因为配置参数打散,建议:/ 搜索进行修改
  INSTANCE_NAME          = lh1       #实例名称
  PORT_NUM               = 5236      #端口号
  DW_INACTIVE_INTERVAL   = 60        #接收守护进程消息超时时间
  ALTER_MODE_STATUS      = 0         #不允许手工方式修改实例模式/状态/OGUID
  ENABLE_OFFLINE_TS      = 2         #不允许备库 OFFLINE 表空间
  MAL_INI                = 1                   
  ARCH_INI               = 1  
  RLOG_SEND_APPLY_MON    = 64        #统计最近64次日志发送消息

2、修改dmarch.ini配置文件(如果没有直接添加)

注意:配置本地归档和实时归档。当前实例 lh1 是主库,需要向 lh2(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为 lh2

[dma@dm1 DM]$ vim dmarch.ini
[ARCHIVE_REALTIME]
  ARCH_TYPE        = REALTIME              #实时归档类型
  ARCH_DEST        = lh2                   #实时归档目标实例名(备库实例名)
[ARCHIVE_LOCAL1]
  ARCH_TYPE        = LOCAL                 #本地归档类型
  ARCH_DEST        = /home/db/dmarch       #本地归档文件存放路径
  ARCH_FILE_SIZE   = 2048                  #单位 Mb,本地单个归档文件最大值 (建议不小于2G)
  ARCH_SPACE_LIMIT = 20480                 #单位 Mb,0 表示无限制,范围 1024~4294967294M

3、修改dmmal.ini配置文件(如果没有直接添加)

[dma@dm1 DM]$ vim dmmal.ini
 MAL_CHECK_INTERVAL     = 5                       #MAL链路检测时间间隔
 MAL_CONN_FAIL_INTERVAL = 5                       #判定MAL链路断开的时间
  [MAL_INST1]
  MAL_INST_NAME     = lh1                         #实例名,和dm.ini中的INSTANCE_NAME一致
  MAL_HOST          = 192.168.126.145             #MAL 系统监听 TCP 连接的 IP 地址
  MAL_PORT          = 61141                       #MAL 系统监听 TCP 连接的端口
  MAL_INST_HOST     = 192.168.126.145             #实例的对外服务 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     = lh2
  MAL_HOST          = 192.168.126.146
  MAL_PORT          = 61141
  MAL_INST_HOST     = 192.168.126.146
  MAL_INST_PORT     = 5236
  MAL_DW_PORT       = 52141
  MAL_INST_DW_PORT  = 33141

4、修改dmwatcher.ini守护配置文件(如果没有直接添加)

[dma@dm1 DM]$ vim dmwatcher.ini
  [GRP1]
  DW_TYPE           = GLOBAL                           #全局守护类型
  DW_MODE           = AUTO                             #自动切换模式 如果是非确认监视器配置手动切换 MANUAL
  DW_ERROR_TIME     = 10                               #远程守护进程故障认定时间
  INST_RECOVER_TIME = 60                               #主库守护进程启动恢复的间隔时间
  INST_ERROR_TIME   = 10                               #本地实例故障认定时间
  INST_OGUID        = 453331                           #守护系统唯一 OGUID 值
  INST_INI          = /home/db/dmdata/DM/dm.ini        #dm.ini 配置文件路径
  INST_AUTO_RESTART = 1                                #打开实例的自动启动功能
  INST_STARTUP_CMD  = /home/db/dmdbms/bin/dmserver     #命令行方式启动

4.2、备库配置所需的配置文件

1、切换到dma用户修改dm.ini配置文件

路径:

/home/db/dmdata/DM/dm.ini
[dma@dm2 DM]$ vim dm.ini     #因为配置参数打散,建议:/ 搜索进行修改
  INSTANCE_NAME          = lh2       #实例名称
  PORT_NUM               = 5236      #端口号
  DW_INACTIVE_INTERVAL   = 60        #接收守护进程消息超时时间
  ALTER_MODE_STATUS      = 0         #不允许手工方式修改实例模式/状态/OGUID
  ENABLE_OFFLINE_TS      = 2         #不允许备库 OFFLINE 表空间
  MAL_INI                = 1                   
  ARCH_INI               = 1  
  RLOG_SEND_APPLY_MON    = 64        #统计最近64次日志发送消息

2、修改dmarch.ini配置文件(如果没有直接添加)

[dma@dm2 DM]$ vim dmarch.ini
 [ARCHIVE_REALTIME]
  ARCH_TYPE        = REALTIME
  ARCH_DEST        = lh1
 [ARCHIVE_LOCAL1]
  ARCH_TYPE        = LOCAL
  ARCH_DEST        = /home/db/dmarch
  ARCH_FILE_SIZE   = 2048
  ARCH_SPACE_LIMIT = 20480

3、修改dmmal.ini配置文件(如果没有直接添加)

[dma@dm2 DM]$ vim dmmal.ini
 MAL_CHECK_INTERVAL     = 5                       #MAL链路检测时间间隔
 MAL_CONN_FAIL_INTERVAL = 5                       #判定MAL链路断开的时间
  [MAL_INST1]
  MAL_INST_NAME     = lh1                         #实例名,和dm.ini中的INSTANCE_NAME一致
  MAL_HOST          = 192.168.126.145             #MAL 系统监听 TCP 连接的 IP 地址
  MAL_PORT          = 61141                       #MAL 系统监听 TCP 连接的端口
  MAL_INST_HOST     = 192.168.126.145             #实例的对外服务 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     = lh2
  MAL_HOST          = 192.168.126.146
  MAL_PORT          = 61141
  MAL_INST_HOST     = 192.168.126.146
  MAL_INST_PORT     = 5236
  MAL_DW_PORT       = 52141
  MAL_INST_DW_PORT  = 33141

4、修改dmwatcher.ini配置文件(如果没有直接添加)

[dma@dm2 DM]$ vim dmwatcher.ini
  [GRP1]
  DW_TYPE           = GLOBAL                           #全局守护类型
  DW_MODE           = AUTO                             #自动切换模式 如果是非确认监视器配置手动切换 MANUAL
  DW_ERROR_TIME     = 10                               #远程守护进程故障认定时间
  INST_RECOVER_TIME = 60                               #主库守护进程启动恢复的间隔时间
  INST_ERROR_TIME   = 10                               #本地实例故障认定时间
  INST_OGUID        = 453331                           #守护系统唯一 OGUID 值
  INST_INI          = /home/db/dmdata/DM/dm.ini        #dm.ini 配置文件路径
  INST_AUTO_RESTART = 1                                #打开实例的自动启动功能
  INST_STARTUP_CMD  = /home/db/dmdbms/bin/dmserver     #命令行方式启动

4.3、主备库设置mount状态,设置数据库状态(首次必须mount启动!)

注意:可以在原虚拟机里面开启mount,然后远程那边窗口启动数据库连接进行设置

[dma@dm1 ~]$ cd /home/db/dmdbms/bin
[dma@dm1 bin]$ ./dmserver /home/db/dmdata/DM/dm.ini mount            #前台mount方式启动数据库

在这里插入图片描述

主库 (如果./disql连接失败报错:socket连接失败,可以指定端口号登录./disql SYSDBA/SYSDBA:5236 )

[dma@dm1 ~]$/home/db/dmdbms/bin
./disql                                                 #disql命令行登录数据库,用户与密码SYSDBA
SQL>       
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
alter database primary;                                              #配置为主库状态
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

配置完成后exit退出,再次登录数据库查看是否处于主库状态
在这里插入图片描述

备库

[dma@dm2 ~]$ cd /home/db/dmdbms/bin
[dma@dm2 bin]$ ./dmserver /home/db/dmdata/DM/dm.ini mount            #前台mount方式启动数据库
./disql                                                              #disql命令行登录数据库,用户与密码SYSDBA
SQL>       
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);

配置完成后exit退出,再次登录数据库查看是否处于备库状态
在这里插入图片描述

主备前台启动数据库守护:(首次开启可以新开一个终端开启数据库守护,后面可以再关闭)

主库:[dma@dm1 bin]$ ./dmwatcher /home/db/dmdata/DM/dmwatcher.ini
备库:[dma@dm2 bin]$ ./dmwatcher /home/db/dmdata/DM/dmwatcher.ini

出现版本号 V8 以及显示 IS READY 表示成功启动

在这里插入图片描述

5、配置监视器

5.1、需要配置非确认监视器和确认监视器(注意这个DM路径是需要前面安装了数据库然后初始化才存在!)

非确认监视器

配置路径:/home/db/dmdata/DM/dmmonitor_manual.ini
[dma@monitor DM]$ vim dmmonitor_manual.ini
MON_DW_CONFIRM      = 0                       #确认监视器模式( 0非确认监视器)
MON_LOG_PATH        = /home/db/dmdbms/log     #监视器日志文件存放路径
MON_LOG_INTERVAL    = 60                      #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 32                      #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0                       #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331                       #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP  = 192.168.126.145:52141
MON_DW_IP  = 192.168.126.146:52141

确认监视器

[dma@monitor DM]# vim dmmonitor.ini
MON_DW_CONFIRM      = 1                       #确认监视器模式( 0非确认监视器)
MON_LOG_PATH        = /home/db/dmdbms/log     #监视器日志文件存放路径
MON_LOG_INTERVAL    = 60                      #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 32                      #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0                       #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331                 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP  = 192.168.126.145:52141
MON_DW_IP  = 192.168.126.146:52141

5.2、配置完成以后前台启动非确认监视器,查看主备集群是否正常(需要主备先开启守护才能检测到)

路径:[dma@monitor bin]$ ./dmmonitor /home/db/dmdata/DM/dmmonitor_manual.ini

如果发现不存在实例或者无法login登录,请检查各台服务器的防火墙是否关闭,然后再检查主备服务或者重启主备服务!

确认无误后exit退出

6、注册后台启动服务

主库:注册数据库后台启动服务

[root@dm1 ~]# cd /home/db/dmdbms/script/root
[root@dm1 root]# ./dm_service_installer.sh -t dmserver  -dm_ini /home/db/dmdata/DM/dm.ini -p lh1 -m mount

主库:注册数据库后台启动数据库守护服务

[root@dm1 ~]# cd /home/db/dmdbms/script/root
[root@dm1 root]# ./dm_service_installer.sh -t dmwatcher -watcher_ini /home/db/dmdata/DM/dmwatcher.ini -p lh1

注意:数据路径要写对,名称-p后面建议写实例1名称即可

备库:注册数据库后台启动服务

[root@dm2 ~]# cd /home/db/dmdbms/script/root
[root@dm2 root]# ./dm_service_installer.sh -t dmserver  -dm_ini /home/db/dmdata/DM/dm.ini -p lh2 -m mount

备库:注册数据库后台启动数据库守护服务

[root@dm2 ~]# cd /home/db/dmdbms/script/root
[root@dm2 root]# ./dm_service_installer.sh -t dmwatcher -watcher_ini /home/db/dmdata/DM/dmwatcher.ini -p lh2

监视器:确认监视器注册后台服务

[root@monitor ~]# cd /home/db/dmdbms/script/root
[root@monitor root]# ./dm_service_installer.sh -t dmmonitor -monitor_ini /home/db/dmdata/DM/dmmonitor.ini -p GRP1                   #指定确认监视器的ini文件,注意GRP1是前面配置监视器的指定文件名,路径不要出错

7、后台启动整个集群服务

创建成功后对后台启动整个集群服务,建议启动顺序如下:(注意不要重复开启,否则会开启失败!)

#启动关闭集群的顺序
启动
   主库服务->备库服务->主库守护->备库守护->监视器
关闭
   监视器->备库守护->主库守护->主库服务->备库服务
[dma@dm1 bin]$ ./DmServicelh1 start                #启动主库服务,如果启动失败,去原终端stop关闭再开窗口重开服务即可
[dma@dm2 bin]$ ./DmServicelh2 start                #启动备库服务
[dma@dm1 bin]$ ./DmWatcherServicelh1 start         #启动主库守护,非常重要!不启动的话监视器会监视不到的!
[dma@dm2 bin]$ ./DmWatcherServicelh2 start         #启动备库守护,非常重要!不启动的话监视器会监视不到的!
[dma@monitor bin]$ ./DmMonitorServiceGRP1 start    #启动监视器,如果启动失败,去原终端stop关闭再开窗口重开服务即可

注意:

bin路径为 /home/db/dmdbms/bin

创建各个数据库服务和守护服务以及监视器的路径都是在root上

root用户路径为 /home/db/dmdbms/script/root

查询各个服务之间的状态:(数据库服务、守护进程服务)

主库/备库服务状态:

[dma@dm1 ~]# systemctl status DmServicelh1
[dma@dm2 ~]# systemctl status DmServicelh2

主库/备库守护服务状态:

[dma@dm1 bin]$ systemctl status DmWatcherServicelh1
[dma@dm2 bin]$ systemctl status DmWatcherServicelh2

active显示running即可表示该服务状态正常运行,如果显示异常请检查前面的步骤是否完善!(一般配置没问题不会出现异常)

至此主备集群以及监视器的搭建到此完成!下面主要介绍测试部分

8、客户端验证主备集群

8.1、使用 disql 客户端(root用户)登录主库,创建测试表,插入数据

路径还是在bin目录下/home/db/dmdbms/bin

./disql SYSDBA/SYSDBA@192.168.126.145:5236

在这里插入图片描述

创建表1测试:

SQL> 
create table t1(id int);
insert into t1 values(1);
commit;
select * from t1;

在这里插入图片描述

8.2、使用 disql 客户端登录备库,查询测试表验证

./disql SYSDBA/SYSDBA@192.168.126.146:5236

同时备库可以查到主库所创建的表1信息

在这里插入图片描述

9、主备集群测试手动与自动切换

9.1、主备集群通过监视器测试手动切换主库与备库状态

在监视器上输入switchover lh2 把备库切换为主库(注意是使用确认监视器,非确认监视器没有权限!)

monitor上启动确认监视器:

[dma@monitor bin]$ ./dmmonitor /home/db/dmdata/DM/dmmonitor.ini
login
SYSDBA
SYSDBA
switchover lh2 

在这里插入图片描述

显示已切换成功,后续可以在备库上登录查看是否切换为主库状态!

9.2、主备集群通过模拟单点故障测试自动切换(默认lh1为主库,lh2为备库)

首先测试主库备库分别停用守护服务和数据库服务

1、测试停用备库的守护服务时:

[dma@dm2 bin]$ ./DmWatcherServicelh2 stop
Stopping DmWatcherServicelh2:                              [ OK ]

如下图所示,可以发现监视器对于备库lh2的接收消息超时,也就是说监视器监控不到备库信息!

在这里插入图片描述

当停用备库服务时:

[dma@dm2 bin]$ ./DmServicelh2 stop
Stopping DmServicelh2:                                     [ OK ]

如下图所示,可以发现监视器监控到备库异常

在这里插入图片描述

当重新开启备库守护和数据库服务时:

[dma@dm2 bin]$ ./DmServicelh2 start
Starting DmServicelh2:                                     [ OK ]
[dma@dm2 bin]$ ./DmWatcherServicelh2 start
Starting DmWatcherServicelh2:                              [ OK ]

如下图所示,监视器接收到备库信息,备库重新加入到集群当中!

在这里插入图片描述

2、测试停用主库lh1的守护服务和数据库服务时:

[dma@dm1 bin]$ ./DmWatcherServicelh1 stop
Starting DmWatcherServicelh1:                              [ OK ]
[dma@dm1 bin]$ ./DmServicelh1 stop
Starting DmServicelh1:                                     [ OK ]

如下图所示,监视器监控到主库lh1异常,诊断出实例故障后短时间内将lh2备库自动切换为主库!

在这里插入图片描述

当重新开启lh1守护和数据库服务时:

[dma@dm1 bin]$ ./DmServicelh1 start
Starting DmServicelh1:                                     [ OK ]
[dma@dm1 bin]$ ./DmWatcherServicelh1 start
Starting DmWatcherServicelh1:                              [ OK ]

如下图所示,监视器接收到lh1信息,lh1重新加入到集群当中,只是此时的lh1状态是备库状态!

在这里插入图片描述

可以在监视器上输入show查看lh的状态

在这里插入图片描述

9.3、主库备库分别被kill进程测试自动切换与恢复(默认lh1为主库,lh2为备库)

测试主库备库kill服务进程(注意进程id被kill后会有变化,注意ps查看!)

1、当kill掉备库服务的时候

[dma@dm2 bin]$ ps -ef|grep dms
[dma@dm2 bin]$ kill -9 20308

在这里插入图片描述

如下图所示,可以看出备库服务被kill掉后,守护进程能在极短时间内把备库服务重新拉起来!(无需人工开启服务)

在这里插入图片描述

2、当kill掉主库服务的时候

[dma@dm1 bin]$ ps -ef|grep dms
[dma@dm1 bin]$ kill -9 10729

在这里插入图片描述

当kill掉主库数据库服务,监视器监控到主库lh1的异常,并短时间内进行自动主备切换,将状态正常的lh2备库切换为集群主库,当lh1数据库服务被数据库守护服务拉起后重新加入主备集群,为备库状态!

在这里插入图片描述

9.4、主库备库服务器重启测试自动切换与恢复(默认lh1为主库,lh2为备库)

测试主备库服务器重启(注意:如果没有永久关闭防火墙,重启后一定要关闭防火墙,否则监视器监控不到备库信息并报错!)

1、当数据库备库dm2重启时

服务配置了开机自启,当服务器重启后数据库服务,数据库守护服务会自动开启!

[dma@dm2 bin]$ systemctl reboot -i

在这里插入图片描述

当备库服务器重启时,监视器首先会收不到备库消息,当备库服务器重新启动后,备库服务自动重新加入到集群中作为备库继续提供服务!

在这里插入图片描述

ps:当重启备库数据库服务器,集群主备未发生切换,lh1依然为主库,lh2为备库!

2、当数据库主库dm1重启时

当重启主库lh1数据库服务器时,监视器失去主库消息,开始主备切换,将备库lh2切换为主库,lh1服务器重启后,监视器收到lh1消息,lh1重新加入集群,并作为集群备库继续提供服务!

在这里插入图片描述

在这里插入图片描述

ps:当主库数据库服务器重启后,集群会发生主备切换,lh2由备库切换为主库,lh1变为备库!

至此主备集群测试到此结束

10、小结

10.1、关于搭建途中遇到的问题以及解决方案:

需要注意的是:如果重启服务器,记得第一时间检查防火墙有没有被重新开起来,如有开启马上关闭!否则监视器无法监视到实例以及守护服务!

1、关于无法手动切换主备数据库的问题:

答:首先查看监视器是否没有登录到数据库用户,login登录SYSDBA用户后输入switchover进行切换尝试,如果还是出错就有可能是公钥发生了改变,需要查看对应的配置文件(一般不存在公钥改变的情况);

2、关于无法自动切换主备数据库的问题:

答:首先理解是什么服务组件能驱动主备数据库进行切换?答案是监视器,所以发现无法自动切换数据库的时候,回头看看监视器的配置是否填写正确无误,如果监视器配置没有问题,建议查看一下所注册的服务是否完整(或者重新注册一遍);

3、关于无法监控实例的问题:

答:首先检查防火墙有没有关闭,然后查看守护进程有没有开启,最后再检查数据库服务有没有开启,当然前面的集群配置要保证无误!

4、关于无法开启关闭实例或者守护进程的问题:

答:首先需要注意守护服务和数据库服务或者是监视器是否已经在其他窗口开启,如果在其他窗口开启容易造成冲突!需要先在原窗口关闭再重新开启,或者直接reboot重启虚拟机,重启完成后关闭防火墙和重启服务即可。

最后:通过本次的主备集群部署达梦数据库,可以实现数据脱机备份还原以及在模拟灾难场景情况下,实现主备数据库的自动切换(也可以手动切换检查服务状态),本人对于国产数据库现在还处于继续摸索学习中,如有问题请多多指教!

Logo

数据库是今天社会发展不可缺少的重要技术,它可以把大量的信息进行有序的存储和管理,为企业的数据处理提供了强大的保障。

更多推荐