linux系统环境:达梦数据库实时主备的搭建及测试过程

一、数据守护实现原理

将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与 重演过程中出现的各种异常情况提供一系列的解决方案。

如图所示,DM 数据守护系统结构主要由主库、备库、Redo 日志、Redo 日志传输、 Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

二、确定安装环境

确定操作系统信息,关闭防火墙,关闭SELinux,准备三台服务器并确定服务器之间网络互通。搭建数据库守护系统前,应注意数据守护系统中各实例使用的 DM 服务器版本应一致, 同时还应注意各实例所在主机的操作系统位数、时区及时间设置都应一致,以及使用同一个用户启动 DM 服务器和守护进程 dmwatcher,以免系统在运行时出现意想不到的错误。

三、环境说明

        准备三台机器 DW_P、DW_S1、DW_M,DW_P 和 DW_S1 用来部署主备库,DW_M 用来部署确认监视器。其中 DW_P 和 DW_S1 配置两块网卡,一块接入内部网络交换模块,一块接 入到外部交换机,DW_M 接入内部网络。

机器名

IP地址

初始状态

操作系统

备注

DW_P

192.168.153.10

主库DBCMIS_01

Linux dm_s1 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

 外部服务 IP:192.168.153.10  

内部通信 IP:

192.168.153.10

DW_S1

192.168.153.11

备库DBCMIS_02

Linux dm_s1 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

外部服务 IP:192.168.153.11  

内部通信 IP:

192.168.153.11

DW_M

192.168.153.12

确认监视器

Linux dm_s1 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

端口规划:

实例名

PORT_NUM

MAL_INST_DW_PORT

MAL_HOST

MAL_PORT

MAL_DW_PORT

DBCMIS_01

5236

33141

66141

52141

DBCMIS_02

5236

33142

66142

52142

四、安装及初始化数据库

两节点数据库分别按照此方法安装和初始化数据库

1.创建组和用户

[root@dm~]# groupadd dinstall
[root@dm~]# groupadd dinstall -g 2001
[root@dm~]#useradd -g dinstall dmdba -u 1001
[root@dm~]#passwd dmdba
[root@dm~]#<输入密码>
[root@~]# <再次输入密码>

2.修改open file参数

  • 永久生效

  编辑limits.conf,添加如下内容:

#vi /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 10240
dmdba hard nproc 10240
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
  • 临时生效

试用ulimit 指令,是参数临时生效

ulimit -c unlimited
ulimit -n 65536     
ulimit -u 10240     
ulimit -v 1048576   
ulimit -d unlimited
ulimit -f unlimited

注:修改后重启服务器

3.上传安装介质及挂载

[root@dm~]# mount /opt/dm8_20220510_x86_rh6_64.iso  /mnt

4.修改文件DMInstall.bin的用户组

[root@dm~]# cd /mnt
[root@dm~]# chown -R dmdba:dinstall DMInstall.bin

5.切换安装用户安装数据库

[root@dm~]#su – dmdba
[dmdba@dm~]$cd /mnt/
[dmdba@dm~]$./DMInstall.bin -i

此步如果是用非root用户安装,则在最后按照提示,使用root执行提示的语句即可。

例如:

待补充

6.添加环境变量

[root@dm~]# su - dmdba
[dmdba@dm~]$ vi .bash_profile

添加如下内容:

export DM_HOME="/home/dmdba/dmdbms"  
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool 

7.使环境变量生效

[dmdba@dm~]$source .bash_profile 

说明:

LD_LIBRARY_PATH:主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

PATH:环境变量定义了用于进行命令和程序查找的目录。 PATH中的目录使用冒号分隔

DM_HOME:定义达梦数据库得软件目录

8.初始化数据库及第一次启动数据库

注:如果是初始搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据, 如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数据

  • 主节点

 初始化数据库实例

[root@dm~]#su - dmdba
[dmdba@dm~]$cd /home/dmdba/dmdbms/bin
[dmdba@bin]$./dminit path=/home/dmdba/data db_name=DBCMIS_01 instance_name=DBCMIS_01 PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=0 CASE_SENSITIVE=Y

 前台启动数据库

