主备集群增加异步备机

背景

因用户需要增加远程异地灾备功能,用户要求远距离的备机不能影响原有的主备集群,允许有远程备机有一定延迟,现测试在主备集群增加一台异步备机

 

IP规划:

主机名

服务ip

心跳ip

数据库名

实例名

21

192.168.145.21

192.168.145.21

DAMENG

DM21

22

192.168.145.22

192.168.145.22

DAMENG

DM22

23(异步备机)

192.168.145.23

192.168.145.23

DAMENG

DM23

66

192.168.145.66

192.168.145.66

DAMENG

 

端口规划:

实例名

实例端口

MAL 系统监听 TCP 连接的端口

实例本地的守护进程监听 TCP 连接的端口

实例监听守护进程 TCP 连接的端口

DM21

5236

7336

7436

7536

DM22

5236

7336

7436

7536

DM23

5236

7336

7436

7536

监视器

关闭防火墙

目录规划:

数据库软件安装目录

/home/dmdba/dmdbms

实例安装目录

/dmdata/

归档日志存放目录

/dmdata/arch

配置文件目录

/dmdata/DAMENG/

2 数据库软件安装及环境配置

2.1 操作系统配置

新建数据库管理用户和组

执行以下命令,新建用户组 dinstall

groupadd dinstall -g 2001

执行以下命令,新建用户 dmdba

useradd  -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba 

执行以下命令,修改 dmdba 用户密码。

passwd dmdba

dameng123

修改用户资源限制

执行以下命令,修改 dmdba 用户资源限制。

vim /etc/security/limits.conf

文件末尾添加如下内容:

dmdba  soft      nice       0

dmdba  hard      nice       0

dmdba  soft      as         unlimited

dmdba  hard      as         unlimited

dmdba  soft      fsize      unlimited

dmdba  hard      fsize      unlimited

dmdba  soft      nproc      65536

dmdba  hard      nproc      65536

dmdba  soft      nofile     65536

dmdba  hard      nofile     65536

dmdba  soft      core       unlimited

dmdba  hard      core       unlimited

dmdba  soft      data       unlimited

dmdba  hard      data       unlimited

执行以下命令,修改 dmdba 用户环境变量。

vi /home/dmdba/.bash_profile

文件末尾添加如下内容:

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

使环境变量生效

source  /home/dmdba/.bash_profile

2.2数据库软件安装

使用root用户挂载数据库软件的iso文件

mkdir -p /dmsoft

mount -o loop dm8_20211222_x86_rh6_64_sec_8.4.2.98 /dmsoft

使用dmdba用户安装软件

su - dmdba

执行以下命令,切换到 /dmsoft目录下

cd /dmsoft

执行 DMInstall.bin 文件开始安装,选择【-i】参数以命令行方式安装。

./DMInstall.bin -i

选择安装程序的语言 c/C 为中文,e/E 为英文。

提示是否安装 key 文件,key路径/opt

选择时区,21 即东 8 区。

选择安装类型,默认典型安装(包含所有内容)。

选择软件安装目录,默认/home/dmdba/dmdbms

确认安装

安装完成提示使root执行脚本:

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

2.3初始化实例

--21节点执行

dminit path=/dmdata  instance_name=DM21

--22节点执行 

dminit path=/dmdata  instance_name=DM22 

--23节点执行

dminit path=/dmdata  instance_name=DM23 

3一备集群配置

3.1 节点2122先搭建主备集群

以主机21为主备集群主库,启动实例

dmserver /dmdata/DAMENG/dm.ini

出现system is ready后表示数据已正常启动

打开另外一个窗口登录数据库

disql SYSDBA/SYSDBA

然后退出并关闭数据库。

3.2脱机备份数据库

在主机21执行以下命令,dmdba用户 启动dmrman工具

dmrman use_ap=2

执行 backup 全库:

BACKUP DATABASE '/dmdata/DAMENG/dm.ini' BACKUPSET '/dmdata/bakfull';

3.3备份还原备库

将备份的文件/dmdata/bakfull拷贝到22节点服务器上。

scp -r /dmdata/bakfull dmdba@192.168.145.22:/dmdata/bakfull

