DM实时主备的搭建及测试过程

一、数据守护实现原理

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

二、确定安装环境

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

检查网络

--拷贝一个文件到远程服务器的/opt目录下

[root@~]# scp -r xxx dmdba@ip:/opt/

--拷贝一个文件,指定端口到远程服务器的/opt目录下

[root@~]# scp -r -P端口 xxx dmdba@ip:/opt/

--网络配置以及速度是否正常 ethtool eth1

--查看网络信息 sar -n DEV 1 100

磁盘规划及挂载

磁盘挂载:

--是否自动挂载 cat /etc/fstab

--查看实际挂载盘 lsblk

注意:磁盘是否使用uuid挂载

检查磁盘IO

dd bs=32k count=20k if=/dev/mapper/VolGroup-lv_root of=/opt/dmdbms/test oflag=dsync

参数注释: 1.bs=设置块的读写大小2. if=文件名:输入文件名。3. of=文件名:输出文件名。4、count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。5、oflag指定写的方式,dsync读写数据采用同步IO;

检查磁盘调度算法

--通过lsblk命令找到数据盘对应的物理盘

[root@~]# lsblk

注意下图中数据盘对应的物理盘是vdc,则应检查vdc磁盘的调度算法

--检查sda磁盘的调度算法

[root@~]# cat /sys/block/vdc/queue/scheduler

永久修改

--修改内核引导参数,加入elevator= deadline

[root@~]# vi /boot/grub/menu.lst

--更改到如下内容 kernel /boot/vmlinuz-2.6.32-504.el6 ro root=LABEL=/ elevator=deadline rhgb quiet

关闭swap

临时修改

--临地关闭swap分区,重启后失效

[root@~]# swapoff -a

永久修改

--永久关闭swap分区

[root@~]# sed -ri 's/.*swap.*/#&/' /etc/fstab

--重启操作系统

[root@~]# reboot

--再次确认

[root@~]# free -m

检查NUMA是否关闭

-编辑grub文件,如下图所示加上:

numa=off [root@~]# vi /etc/default/grub

--重新生成/etc/grub2.cfg 配置文件: [root@~]# grub2-mkconfig -o /etc/grub2.cfg

--重启操作系统

[root@~]# reboot

--重启之后进行确认

[root@~]# dmesg | grep -i numa

调整sysctl.conf参数

永久生效 用root用户编辑配置文件编辑/etc/sysctl.conf [root@dm~]# vim /etc/sysctl.conf 修改vm.overcommit_memory=0 然后执行sysctl -p 使配置文件生效

调整profile参数

su - dmdba

vi .bash_profile

export DM_HOME="/dm8" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin" export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool 保存文件后执行source .bash_profile 生效

三、环境说明

四、安装及初始化数据库

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

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~]#

[

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

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

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.254.144:/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 #打开归档配置

sp_set_oguid(433331);","marks":[]}]}],"state":{}},{"type":"block","id":"nMHd-1661076274335","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"ew7x-1661076274334","leaves":[{"text":"SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);","marks":[]}]}],"state":{}},{"type":"block","id":"eaK3-1661076274337","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"AfXI-1661076274336","leaves":[{"text":"SQL>alter database primary; #改数据库模式为主库模式","marks":[]}]}],"state":{}}]'>

配置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.254.144 #MAL 系统监听 TCP 连接的 IP 地址

MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口

MAL_INST_HOST = 192.168.254.144 #实例的对外服务 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.254.145

MAL_PORT = 61142

MAL_INST_HOST = 192.168.254.145

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

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.254.144:52141

MON_DW_IP = 192.168.254.145: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!!!

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

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

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.254.144:52141

MON_DW_IP = 192.168.254.145: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.主库网络故障,主备库之间、主库与监视器之间连接异常。

演示顺序:

把主节点的服务器关机,在看看守护进程的监控情况,发现备库DBCMIS_02接管主库DBCMIS_01成为新的主库

将主节点的服务器开机,运行主节点上的守护进程

监控进程查看,主节点上的主库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

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台达梦数据库产品体验站,DM8在线试玩,达梦数据库全系列产品免费下载,官方权威的快速上手文档和产品手册,最活跃的达梦技术社区,面向全行业ISV厂商免费的云适配服务。https://eco.dameng.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值