一、概述

本文档介绍基于数据守护的机房实时主备+同城实时备库+异地异步备库的两地三中心灾备方案详细的部署过程。

二、主备集群部署过程(自动切换)

2.1 部署规划

IP规划:

主机名

服务ip

心跳ip

数据库名

实例名

备注

SH01

192.168.3.51

192.168.4.51

dmdb

dw1

节点一

SH02

192.168.3.52

192.168.4.52

dmdb

dw2

节点二

SH03

192.168.3.53

192.168.4.53

dmdb

dw3

节点三

SH04

192.168.3.54

192.168.4.54

dmdb

dw4

节点四

SH05

192.168.3.55

192.168.4.55

 

 

确认监视器

端口规划:

实例名

实例端口

MAL 系统监听 TCP 连接的端口

实例本地的守护进程监听

实例监听守护进程

SH01

5236

7336

7436

7536

SH02

5236

7336

7436

7536

SH03

5236

7336

7436

7536

SH04

5236

7336

7436

7536

目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)

数据库软件安装目录

/home/dmdba/dmdbms

实例安装目录

/dmdata/

归档日志存放目录

/dmdata/arch

备份文件存放目录

/dmdata/dmbak/

2.2 数据库软件安装

2.2.1 操作系统配置

2.2.1.1 修改内核参数

vi /etc/sysctl.conf

添加以下内容:

fs.file-max = 6815744

fs.aio-max-nr = 1048576

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

vm.dirty_ratio = 80

vm.dirty_expire_centisecs = 500

vm.dirty_writeback_centisecs = 100

kernel.core_pattern = /dmdata/core.%p

vm.swappiness=10

vm.dirty_background_ratio = 0

vm.min_free_kbytes = 2097152

使参数生效,执行以下命令:

sysctl -p

2.2.1.2 新建数据库管理用户和组

groupadd dinstall -g 2001

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

passwd dmdba

2.2.1.3 修改用户资源限制

vi /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

2.2.1.4 修改用户环境变量

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

2.2.2 数据库软件安装

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

mkdir -p /dmiso

mount -o loop dm8_20200930_x86_rh6_64_ent_8.1.1.134.iso /mnt

2.使用dmdba用户安装软件

su - dmdba

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

cd /mnt

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

./DMInstall.bin -i

选择安装程序的语言

提示是否安装

选择时区,21 即东 8 区。

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

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

确认安装

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

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

2.3 主备集群配置

2.3.1 初始化数据库实例

所有服务器完成数据库初始化。

执行以下命令:

dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=256 db_name=dmdb instance_name=dmdb 

以主机SH01为主库,启动实例:

dmserver /dmdata/dmdb/dm.ini

出现system is ready后输入exit停止数据库。

2.3.2 脱机备份数据库

在主机SH01上以dmdba用户启动dmrman工具:

dmrman use_ap=2

执行backup全库:

backup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull';

2.3.3 备份还原数据库

将备份的文件/home/dmdba/bakfull拷贝到备库服务器上。

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

dmrman

进入dmrman工具交互界面

执行restore:

restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';

完成后执行recover:

recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';

最后执行recover update db_magic:

recover database '/dmdata/dmdb/dm.ini'  update db_magic;

2.3.4 修改dm.ini参数

4个节点都要修改dm.ini文件,使用dmdba用户执行以下命令:

vi /dmdata/dmdb/dm.ini

主库SH01上修改以下参数值:

INSTANCE_NAME = dw1

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

TIMER_INI = 1

备库SH02上修改以下参数值:

INSTANCE_NAME = dw2

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

TIMER_INI = 1

主库SH03上修改以下参数值:

INSTANCE_NAME = dw3

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

TIMER_INI = 1

备库SH04上修改以下参数值:

INSTANCE_NAME = dw4

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

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

4个节点都要在实例目录下新建文件dmarch.ini文件,使用dmdba用户执行以下命令:

vi /dmdata/dmdb/dmarch.ini

主库SH01上添加以下内容:

[ARCHIVE_REALTIME1]  

ARCH_TYPE     = REALTIME  

ARCH_DEST     = dw2

[ARCHIVE_REALTIME2]  

ARCH_TYPE     = REALTIME  

ARCH_DEST     = dw3

[ARCHIVE_ASYNC]

ARCH_TYPE  = ASYNC

ARCH_DEST  = dw4

ARCH_TIMER_NAME = RT_TIMER    

[ARCHIVE_LOCAL1]

ARCH_TYPE     = LOCAL

ARCH_DEST     = /dmdata/arch    

ARCH_FILE_SIZE    = 256

ARCH_SPACE_LIMIT  = 102400

备库SH02上添加以下内容:

[ARCHIVE_REALTIME1]  

ARCH_TYPE     = REALTIME  

ARCH_DEST     = dw1