22节点上使用 dmrman 工具还原备库,dmdba 用户执行:

dmrman use_ap=2

进入dmrman工具交互界面

执行 restore

RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/bakfull';

完成后执行 recover:

recover database '/dmdata/DAMENG/dm.ini' from backupset '/dmdata/bakfull';

最后执行 recover update db_magic

RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;

3.4修改dm.ini参数

两节点2122都要修改,执行以下命令:

vi /dmdata/DAMENG/dm.ini

所有节点修改以下参数值:

MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

3.5配置归档配置文件 dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:

vi /dmdata/DAMENG/dmarch.ini

主库21添加以下内容:

[ARCHIVE_REALTIME1]

ARCH_TYPE        =  REALTIME #实时归档类型

ARCH_DEST        = DM22 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE        = LOCAL #本地归档类型

ARCH_DEST        = /dmdata/arch #本地归档文件存放路径

ARCH_FILE_SIZE   = 2048 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT =10000#单位 Mb0 表示无限制,范围 1024~4294967294M

备库22添加以下内容:

[ARCHIVE_REALTIME1]

ARCH_TYPE        =  REALTIME #实时归档类型

ARCH_DEST        =DM21 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE        = LOCAL #本地归档类型

ARCH_DEST        = /dmdata/arch #本地归档文件存放路径

ARCH_FILE_SIZE   = 2048 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT =10000#单位 Mb0 表示无限制,范围 1024~4294967294M

3.6配置MAL系统配置文件 dmmal.ini

在实例目录下新建文件 dmmal.ini,执行以下命令。

vi /dmdata/DAMENG/dmmal.ini

主备库2个节点文件内容要相同。

MAL_CHECK_INTERVAL       = 5      #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL   = 15  #判定 MAL 链路断开的时间

[MAL_INST1]

MAL_INST_NAME    =DM21 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST              =192.168.145.21#MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST    =192.168.145.21#实例的对外服务 IP 地址

MAL_INST_PORT    = 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT      = 7436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT    = 7536 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME       = DM22

MAL_HOST                 = 192.168.145.22

MAL_PORT                 =  7336

MAL_INST_HOST       = 192.168.145.22

MAL_INST_PORT       = 5236

MAL_DW_PORT         = 7436

MAL_INST_DW_PORT    = 7536

3.7配置守护进程配置文件 dmwatcher.ini

在实例目录下新建文件 dmwatcher.ini,执行以下命令:

vi /dmdata/DAMENG/dmwatcher.ini

主备2节点文件内容要相同。

[GRP_RW]

DW_TYPE    = GLOBAL  #全局守护类型

DW_MODE    = AUTO #AUTO自动切换模式

DW_ERROR_TIME     = 30  #远程守护进程故障认定时间

INST_RECOVER_TIME  = 60         #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME   = 20  #本地实例故障认定时间

INST_OGUID         = 453331 #守护系统唯一 OGUID

INST_INI           =  /dmdata/DAMENG/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART  = 1  #打开实例的自动启动功能

INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/DmServiceDM start #服务方式启动

mount 方式启动数据库实例

使用 dmdba 用户,执行以下命令(主备库都执行):

dmserver /dmdata/DAMENG/dm.ini mount

在新的终端使用 disql 工具连接数据库:

disql SYSDBA/SYSDBA

主备库都修改 oguid,执行以下命令:

sp_set_oguid(453331);

主库21修改数据库模式为 primary,执行以下命令:

alter database primary;

备库222修改数据库模式为 standby,执行以下命令:

alter database standby;

