3--实时主备搭建过程记录

在搭建数据守护系统前,应注意数据守护系统中各实例使用的 DM 服务器版本应一致,同时还应注意各实例所在主机的操作系统位数、大小端模式、时区及时间设置都应一致,以及使用同一个用户启动 DM 服务器和守护进程 dmwatcher,以免系统在运行时出现意想不到的错误。

1,虚拟机设置

3个虚拟机都按照安装单机的教程http://t.csdnimg.cn/qLQlz,分别完成如下步骤:

  1. 安装vmware-tools
  2. 设置共享文件夹(方便将安装包传输到虚拟机中,指令复制粘贴等)
  3. 修改系统资源限制
  4. 修改网卡配置
  5. 关闭防火墙
  6. 创建安装用户

1.1,硬件配置

新建3个虚拟机DW_P(安装主库)、 DW_S1(安装备库)、 DW_M(安装监视器),都需要安装dm8单机,所以均设置内存8G,硬盘40G(20G会内存不足报错),P和S1添加2个NAT网卡

1.2,网络设置

修改网卡配置文件,其中P和S1添加2个NAT网卡,ens33作为外网IP用于正常提供数据库服务,ens34作为内网IP用于和数据守护系统的其他组件通信,对应的配置文件都要修改

虚拟机外网服务IP内网通信IP
DW_P192.168.37.151192.168.0.141
DW_S1192.168.37.152192.168.0.142
DW_M-192.168.0.143

查看主库DW_P的IP地址

查看备库DW_S1的IP地址

DW_M只有1个NAT网卡ens33,因为192.168.0.xxx是内网地址,所以DW_M无法上网,但是可以和DW_P和DW_S1互相ping通

使用tcpdump命令可以监听到收到的数据包,其中筛选ping对应的icmp包

一定要关闭防火墙,在部署单机的时候没关好像没啥影响,但是部署实时主备时,没关就不能正常运行,因为监视器没办法收到守护进程的广播,没办法将主备库加入守护组中。

关闭防火墙

systemctl stop firewalld

关闭防火墙开机自启动

systemctl disable firewalld

2,准备工作

按照linux安装单机教程进行正常安装,提前规划好路径,3个虚拟机上的dm8都是一样的安装路径,主库和备库需要实例化,路径为CHEN1或者CHEN2,用CHENx统称

安装路径: /home/dmdba/dmdbms
实例路径: /home/dmdba/dmdbms/CHENx
归档目录: /home/dmdba/dmarch

2.1,数据库准备

2.1.1,安装,创建实例

挂载安装包

mkdir /mnt/cdrom
mount /mnt/hgfs/share/dm8_20230105_x86_kylin10_64.iso /mnt/cdrom

主库和备库安装dm8,数据库名CHEN(数据库名必须一样,实例名必须不一样,端口号无所谓)

主库:实例名CHEN1,数据库对外服务的端口号5234

备库:实例名CHEN2,数据库对外服务的端口号5234

su dmdba
./DMInstall.bin -i
cd /home/dmdba/dmdbms/bin
./dminit PATH=/home/dmdba/dmdbms/CHENx INSTANCE_NAME=CHENx DB_NAME=CHEN PORT_NUM=5234

2.1.2,主备库正常启动

主备库创建实例后,第一次启动数据库必须使用dmserver命令进行前台启动,才能完成初始化,不能使用注册服务的后台启动。第一次初始化启动时,不用mount模式,就正常启动。

./dmserver /home/dmdba/dmdbms/CHENx/CHEN/dm.ini

  • 2.1.3,主库更新数据库内容

默认用户SYSDBA使用disql命令登录主库CHEN1

cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA@192.168.37.151:5234

新建表,插入数据,提交事务

create table users(number char(10), name char(10), password char(10));
insert into users(number,name,password) values('1001','TOM','tom123');
insert into users values('1002','Jerry','jerry123');
commit;

2.2,脱机备份

脱机备份需要主库关闭服务,然后生成备份文件,发给备库,在备库恢复备份之前都不能提供服务

2.2.1,主备库关闭服务

  •  关闭后台的注册服务
./DmServerDMSERVER stop
  • 关闭前台服务:输入exit回车

2.2.2,生成备份文件

使用dmrman命令在主库生成备份文件