[ARCHIVE_REALTIME2]  

ARCH_TYPE     = REALTIME  

ARCH_DEST     = dw3

[ARCHIVE_ASYNC]

ARCH_TYPE  = ASYNC

ARCH_DEST  = dw4

ARCH_TIMER_NAME = RT_TIMER  

[ARCHIVE_LOCAL1]

ARCH_TYPE     = LOCAL

ARCH_DEST     = /dmdata/arch  

ARCH_FILE_SIZE    = 256

ARCH_SPACE_LIMIT  = 102400    

备库SH03上添加以下内容:

[ARCHIVE_REALTIME1]  

ARCH_TYPE     = REALTIME  

ARCH_DEST     = dw1

[ARCHIVE_REALTIME2]  

ARCH_TYPE     = REALTIME  

ARCH_DEST     = dw2

[ARCHIVE_ASYNC]

ARCH_TYPE  = ASYNC

ARCH_DEST  = dw4

ARCH_TIMER_NAME = RT_TIMER  

[ARCHIVE_LOCAL1]

ARCH_TYPE     = LOCAL

ARCH_DEST     = /dmdata/arch  

ARCH_FILE_SIZE    = 256

ARCH_SPACE_LIMIT  = 102400

备库SH04上添加以下内容:

[ARCHIVE_LOCAL1]

ARCH_TYPE     = LOCAL

ARCH_DEST     = /dmdata/arch  

ARCH_FILE_SIZE    = 256

ARCH_SPACE_LIMIT  = 10240

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

4个节点都要在实例目录下新建文件dmmal.ini,执行以下命令。

vi /dmdata/dmdb/dmmal.ini

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

MAL_CHECK_INTERVAL   = 5  

MAL_CONN_FAIL_INTERVAL  = 15  

[MAL_INST1]

  MAL_INST_NAME = dw1

  MAL_HOST     = 192.168.4.51  

  MAL_PORT     = 7336

  MAL_INST_HOST   = 192.168.3.51  

  MAL_INST_PORT   = 5236

  MAL_DW_PORT   = 7436

  MAL_INST_DW_PORT = 7536

[MAL_INST2]

  MAL_INST_NAME = dw2

  MAL_HOST      = 192.168.4.52  

  MAL_PORT          = 7336

  MAL_INST_HOST         = 192.168.3.52   

  MAL_INST_PORT         = 5236

  MAL_DW_PORT  = 7436

  MAL_INST_DW_PORT = 7536

[MAL_INST3]

  MAL_INST_NAME = dw3

  MAL_HOST      = 192.168.4.53  

  MAL_PORT          = 7336

  MAL_INST_HOST         = 192.168.3.53   

  MAL_INST_PORT         = 5236

  MAL_DW_PORT  = 7436

  MAL_INST_DW_PORT = 7536

[MAL_INST4]

  MAL_INST_NAME = dw4

  MAL_HOST      = 192.168.4.54  

  MAL_PORT          = 7336

  MAL_INST_HOST         = 192.168.3.54   

  MAL_INST_PORT         = 5236

  MAL_DW_PORT  = 7436

  MAL_INST_DW_PORT = 7536

2.3.7 配置定时器配置文件dmtimer.ini

除异步备库不需要创建dmtimer.ini文件,其他主备库节点都需要在实例目录下新建文件dmtimer.ini,执行以下命令:

vi /dmdata/dmdb/dmtimer.ini

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

添加以下内容:

[RT_TIMER]

TYPE = 2

FREQ_MONTH_WEEK_INTERVAL = 1

FREQ_SUB_INTERVAL = 0

FREQ_MINUTE_INTERVAL = 10

START_TIME = 00:00:00

END_TIME = 23:59:59

DURING_START_DATE = 2021-11-01 00:00:00

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

NO_END_DATE_FLAG = 1

DESCRIBE = RT TIMER

IS_VALID = 1

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

4个节点都要在实例目录下新建文件dmwatcher.ini,执行以下命令:

vi /dmdata/dmdb/dmwatcher.ini

主库SH01上添加以下内容:

[GRP_DW]

DW_TYPE    = GLOBAL  

DW_MODE    = AUTO

DW_ERROR_TIME     = 30  

INST_RECOVER_TIME  = 60         

INST_ERROR_TIME   = 20  

INST_OGUID         = 453331

INST_INI           = /dmdata/dmdb/dm.ini

INST_AUTO_RESTART  = 1   

INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver

备库SH02上添加以下内容:

[GRP_DW]

DW_TYPE    = GLOBAL  

DW_MODE    = AUTO

DW_ERROR_TIME     = 30  

INST_RECOVER_TIME  = 60         

INST_ERROR_TIME   = 20  

INST_OGUID         = 453331

INST_INI           = /dmdata/dmdb/dm.ini

INST_AUTO_RESTART  = 1   

INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver

备库SH03上添加以下内容:

[GRP_DW]

DW_TYPE    = GLOBAL  

DW_MODE    = AUTO

DW_ERROR_TIME     = 30  

INST_RECOVER_TIME  = 60         

INST_ERROR_TIME   = 20  

INST_OGUID         = 453331

INST_INI           = /dmdata/dmdb/dm.ini

INST_AUTO_RESTART  = 1   

INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver

异步备库SH04上添加如下内容:

[GRP_DW]

DW_TYPE = LOCAL

DW_MODE = MANUAL

DW_ERROR_TIME = 30

INST_RECOVER_TIME  = 60

INST_ERROR_TIME = 20

INST_OGUID = 453331

INST_INI           = /dmdata/dmdb/dm.ini

INST_AUTO_RESTART  = 1   

INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver

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

dmserver /dmdata/dmdb/dm.ini mount

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

disql SYSDBA/'"Hn@dameng123"'

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

sp_set_oguid(453331);

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

alter database primary;

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

alter database standby;

启动守护进程

dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

dmwatcher /dmdata/dmdb/dmwatcher.ini

守护进程启动后,会将

2.3.9 配置sql日志

所有节点修改sqllog.ini

vi /dmdata/dmdb/sqllog.ini

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

BUF_TOTAL_SIZE = 10240

BUF_SIZE = 1024

BUF_KEEP_CNT = 6

[SLOG_ALL]

FILE_PATH = ../log

PART_STOR = 1

SWITCH_MODE = 2

SWITCH_LIMIT = 512

ASYNC_FLUSH = 1

FILE_NUM = 5

ITEMS = 0

SQL_TRACE_MASK = 2:3:25

MIN_EXEC_TIME = 1500

USER_MODE = 0

USERS =

2.3.10 注册服务

使用

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

./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini /dmdata/dmdb/dmwatcher.ini

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

./dm_service_installer.sh -t dmserver -p dw -dm_ini /dmdata/dmdb/dm.ini

以服务方式启动

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

systemctl start DmServicedw

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

systemctl start DmWatcherServicedw

2.3.11 验证主备集群同步状态

监视器查看主备集群状态。

集群任意节点,配置普通监视器配置文件dmmonitor.ini,执行以下命令:

vi /dmdata/dmdb/dmmonitor.ini

添加以下内容:

MON_DW_CONFIRM    = 0

MON_LOG_PATH    = /home/dmdba/dmdbms/log

MON_LOG_INTERVAL  = 60

MON_LOG_FILE_SIZE   = 200

MON_LOG_SPACE_LIMIT  = 1024

[GRP_DW]

MON_INST_OGUID    = 453331

MON_DW_IP     = 192.168.4.51:7436

MON_DW_IP     = 192.168.4.52:7436

MON_DW_IP     = 192.168.4.53:7436

MON_DW_IP     = 192.168.4.54:7436

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

dmmonitor /dmdata/dmdb/dmmonitor.ini

输入

其中守护进程状态

disql 客户端验证

使用

disql SYSDBA/'"Hn@dameng123"'

SQL 提示符下执行以下命令:

create table test(id int);

insert into test values (1);

commit;

使用

disql SYSDBA/'"Hn@dameng123"'

SQL 提示符下执行以下命令:

select * from test;

查看数据是否正常同步。

2.3.12 参数优化

集群部署完成后,需要优化

重启集群(参数修改后需要重启集群):

读写分离集群重启:

关闭主库守护进程:systemctl stop DmWatcherServicedw

关闭备库守护进程:systemctl stop DmWatcherServicedw

关闭主库实例:systemctl stop DmServicedw

关闭备库实例:systemctl stop DmServicedw

启动主库实例:systemctl start DmServicedw

启动备库实例:systemctl start DmServicedw

启动主库守护进程:systemctl start DmWatcherServicedw

启动备库守护进程:systemctl start DmWatcherServicedw

2.3.13 配置确认监视器

新建确认监视器配置文件dmmonitor.ini,执行以下命令:

vi /dmdata/dmdb/dmmonitor.ini

添加以下内容:

MON_DW_CONFIRM    = 1

MON_LOG_PATH    = /home/dmdba/dmdbms/log

MON_LOG_INTERVAL  = 60

MON_LOG_FILE_SIZE   = 200

MON_LOG_SPACE_LIMIT  = 1024

[GRP_DW]

MON_INST_OGUID    = 453331

MON_DW_IP     = 192.168.4.51:7436

MON_DW_IP     = 192.168.4.52:7436

MON_DW_IP     = 192.168.4.53:7436

MON_DW_IP     = 192.168.4.54:7436

注册监视器服务:

使用

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

./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /dmdata/dmdb/dmmonitor.ini

以服务方式启动监视器服务

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

systemctl start DmMonitorServiceconfirm