启动守护进程(使用dmdba 用户,主备库都执行

dmwatcher /dmdata/DAMENG/dmwatcher.ini

3.8注册服务

root 用户,到数据库安装目录script/root

cd /home/dmdba/dmdbms/script/root

注册守护进程服务(主备库都执行)。

./dm_service_installer.sh -t dmwatcher -p DM -watcher_ini /dmdata/DAMENG/dmwatcher.ini

注册数据库实例服务(主备库都执行):

./dm_service_installer.sh -t dmserver -p DM -dm_ini /dmdata/DAMENG/dm.ini

以服务方式启动

执行以下命令,启动数据库实例:

 systemctl start DmServiceDM

执行以下命令,启动守护进程:

 systemctl start DmWatcherServiceDM

3.9验证主备集群同步状态

监视器查看主备集群状态

在监视器主机配置监视器,执行以下命令:

vi /dmdata/DAMENG/dmmonitor.ini

添加以下内容:

MON_DW_Confirm    =1  #0普通监视器模式
MON_LOG_PATH    = /home/dmdba/dmdbms/dmonilog  #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT  = 1024  #不限定日志文件总占用空间
[GRP_RW]
 MON_INST_OGUID    = 453331 #GRP_RW 的唯一 OGUID
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOSTPORT 对应 dmmal.ini 中的 MAL_DW_PORT
 MON_DW_IP     =192.168.145.21:7436
 MON_DW_IP     = 192.168.145.22:7436

执行以下命令,启动监视器:

dmmonitor /dmdata/DAMENG/dmmonitor.ini

输入 show 命令查看集群状态:

其中守护进程状态 WSTATUS OPEN,实例状态 ISTATUS OPEN,归档类型 RTYPE TIMELY,归档状态 RSTAT VALID

4 在搭建好的主备集群上增加一台异步备机

4.1登录主库,执行联机备份

备份路径要有足够空间:

backup database backupset '/dmdata/bakful';

将备份文件复制到新增备机节点

scp -r /dmdata/bakful dmdba@192.168.145.23:/dmdata

4.2 登录新备机使用dmrman还原

dmrman use_ap=2

RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/bakful';

RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/bakful';

RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;

4.3配置新备库

配置dm.ini

dm.ini 文件修改如下

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

配置 dmmal.ini

拷贝一份原系统 dmmal.ini 文件,并加上自己一项,最终配置如下

MAL_CHECK_INTERVAL       = 5      #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL   = 15  #判定 MAL 链路断开的时间

[MAL_INST1]

MAL_INST_NAME    =DM21 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST              =192.168.145.21#MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST    =192.168.145.21#实例的对外服务 IP 地址

MAL_INST_PORT    = 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT      = 7436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT    = 7536 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME       = DM22

MAL_HOST                 = 192.168.145.22

MAL_PORT                 =  7336

MAL_INST_HOST       = 192.168.145.22

MAL_INST_PORT       = 5236

MAL_DW_PORT         = 7436

MAL_INST_DW_PORT    = 7536

[MAL_INST3]

MAL_INST_NAME = DM23 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST = 192.168.145.23 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.145.23 #实例的对外服务 IP 地址

MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

 MAL_DW_PORT = 7436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT = 7536#实例监听守护进程 TCP 连接的端口

配置 dmarch.ini

异步备机只需配置本地归档

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dmdata/arch #本地归档文件路径

ARCH_FILE_SIZE = 2048 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 10000 #单位 Mb,0 表示无限制,范围 1024~4294967294M

 

配置 dmwatcher.ini

异步备库不具备故障自动切换等功能,只需配置本地守护进程和手工切换

[GRP_RW]

DW_TYPE    = LOCAL  #本地守护类型

DW_MODE    = MANUAL #AUTO自动切换模式

DW_ERROR_TIME     = 30  #远程守护进程故障认定时间

INST_RECOVER_TIME  = 60         #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME   = 20  #本地实例故障认定时间

INST_OGUID         = 453331 #守护系统唯一 OGUID 值

INST_INI           =  /dmdata/DAMENG/dm.ini #dm.ini 配置文件路径

INST_AUTO_RESTART  = 1  #打开实例的自动启动功能

INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/DmServiceDM start #服务方式启动

启动新备库

Mount方式启动备库

./dmserver /dmdata/DAMENG/dm.ini mount

启动命令行工具 DIsql,设置 OGUID和修改数据库为 Standby 模式

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);

4.4 原主备集群配置

修改监视器 dmmonitor.ini配置

配置如下

MON_DW_Confirm    =1  #0普通监视器模式