./dmrman
backup database '/home/dmdba/dmdbms/CHEN1/CHEN/dm.ini' full backupset '/home/dmdba/dmbackup/dbbak01';
exit;
或者
./dmrman CTLSTMT="backup database '/home/dmdba/dmdbms/CHEN1/CHEN/dm.ini' full backupset '/home/dmdba/dmbackup/dbbak01'"

2.3.3,传输备份文件

在主库执行scp命令将主库的备份传输到备库

  • -r表示递归,将源文件夹下所有文件都传输
  • 第一个路径参数/home/dmdba/dmbackup是主库上的源文件目录
  • dmdba是备库虚拟机的用户名,之后会需要输入对应登录密码
  • 192.168.0.142是备库的内部通信IP地址
  • IP地址后的路径参数/home/dmdba/dmbackup是备库的目标存储路径
scp -r /home/dmdba/dmbackup dmdba@192.168.0.142:/home/dmdba/dmbackup

执行完成后,可以在备库对应的文件夹中看到接收的备份文件

2.3.4,备库数据恢复

使用restore和recover命令,依次进行归档还原、redo日志还原、数据库魔数还原。其中脱机备份可以省略第二步,会提示没有产生redo日志

./dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdbms/CHEN2/CHEN/dm.ini' FROM BACKUPSET '/home/dmdba/dmbackup/dbbak01'"
./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/CHEN2/CHEN/dm.ini' FROM BACKUPSET '/home/dmdba/dmbackup/dbbak01'"
./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/CHEN2/CHEN/dm.ini' UPDATE DB_MAGIC"

2.3.5,检查数据是否一致

mount模式启动主备库,登录disql,查看永久魔数和lsn值

x取值1或者2,分别对应主、备库的IP

./dmserver /home/dmdba/dmdbms/CHENx/CHEN/dm.ini mount
./disql SYSDBA/SYSDBA@192.168.37.15x:5234
select permanent_magic;
select file_lsn,cur_lsn from v$rlog;

主库和备库的永久魔数和lsn值必须全部一致,否则说明数据不同步,不能继续安装实时主备,需要重新备份还原。

3,配置实时主备

注意:

  • 修改配置文件之前也要记得关闭服务
  • 一定要用安装用户dmdba进行配置文件的修改和运行,不能使用root用户,不然之后会出现权限不够等问题

3.1,修改配置文件

3.1.1,dm.ini

主备库的dm.ini只有实例名不一样(以下用x表示,取值1或者2,分别对应主、备库),需要修改以下几个参数

vi /home/dmdba/dmdbms/CHENx/CHEN/dm.ini
INSTANCE_NAME                   = CHENx
PORT_NUM                        = 5234
ALTER_MODE_STATUS               = 0
ENABLE_OFFLINE_TS               = 2 
MAL_INI                         = 1
ARCH_INI                        = 1

3.1.2,dmmal.ini

主备库的dmmal.ini文件完全相同,需要新建文件,自己编辑

vi /home/dmdba/dmdbms/CHENx/CHEN/dmmal.ini
MAL_CHECK_INTERVAL = 5          #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5      #判定 MAL 链路断开的时间

[MAL_INST1]
MAL_INST_NAME = CHEN1           #主库实例名
MAL_HOST = 192.168.0.141        #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5238                 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.37.151  #实例的对外服务 IP 地址   
MAL_INST_PORT = 5234            #实例的对外服务端口                                           
MAL_DW_PORT = 5239              #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5237         #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME = CHEN2           #备库实例名
MAL_HOST = 192.168.0.142        #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5238                 #MAL 系统监听 TCP 连接的端口    
MAL_INST_HOST = 192.168.37.152  #实例的对外服务 IP 地址    
MAL_INST_PORT = 5234            #实例的对外服务端口      
MAL_DW_PORT = 5239              #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5237         #实例监听守护进程 TCP 连接的端口

3.1.3,dmarch.ini

主备库的dmarch.ini文件,只有ARCH_DEST参数不一样,填写对方的实例名,其余参数相同,需要新建文件

vi /home/dmdba/dmdbms/CHENx/CHEN/dmarch.ini
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME            #实时归档类型
ARCH_DEST = CHENx               #目标实例名   --主库填备库实例名,备库填主库实例名

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL               #本地归档类型
ARCH_DEST = /home/dmdba/dmarch  #本地归档文件存放路径
ARCH_FILE_SIZE = 128            #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 4096         #单位 Mb,范围1024~4294967294M(0表示无限制,必须改成非0)