[dmdba@bin]$./dmserver /home/dmdba/data/DBCMIS_01/dm.ini
  • 节点

 初始化数据库实例

[root@dm~]#su - dmdba
[dmdba@dm~]$cd /home/dmdba/dmdbms/bin
[dmdba@bin]$./dminit path=/home/dmdba/data db_name=DBCMIS_02 instance_name=DBCMIS_02 PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=0 CASE_SENSITIVE=Y

 前台启动数据库 

[dmdba@bin]$./dmserver /home/dmdba/data/DBCMIS_02/dm.ini

  • 监控节点

 初始化数据库实例

[root@dm~]#su - dmdba
[dmdba@dm~]$cd /home/dmdba/dmdbms/bin
[dmdba@bin]$./dminit path=/home/dmdba/data db_name=DBCMIS_03 instance_name=DBCMIS_03 PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=0 CASE_SENSITIVE=Y

 前台启动数据库  

[dmdba@bin]$./dmserver /home/dmdba/data/DBCMIS_03/dm.ini

9.启用脱机备份还原数据库dmrman

  • 备份主节点数据

[dmdba@localhost bin]$ mkdir -p /home/dmdba/fullback
[dmdba@localhost bin]$ ./dmrman
RMAN>backup database '/home/dmdba/data/DBCMIS_01/dm.ini' full backupset '/home/dmdba/fullback';

正在上传…重新上传取消

  • 将备份文件传至备机

(备库执行)

[root@dmdba]#cd  /home/dmdba/
[root@dmdba]#scp -r 192.168.153.10:/home/dmdba/fullback/  ./
[root@dmdba]#chown  dmdba:dinstall fullback
  • 备机还原
[dmdba@bin]$ cd  /home/dmdba/dmdbms/bin
[dmdba@bin]$ ./dmrman
RMAN>restore database '/home/dmdba/data/DBCMIS_02/dm.ini' from backupset '/home/dmdba/fullback';
RMAN>recover database '/home/dmdba/data/DBCMIS_02/dm.ini' from backupset '/home/dmdba/fullback';
RMAN>recover database '/home/dmdba/data/DBCMIS_02/dm.ini' update db_magic;

五、集群配置

1.配置备库

注:以下配置文件均在数据库数据文件目录如主节点为/home/dmdba/data/DBCMIS_01

  • 配置dm.ini文件

(确定和修改如下参数)

#vi dm.ini
INSTANCE_NAME  = DBCMIS_01  #默认DMSERVER  
ALTER_MODE_STATUS = 0     #不允许手工方式修改实例模式/状态/
OGUID ENABLE_OFFLINE_TS = 2    #不允许备库 OFFLINE 表空间
MAL_INI = 1         #打开 MAL 系统
ARCH_INI = 1     #打开归档配置  
  • 配置dmmal.ini文件

注:MAL 系统的配置文件,主、备机一样

#vi dmmal.ini
MAL_CHECK_INTERVAL       = 5  #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL   = 5  #判定 MAL 链路断开的时间
[MAL_INST1]
  MAL_INST_NAME         = DBCMIS_01         #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
  MAL_HOST               = 192.168.153.10  #MAL 系统监听 TCP 连接的 IP 地址
  MAL_PORT               = 61141              #MAL 系统监听 TCP 连接的端口
  MAL_INST_HOST          = 192.168.153.10  #实例的对外服务 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          = DBCMIS_02
  MAL_HOST               = 192.168.153.11
  MAL_PORT               = 61142
  MAL_INST_HOST          = 192.168.153.11
  MAL_INST_PORT          = 5236
  MAL_DW_PORT            = 52142
  MAL_INST_DW_PORT       = 33142

  • 配置dmarch.ini文件

创建归档路径

$mkdir  -p  /home/dmdba/data/DBCMIS_01/arch
#vi dmarch.ini
[ARCHIVE_REALTIME]  
ARCH_TYPE     = REALTIME   #实时归档类型,即时归档是timely
ARCH_DEST     = DBCMIS_02  #实时归档目标实例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/data/DBCMIS_01/arch
ARCH_FILE_SIZE = 128 #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0
  • 配置dmwatcher.ini文件

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

  • 启动主库

