2节点主备集群部署
一、部署前规划
1、路径规划
数据库安装路径 | /home/dmdba/dmdbms/ |
数据库实例安装路径 | /home/dmdba/dmdbms/data/DAMENG |
归档路径 | /home/dmdba/dmdbms/data/DAMENG/arch |
2、实例规划
机器名 | 实例名 | IP地址 | 端口号 | 页大小 | 大小写敏感 |
Dameng01(主) | DM01 | 192.168.138.128 | 5236 | 16 | 否 |
Dameng02(备) | DM02 | 192.168.138.130 | 5236 | 16 | 否 |
二、搭建集群
搭建之前请关闭防火墙!
systemctl stop firewalld
systemctl disable firewalld
1、创建实例并初始化
1.1、在两台机器的dmdba用户下初始化实例
cd /home/dmdba/dmdbms/bin
[dmdba@Dameng bin]$ ./dminit PAGE_SIZE=16 CASE_SENSITIVE=0 PATH=/home/dmdba/dmdbms/data
1.2、开关库一次
创建完成后务必初始化一次,不然在备份时会报错
./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini
2、在主库上脱机备份
注意:冷备一定要脱机。
- 使用dmrman从主库备份
./dmrman ctlstmt="backup database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' full to backup20201216 backupset '/home/dmdba/dmdbms/data/bak/backup20201216'"
- 将备份发送到备库
scp -r /home/dmdba/dmdbms/data/bak/backup20201216/ dmdba@192.168.138.130:/home/dmdba/dmdbms/data/bak
3、在备库上还原、恢复、更新
注意脱机操作!
还原:
./dmrman ctlstmt="restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/bak/'"
恢复:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/bak/'"
更新:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic"
4、配置主库DM01(192.168.138.128)
4.1、dm.ini文件
这里没有涉及到具体的业务,所以不进行调优具体参数如下
INSTANCE_NAME=DM01
COMPATIBLE_MODE=2
ARCH_INI=1
MAL_INI=1
ALTER_MODE_STATUS= 0
ENABLE_OFFLINE_TS = 2
4.2、配置dmmal.ini文件
在dm.ini所在的目录下自己创建,两边都是一样的。
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DM01
MAL_HOST = 192.168.138.128
MAL_PORT = 61141
MAL_INST_HOST = 192.168.138.128
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DM02
MAL_HOST = 192.168.138.130
MAL_PORT = 61142
MAL_INST_HOST = 192.168.138.130
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
4.3、配置dmarch.ini文件
在dm.ini所在的目录下自己创建。
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM02 #写出了本机之外的实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/arch # 本地的存档地址
ARCH_FILE_SIZE = 512
ARCH_SPACE_LIMIT = 0
4.4、配置dmwatcher.ini文件
两边是一样的。
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
4.5、发送配置给备库
将dmmal.ini/dmarch.ini/dmwatcher.ini发送给备库
scp ./dmarch.ini dmmal.ini dmwatcher.ini dmdba@192.168.138.130:/home/dmdba/dmdbms/data/DAMENG/
5、配置备库参数
5.1、dm.ini
INSTANCE_NAME=DM02
COMPATIBLE_MODE=2
ARCH_INI=1
MAL_INI=1
ALTER_MODE_STATUS= 0
ENABLE_OFFLINE_TS = 2
5.2、dmarch.ini
把将ARCH_DEST参数修改为除自己外的库,这里只有两个库,所以改成主库的名字就行了
6、配置OGUID
主库:
- 以mount模式开启主库
./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount
- 登录disql,修改OGUID
sp_set_oguid(453331);
- 修改数据库模式
alter database primary;
备库:
- 以mount模式开启备库
./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount
#登录disql,修改OGUID
sp_set_oguid(453331);
- 修改数据库模式
alter database standby;
7、注册守护进程服务
在root账户下对主备进行dmwatcher服务注册,注册服务要在root目录下。
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini -p DM
8、配置监听器
路径配在备库的/home/dmdba/dmdbms/data/dmmonitor.ini
MON_DW_Confirm = 1 #0是非确认监视器(不可以自动切换主备)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 = 453331
MON_DW_IP = 192.168.138.128:52141
MON_DW_IP = 192.168.138.130:52142
注意MON_DW_IP最后配的不是实例的端口,而是前面dmmal.ini配置的MAL_DW_PORT端口!!此前就是配错了而导致反复报错。
9、启动主备机的守护进程
主机:
./dmwatcher /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
备机:
./dmwatcher /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
或者主备库以服务方式启动 :
[dmdba@Dameng bin]$ ./DmWatcherServiceDM start
[dmdba@Dameng bin]$ ./DmWatcherServiceDM start
10、启动监听器
[dmbda@Dameng bin]$ ./dmmonitor /home/dmdba/dmdbms/data/dmmonitor.ini
输入show
11、注册服务
为了使实例可以开机自起所以可以注册监视器和实例的服务
主库:
监视器:
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini -p DM
实例DM01
./dm_service_installer.sh -t dmserver -m mount -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -p DMSERVER01
备库:
./dm_service_installer.sh -t dmserver -m mount -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -p DMSERVER02
12、关闭和开启
如果你要关机之前一定要先把集群按照争取顺序关掉!
关闭顺序:监视器à备库守护进程à主库守护进程à主库实例à备库实例
按顺序关闭以后重启两台机器,会自动开启集群:
开启顺序:
主库实例 à主库守护进程 à备库实例 à备库守护进程 à监视器
三、测试
建用户,插入测试数据,物理备份,删除数据, 通过备份还原集群。
1、创建一个用户
create USER dmuser IDENTIFIED BY user12345678;
grant DBA TO dmuser;//将dba角色授予dmuser用户
2、插入测试数据
使用dmuser登录,并创建一张测试表并插入数据
create table test(uid int ,uname VARCHAR(20));
insert into test VALUES(1,'hyf');
commit;
在主备库上确认是否都同步。
3、备份
--先关闭集群
--在主库上进行物理备份
./dmrman ctlstmt="backup database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' full to fullbackup20201216 backupset '/home/dmdba/dmdbms/data/bak/fullbackup20201216'"
将主库上的备份发送到备库
[dmdba@Dameng bin]$ scp -r /home/dmdba/dmdbms/data/bak/fullbackup20201216/ dmdba@192.168.138.130:/home/dmdba/dmdbms/data/bak/
4、删除数据
开启集群,在主库登录dmuser用户,将先前建的测试表格删除
在备库登录dmuser用户,查询test表
可以看到test表已经被删除。
4、还原集群
按顺序关闭集群。
在主库的bin目录下执行以下语句还原
还原:
./dmrman ctlstmt="restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/bak/fullbackup20201216'"
恢复:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/bak/fullbackup20201216'"
更新:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic"
在备库的bin目录下执行以下语句还原
还原:
./dmrman ctlstmt="restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/bak/fullbackup20201216'"
恢复:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/bak/fullbackup20201216'"
更新:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic"
5、查看是否还原
再次启动集群
可以看到重启后的主备状态正常。
在主备库上登录dmuser用户查看先前删除的test表格
主库:
备库:
可以看到主备库数据一致,都能查看到之前删除的test表格。