3.1.4,dmwatcher.ini

主备库的dmwatcher.ini文件只有自己的dm.ini文件的路径不同,其余完全相同,需要新建文件,自己编辑,设置数据守护组的OGUID值为754403

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

3.2,设置主备库参数

3.2.1,以mount模式启动

主库备库使用dmserver脚本以mount形式启动服务

./dmserver /home/dmdba/dmdbms/CHENx/CHEN/dm.ini mount

3.2.2,设置OGUID

1,主备库使用disql登录

./disql SYSDBA/SYSDBA@192.168.37.15x:5234

2,主备库设置OGUID值,先将文件权限修改为‘可写’

SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
sp_set_oguid(754403);

3.2.3,修改数据库模式

一定要先设置OGUID值,然后修改模式。因为修改模式之后,就不能再设置OGUID值了,就无法搭建数据守护了

主库修改为primary模式

alter database primary;

备库修改为standby模式

alter database standby;

然后将文件权限修改为‘不可写’

SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);

3.2.4,查看数据库信息

查看归档信息

select arch_mode from v$database;

查看归档日志信息

select arch_name,arch_type,arch_dest from v$DM_arch_ini;

查看OGUID

select oguid from v$instance;

查看MAL系统信息(全局)

select * from v$DM_mal_ini;

3.3,配置守护进程

数据库服务mount模式开启状态下,前台启动守护进程

./dmwatcher /home/dmdba/dmdbms/CHENx/CHEN/dmwatcher.ini

3.4,配置监视器

监视器节点,DW_M,不用创建实例
查看ip addr

配置dmmonitor.ini文件

vi /home/dmdba/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1                      #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log   #监视器日志文件存放路径
MON_LOG_INTERVAL = 60                   #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32                  #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 1024              #不限定日志文件总占用空间(必须改为非0)

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

#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.0.141:5239
MON_DW_IP = 192.168.0.142:5239

启动监视器

cd /home/dmdba/dmdbms/bin
./dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini

输入help查看可选参数

如果主备库和守护进程运行正常,则打开监视器的时候,会自动连接成功,并显示当前组内成员,还会自动把主备库从mount状态切换到open状态,即主备库可以正常提供读写服务了(mount状态下只能修改数据库设置,不能进行读写数据操作)

输入show查看集群状态

4,主备同步测试

主库插入数据

insert into users values('1003','Mike','mike123');
select * from users;

备库这边可以看到新插入的数据

说明实时主备搭建成功

5,主备切换测试

5.1,主库断网,备库接管

监视器show查看当前守护组状态

关闭主库CHEN1的网络

systemctl stop network

主库的守护进程会报错并自动退出

但服务和守护的两个进程还在,不用杀进程重新开启服务,不用在主备库操作,等网络恢复后实时主备功能会自动还原

disql命令显示连接丢失

备库守护进程show link,发现主库不在列表里面

监视器会自动提示,原主库CHEN1响应超时,自动切换CHEN2为主库,CHEN1为备库

监视器show当前状态

在CHEN2插入一条新数据,成功,说明CHEN2为主库,因为备库不能写只能读

5.2,恢复主库网络

恢复CHEN1的网络

systemctl start network

server和watcher的进程还在的话,会自动重新连接CHEN1

监视器自动显示主备库状态变化

监视器show当前状态

一般数据库服务和守护进程都还是开启的,如果进程没了,可以使用mount模式启动服务器,然后启动守护进程,然后会自动连接上监视器,并且CHEN1会自动切换回主库

但是数据丢了,因为没有commit!

使用disql登录CHEN1,查询发现数据丢失了,不仅是在CHEN2上插入的1004看不到,之前测试同步性时候插入的1003也看不到。因为没有commit,系统突然断网了,数据就没了。

但是可以看到1001和1002,就是一开始脱机备份之前生成了备份文件的。

而且,CHEN2在自动切换成备库之后,和主库CHEN1同步了,也只能看到1001和1002。

所以要记得及时commit数据,并定期备份。

5.3,备库断网,不影响主库

 关闭备库CHEN2的网络

systemctl stop network

监视器会提示备库CHEN2连接超时

监视器show当前状态,CHEN2仍然是备库但数据守护失效

5.4,恢复备库网络

 恢复CHEN2的网络

systemctl start network

