一、概述
本文档介绍基于数据守护的机房实时主备+同城实时备库+异地异步备库的两地三中心灾备方案详细的部署过程。
二、主备集群部署过程(自动切换)
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