窗口1:启动主库

注:数据守护的时候,以 Mount 方式启动主库

[dmdba@localhost bin]$./dmserver  /home/dmdba/data/DBCMIS_01/dm.ini mount

窗口2:登录数据库

[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA

      设置oguid并修改数据库状态 

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(433331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SQL>alter database primary; #改数据库模式为主库模式

2、配置备库

  • 配置dm.ini文件

(确定和修改如下参数)

#vi dm.ini
INSTANCE_NAME  = DBCMIS_02  #默认DMSERVER  
ALTER_MODE_STATUS = 0     #不允许手工方式修改实例模式/状态/
ENABLE_OFFLINE_TS = 2    #不允许备库 OFFLINE 表空间
MAL_INI = 1         #打开 MAL 系统
ARCH_INI = 1     #打开归档配置  

  • 配置dmmal.ini文件

        复制主节点配置即可

  • 配置dmwatcher.ini文件

#vi dmwatcher.ini
[GRP1]
DW_TYPE    = GLOBAL    
DW_MODE    = AUTO   
DW_ERROR_TIME     = 10  
INST_RECOVER_TIME  = 60
INST_ERROR_TIME   = 10
INST_OGUID         = 433331
INST_INI              = /home/dmdba/data/DBCMIS_02/dm.ini
INST_AUTO_RESTART  = 1   
INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD  = 0
RLOG_APPLY_THRESHOLD = 0
  • 配置dmarch.ini文件

创建归档路径

$mkdir  -p  /home/dmdba/data/DBCMIS_02/arch
#vi dmarch.ini
[ARCHIVE_REALTIME]  
ARCH_TYPE     = REALTIME    #实时归档类型
ARCH_DEST     = DBCMIS_01  #实时归档目标实例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/data/DBCMIS_02/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
  • 启动备库

窗口1:启动备库

注:数据守护的时候,以 Mount 方式启动主库

[dmdba@localhost bin]$./dmserver  /home/dmdba/data/DBCMIS_02/dm.ini mount

窗口2:登录数据库

[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA

设置oguid并修改数据库状态 

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(433331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SQL>alter database standby; #改数据库模式为备库模式

 由于 dmwatcher根据数据库模式、状态等信息作为故障处理、故障恢复的依据,建议在配置数据守护过程中,修改 dm.ini 参数ALTER_MODE_STATUS为0,限制用户直接通过SQL语句修改数据库状态、模式,避免 dmwatcher 做出错误的决策。

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

启动各个主备库上的守护进程:

  • 启动主库守护进程
[dmdba@localhost bin]$ ./dmwatcher /home/dmdba/data/DBCMIS_01/dmwatcher.ini
  • 启动备库守护进程
[dmdba@localhost bin]$ ./dmwatcher /home/dmdba/data/DBCMIS_02/dmwatcher.ini

守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始 广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将 本地实例 Open,并切换为 Open 状态。

4、配置监视器

  • 配置dmmonitor.ini文件

#vi dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式  默认0,普通监视器 --监视器类型
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间

[GRP1]
MON_INST_OGUID = 433331 #组 GRP1 的唯一 OGUID 值

#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.153.10:52141
MON_DW_IP = 192.168.153.11:52142

注意:一定要确定dmwatcher.ini中的和dmmonitor.ini中的OGUID一样.否则报错:

[monitor]         2022-05-30 07:51:54: dmmonitor(mid:1653922292) create link to dmwatcher(192.168.153.11:52142) error, code=-6010, oguid or group_name mismatch, please check configuration!!!

确认模式和监控模式的区别在于,除了具备监控模式监视器所有功能之外,确认监视器 还具有状态确认和自动接管两个功能。

故障自动切换模式的数据守护系统,必须部署一个确认监视器,否则在出现数据库故障时,会导致数据库服务中断。

5、启动监视器

[dmdba@localhost bin]$./dmmonitor path=/home/dmdba/data/DBCMIS_03/dmmonitor.ini

六、测试内容

  • 手动切换主库(非自动切换)

login  #启动监视器后,在监视器界面执行登录操作

输入DBA用户:SYSDBA

switchover  DBCMIS_02 #手动切换
switchover  DBCMIS_01 #手动切换
  • 自动监管(自动切换)

确认监视器启动自动接管流程的主要场景有三种,任何一种都会导致备库自动接管。

场景如下:

1.主库数据库实例异常终止,主库守护进程正常。

2.主库硬件故障、或者数据库实例和守护进程同时故障。

3.主库网络故障,主备库之间、主库与监视器之间连接异常。

演示顺序:

  1. 把主节点的服务器关机,在看看守护进程的监控情况,发现备库DBCMIS_02接管主库DBCMIS_01成为新的主库
  2. 将主节点的服务器开机,运行主节点上的守护进程
  3. 监控进程查看,主节点上的主库DBCMIS_01变成了备库
  • 模拟数据库服务挂掉,可在备库节点上执行

ps -ef |grep dmdba #查询dmdba的相关服务
kill -9 XX XX #kill掉对应的进程ID

找到数据库进程和守护进程,kill掉,原来的DBCMIS_01就切换成了主库。

  • 验证同步情况

主库:

create table test(id int);
insert into  test (id) values (1);
insert into  test (id) values (2);
commit;

备库:

select * from test;
insert into  test (id) values (3);

结论:主库插入数据并提交后,从库也能查到对应插入的数据;从库不能进行DDL操作,及从库在Standby模式下为只读模式。

七、注册服务

如果想让 dmserver、dmwatcher 和 dmmonitor 服务开机自启动,需要手动注册服务,注册步骤必须用 root 用户进行,注册完成后重启机器时,就会自动启动 dmserver、 dmwatcher 和 dmmonitor 服务。其中,因为确认监视器一直处于工作状态,所以确认监视器需要注册 dmmonitor 服务,自动启动;非确认监视器是在查看信息时才使用,届时手动启动控制台 dmmonitor 服务即可,可以不用注册 dmmonitor 服务。

  • 主库注册数据守护服务

cd  /home/dmdba/dmdbms/script/root

注册守护进程:

./dm_service_installer.sh -p DBCMIS_01  -t dmwatcher -watche_ini  /home/dmdba/data/DBCMIS_01/dmwatcher.ini
  • 备库注册数据守护服务

cd  /home/dmdba/dmdbms/script/root

注册守护进程:

./dm_service_installer.sh -p DBCMIS_02  -t dmwatcher -watcher_ini  /home/dmdba/data/DBCMIS_02/dmwatcher.ini

  • 注册数据监视服务

cd  /home/dmdba/dmdbms/script/root

注册数据守护服务

./dm_service_installer.sh -p DBCMIS_03  -t dmmonitor -monitor_ini   /home/dmdba/data/DBCMIS_03/dmmonitor.ini

八、故障自动重连

  • 配置dm_svc.conf主备连接服务名

        配置 DM 数据守护,一般要求配置连接服务名,以实现故障自动重连。连接服务名可以 在 DM 提供的 JDBC、DPI 等接口中使用,连接数据库时指定连接服务名,接口会随机选择 一个 IP 进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个 IP 进行连 接,直至连接成功或者遍历了所有 IP。 可以通过编辑 dm_svc.conf 文件配置连接服务名。

dm_svc.conf 配置文件在 DM 安装时生成,Linux 平台下位于 /etc 目录 ;Windows 平台下位于%SystemRoot%\system32 目录,

配置主备连接服务名

vi /etc/dm_svc.conf
添加数据库服务ip信息:
dmsvc=(192.168.153.10:5236,192.168.153.11:5236)

需要说明的是,如果对 dm_svc.conf 的配置项进行了修改,需要重启客户端工具,修改的配置才能生效。另外,如果 dm_svc.conf 配置文件中包含中文,则必须保证该配置文件的编码与客户端编码一致。

  • 测试登录

[root@localhost bin]# su - dmdba
[dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA@dmsvc
  • 结果

服务器[192.168.153.10:5236]:处于主库打开状态

登录使用时间 : 9.986(ms)

disql V8

更多内容,请访问达梦社区地址https:eco.dameng.com

猜你喜欢

转载自blog.csdn.net/Penrosee/article/details/125125146