监视器显示,CHEN2守护进程会自动进行数据库的状态恢复

监视器show当前状态,发现一切恢复正常

6,一些补充

 6.1,注册服务

注册为系统服务后可以在后台启动数据库,关掉命令行窗口也不会断开服务

./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/CHEN1/CHEN/dm.ini -p CHEN

cp /home/dmdba/dmdbms/bin/DmServiceCHEN /etc/rc.d/init.d/DmServiceCHEN

ln -s /etc/rc.d/init.d/DmServiceCHEN /etc/rc.d/rc0.d/K02DmServiceCHEN
ln -s /etc/rc.d/init.d/DmServiceCHEN /etc/rc.d/rc1.d/K02DmServiceCHEN
ln -s /etc/rc.d/init.d/DmServiceCHEN /etc/rc.d/rc2.d/S98DmServiceCHEN
ln -s /etc/rc.d/init.d/DmServiceCHEN /etc/rc.d/rc3.d/S98DmServiceCHEN
ln -s /etc/rc.d/init.d/DmServiceCHEN /etc/rc.d/rc4.d/S98DmServiceCHEN
ln -s /etc/rc.d/init.d/DmServiceCHEN /etc/rc.d/rc5.d/S98DmServiceCHEN
ln -s /etc/rc.d/init.d/DmServiceCHEN /etc/rc.d/rc6.d/K02DmServiceCHEN

注册并启动守护进程

cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/CHENx/CHEN/dmwatcher.ini -p CHEN
systemctl start DmWatcherServiceCHEN

6.2,启动服务

  •  使用注册服务后台启动,或,命令行前台启动
service DmserviceCHEN start
或
./dmserver /home/dmdba/dmdbms/CHEN1/CHEN/dm.ini

如果发现实例已经在运行了,应该是之前在后台运行的,需要先关掉,再以mount形式启动
查看一下是不是有对应的进程 

ps -ef|grep dm.ini

关掉对应的服务,然后就没有对应进程了

./DmServiceCHEN stop

6.3,开启关闭顺序

开启顺序:

实例dmserver-->守护进程dmwatcher-->监视器dmmonitor

关闭守护系统时,必须按照一定的顺序来关闭守护进程和数据库实例。特别是自动切换模式,如果退出守护进程或主备库的顺序不正确,可能会引起主备切换,甚至造成守护进程组分裂。

通过监视器执行 Stop Group 命令关闭数据守护系统,是最简单、安全的方式。命令执行成功后,数据库实例正常关闭。但守护进程并没有真正退出,而是将状态切换为 Shutdown 状态。

Stop Group 命令内部流程如下:

  1. 通知守护进程切换为 Shutdown 状态
  2. 通知主库退出
  3. 通知其他备库退出

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

  1. 如果启动了确认监视器,先关闭确认监视器(防止自动接管)
  2. 关闭备库守护进程(防止重启实例)
  3. 关闭主库守护进程(防止重启实例)
  4. Shutdown 主库
  5. Shutdown 备库

关闭顺序:

监视器dmmonitor-->备机守护进程dmwatcher-->主机守护进程dmwatcher-->主机实例-->备机实例

6.4,关闭防火墙

 关闭防火墙

systemctl stop firewalld

关闭防火墙开机自启动

systemctl disable firewalld

6.5,使用root用户修改配置文件

进行实时主备部署时,应该切换为安装用户dmdba,不能使用root用户,不然之后会部署失败报错,因为很多文件的读写权限都是root,使用其他用户进行运行时就会出现权限不够等问题。

但是如果不小心忘记切换用户而修改了配置文件,也有补救的办法,那就是事后手动修改文件的所有权,具体改哪些文件,就需要自己去看服务器、守护进程、监视器等的log文件,查看其中的warning和error,然后查看对应目录下文件的权限,然后把所有者为root的修改为dmdba,然后重新启动服务。总之还是有点麻烦,只能作为不方便重新部署的补救办法,最好还是一开始就使用dmdba用户进行部署安装,以免出现其他解决不了的问题。

比如,查看log文件夹发现有文件的用户名和用户组是root,于是把该文件夹的所属用户都修改为root。

vi dm_dmwatcher_CHEN2_202407.log
cd /home/dmdba/dmdbms/log/
ll
cd /home/dmdba/dmdbms/
chown -R dmdba:dinstall log/

 社区地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值