一、 环境准备
1、 集群规划
2、 端口规划
3、 环境配置
(1) 关闭并禁止防火墙自启动
systemctl stop firewalled.service
systemctl disabled firewalled.service
(2) 修改文件限制
vim /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65535
dmdba hard nproc 65535
dmdba soft stack 8192
dmdba hard stack 8192
(3) 修改主机名
vim /etc/sysconfig/network //修改network文件
NETWORKING=yes
HOSTNAME=dmserver01
vim /etc/hostname //修改hostname文件
dmserver01
(4) 创建数据库安装用户组
groupadd dminstall
useradd -g dminstall -d /home/dmdba -s /bin/bash dmdba
(5) 测试IP地址连通性
使用ping命令,测试192段、10段IP地址的联通性,确保不会因为网络问题影响到部署。
4、 数据库安装
参看数据库安装文档,在此不再展开赘述。
二、 环境搭建
1、 数据准备
(1)在dmserver01、02、03上初始化数据库实例。
./dminit PATH=/home/dmdba/data PAGE_SIZE=16 CASE_SENSITIVE=Y EXTENT_SIZE=64 UNICODE_FLAG=1 PAGE_CHECK=0 SYSDBA_PWD=SYSDBA123 SYSAUDITOR_PWD=SYSAUDITOR123
(2)通过脱机备份还原的方式将主库数据同步到备库
●正常关闭主库
●进行脱机备份
./dmrman CTLSTMT="BACKUP DATABASE '/home/dmdba/data/DAMENG/dm.ini' FULL TO BACKUP_FILE BACKUPSET '/home/dmdba/data/BACKUP_FILE'"
注:主库初始化以后,需要启动一次实例,停止以后再进行备份;
在使用dmrman工具进行备份之前,必须先启动DmAPService;
在开始备份之前,需要开启归档或配置归档文件;
●将备份在主库/home/dmdba/data/BACKUP_FILE下的文件拷贝到备库。
scp -r BACKUP_FILE/ dmdba@192.168.152.131:/home/dmdba/data
●执行脱机还原操作
./dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/BACKUP_FILE'"
./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/BACKUP_FILE'"
./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
2、 配置主库GRP1_RWW_01
(1) 修改dm.ini文件
根据规划的实例名,实例端口等内容,修改dm.ini文件,具体如下:
INSTANCE_NAME = GRP1_RWW_01 #实例名
PORT_NUM = 52010 #实例端口号
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0 #不允许手动修改数据库模式
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 60
(2) 创建dmmal.ini文件
配置 MAL系统,各主备库的 dmmal.ini 配置必须完全一致。
(3) 修改dmarch.ini文件
(4) 创建dmwatcher.ini文件
(5) 使用mount方式启动数据库实例
./dmserver /home/dmdba/data/DAMENG/dm.ini mount
(6) 设置实例OGUID
./disql SYSDBA/SYSDBA123@127.0.0.1:52010
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SP_SET_OGUID(45678);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
(7) 修改数据库模式
./disql SYSDBA/SYSDBA123@127.0.0.1:52010
alter database primary
3、 配置备库GRP1_RWW_02
(1) 将主库GRP1_RWW_01的以下三个文件传输到GRP_RWW_02上/home/dmdba/data/DAMENG路径下。
dmmal.ini、dmarch.ini、dmwatcher.ini
(2) 修改dm.ini文件。
INSTANCE_NAME = GRP1_RWW_02 #实例名
PORT_NUM = 52011 #实例端口号
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0 #不允许手动修改数据库模式
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 60
(3) 修改dmarch.ini文件(因为故障处理中,02可能会被切换为新主库)
(4) 使用mount方式启动数据库
./dmserver /home/dmdba/data/DAMENG/dm.ini mount
(5) 设置实例OGUID
./disql SYSDBA/SYSDBA123@127.0.0.1:52011
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SP_SET_OGUID(45678);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
(6) 修改数据库模式
./disql SYSDBA/SYSDBA123@127.0.0.1:52011
alter database standby
4、 配置备库GRP1_RWW_03
(1)将主库GRP1_RWW_01的以下三个文件传输到GRP_RWW_03上/home/dmdba/data/DAMENG路径下。
dmmal.ini、dmarch.ini、dmwatcher.ini
(2)修改dm.ini文件
INSTANCE_NAME = GRP1_RWW_03 #实例名
PORT_NUM = 52012 #实例端口号
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0 #不允许手动修改数据库模式
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 60
(3)修改dmarch.ini文件(因为故障处理中,03可能会被切换为新主库)
(4)使用mount方式启动数据库
./dmserver /home/dmdba/data/DAMENG/dm.ini mount
(6) 设置OGUID
./disql SYSDBA/SYSDBA123@127.0.0.1:52012
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
SP_SET_OGUID(45678);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
(7) 修改数据库模式
./disql SYSDBA/SYSDBA123@127.0.0.1:52012
alter database standby
5、 配置确认监视器(dmserver04服务器)
(1) 创建dmmonitor.ini文件
MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID= 45678 #全局守护ID
MON_DW_IP = 10.0.1.100:55010 #MAL_HOST:MAL_DW_PORT
MON_DW_IP = 10.0.1.101:55011
MON_DW_IP = 10.0.1.102:55012
(2) 启动守护进程
在GRP1_RWW_01、GRP1_RWW_02、GRP1_RWW_03三个数据库上启动数据库的守护进程,执行:
./dmwatcher /home/dmdba/data/DAMENG/dmwatcher.ini
(3) 启动确认监视器
当主备库的守护进程均启动完成后,便可启动确认监视器,执行:
./dmmonitor /home/dmdba/data/dmmonitor.ini
监视器启动后,执行show命令,可以查看到主备库的信息,如下:
三、 验证
1、 一主两备的情况下,验证主库可读可写,备库仅可读不可写。
(1) 主库可读可写验证(使用select和insert进行验证)
可以看到,主库读写均正常。
(2) 备库可读不可写验证(使用select和insert进行验证)
可以看到,备库当前仅可以读,不可写,主库执行的内容正常同步。
综上验证,可以看到,读写分离部署完成以后,主库可以读可以写入数据,备库只能读数据不能写入数据。
2、 模拟主库故障,实例停止,检查主备是否能自动完成切换。
(1) 故障模拟前的主备状态如下(通过监视器查看)
(2) 将主库数据库实例停止(模拟主库故障)
手动停止主库实例,查看监视器内对新主库的选取过程。
可以看到,手动将主库停止以后,监视器会自动重新选取02作为新的主库,承接业务数据的写入,整个切换过程较快。
在本次部署中,对故障的模拟仅是手动停止主库,当02作为主库以后,守护进程会重新拉起了原来的主库01,不过此时01只能作为备库加入集群中。
至此,DM8数据守护与读写分离的搭建便完成。
PS:在模拟故障前,需要先将守护进程dmwatcher停止,再停止数据库实例。如果不停止守护进程,则即使停了实例,切换也不会自动进行,因为如果守护进程在,发现数据库实例停止后,守护进程会自动拉起实例,也就无法模拟实例故障了。