MON_LOG_PATH    = /dmdata/dmonilog  #监视器日志文件存放路径

MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE   = 200 #每个日志文件最大 32 MB

MON_LOG_SPACE_LIMIT  = 1024  #不限定日志文件总占用空间

[GRP_RW]

 MON_INST_OGUID    = 453331 #组 GRP_RW 的唯一 OGUID 值

#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP     =192.168.145.21:7436

MON_DW_IP     = 192.168.145.22:7436

MON_DW_IP     = 192.168.145.23:7436

配置 dmmal.ini

原系统中每个实例都执行,每个实例内容都要一样

MAL_CHECK_INTERVAL       = 5      #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL   = 15  #判定 MAL 链路断开的时间

[MAL_INST1]

MAL_INST_NAME    =DM21 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST              =192.168.145.21#MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST    =192.168.145.21#实例的对外服务 IP 地址

MAL_INST_PORT    = 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT      = 7436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT    = 7536 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME       = DM22

MAL_HOST                 = 192.168.145.22

MAL_PORT                 =  7336

MAL_INST_HOST       = 192.168.145.22

MAL_INST_PORT       = 5236

MAL_DW_PORT         = 7436

MAL_INST_DW_PORT    = 7536

[MAL_INST3]

MAL_INST_NAME = DM23 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST = 192.168.145.23 #MAL 系统监听 TCP 连接的 IP 地址

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

MAL_INST_HOST = 192.168.145.23 #实例的对外服务 IP 地址

MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致

 MAL_DW_PORT = 7436 #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT = 7536#实例监听守护进程 TCP 连接的端口

配置文件 dm.ini,打开定时器配置,其他配置不变

原集群主备库都执行

TIMER_INI = 1

配置dmarch.ini

在原有归档配置基础上,增加异步归档的配置项,主备都添加

[ARCHIVE_ASYNC]

ARCH_TYPE = ASYNC #异步归档类型

ARCH_DEST = DM23 #异步归档目标实例名

ARCH_TIMER_NAME = RT_TIMER #定时器名称,和 dmtimer.ini 中的名称一致

配置定时器 dmtimer.ini用于定时触发实例发送归档日志到异步备库

原主备库都配置(这里设置每隔二分钟定时发生一次)

[RT_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致

TYPE = 2

FREQ_MONTH_WEEK_INTERVAL = 1

FREQ_SUB_INTERVAL = 1

FREQ_MINUTE_INTERVAL = 2

START_TIME = 00:00:00

END_TIME = 00:00:00

DURING_START_DATE = 2022-12-13 16:15:09

DURING_END_DATE = 9999-12-31 23:59:59

NO_END_DATE_FLAG = 1

DESCRIBE = RT TIMER

IS_VALID = 1

 

4.5 配置普通监视器

监视器服务器配置一个普通监视器,以便观察集群状态,是否正常

 Vi /dmdata/DAMENG/dmmonitorp.ini

MON_DW_Confirm    =0  #0普通监视器模式

MON_LOG_PATH    = /dmdata/dmonilog  #监视器日志文件存放路径

MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE   = 200 #每个日志文件最大 32 MB

MON_LOG_SPACE_LIMIT  = 1024  #不限定日志文件总占用空间

[GRP_RW]

 MON_INST_OGUID    = 453331 #组 GRP_RW 的唯一 OGUID 值

#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置

#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT

 MON_DW_IP     =192.168.145.21:7436

 MON_DW_IP     = 192.168.145.22:7436

MON_DW_IP     = 192.168.145.23:7436

 

4.6 重启原主备守护进程及实例,让配置文件生效,

重启确认监视器服务

systemctl restart DmMonitorServiceDM

打开普通监视器,观察集群状态,重启成功之后,才能依次执行下一步重启操作

原集群主备及新增的备机守护进程都启动(先备后主,异步备机创建服务参考3.8步骤

systemctl restart DmWatcherServiceDM

原集群主备实例服务都重启(先主后备)

systemctl restart DmServiceDM

正常之后,进行数据同步测试

 

posted @ 2022-12-16 23:38  fangzpa  阅读(62)  评论(0编辑  收藏  举报