搭建一个读写分离集群(一主一从)
目录
1、规划
数据库安装路径 |
/home/dmdba/dmdbms/ |
数据库实例安装路径 |
/home/dmdba/dmdbms/data/DAMENG(主库和备库都是) |
归档路径 |
/home/dmdba/dmdbms/data/DAMENG/arch |
实例名 |
DAMENG(主) DAMENG01(备) |
端口号 |
5236 |
注意:
●使用root用户创建了目录的话要授权给dmdba用户
chown -R dmdba:dinstall /目录
●在此之前确保实例服务都已注册完成,都能正常开启和关闭
2、配置分离集群
2.1、在主库备份
使用dmarman命令
./dmrman ctlstmt=" backup database '/ home/dmdba/dmdbms/data/DAMENG/dm.ini' full to backup20201124 backupset '/home/dmdba/dmdbms/data/ backup20201124'"
注意:一定要脱机备份
2.2、在备库上还原、恢复、更新
还原:
./dmrman ctlstmt="restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/ backup20201124'"
恢复:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdbms/data/ backup20201124'"
更新db_magic:
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic"
这里的操作也要是脱机操作!
推荐还是使用命令行进行备份和还原。因为我先前用了图形界面,最后没有集群成功
2.3、配置主库DMSERVER
2.3.1、dm.ini文件
这里没有涉及到具体的业务,所以不进行调优具体参数如下
INSTANCE_NAME=DMSERVER
COMPATIBLE_MODE=2
ARCH_INI=1
MAL_INI=1
ALTER_MODE_STATUS= 0
ENABLE_OFFLINE_TS = 2
2.3.2、dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMSERVER
MAL_HOST = 192.168.138.199
MAL_PORT = 61141
MAL_INST_HOST = 192.168.138.199
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSERVER01
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
2.3.3、dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMSERVER01 #写出了本机之外的实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/arch # 本地的存档地址
ARCH_FILE_SIZE = 512
ARCH_SPACE_LIMIT = 10240
ARCH_WAIT_APPLY=1
2.3.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
这个文件两边都是一样的不需要改变
2.3.5、发送配置文件到备库
scp dm.ini dmmal.ini dmarch.ini dmwatcher.ini dmdba@192.168.138.130:/home/dmdba/dmdbms/data/DAMENG
2.3.6配置主库OGUID
#以mount模式开启主库
./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount
#登录disql,修改OGUID
sp_set_oguid(453331);
#修改数据库模式
alter database primary;
2.4、配置备库
2.4.1、dm.ini
把拷贝过来的dm.ini文件中的INSTANCE_NAM改为备库的实例名
注意:如果两边的dm.ini目录不一样的话那么要更改备库dm.ini里面的路径
2.4.2、dmarch.ini
把将ARCH_DEST参数修改为除自己外的库,这里只有两个库,所以改成主库的名字就行了
2.4.3、配置OGUID
#以mount模式开启备库
./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount
#登录disql,修改OGUID
sp_set_oguid(453331);
#修改数据库模式
alter database standby;
2.5、注册服务
为了使集群能够开机自起,所以我们需要注册服务
在root账户下面的/home/dmdba/dmdbms/script/root下
#在主备库注册实例服务
./dm_service_installer.sh -t dmserver -m mount -dm_ini /home/dmdba/dmdbms/ /data/DAMENG/dm.ini -p DM
#在主备库注册watcher服务
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini -p DM
2.6、配置手动监听器
路径配在备库的/home/dmdba/dmdbms/data/dmmomitor.ini
MON_DW_Confirm = 0 #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.199:52141
MON_DW_IP = 192.168.138.130:52142
注意MON_DW_IP最后配的不是实例的端口,而是前面dmmal.ini配置的MAL_DW_PORT端口!!此前就是配错了而导致反复报错。
2.7、启动主备库的守护进程
./dmwatcher /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini
2.8、启动监视器
./dmwatcher /home/dmdba/data/dmmonitor.ini
show命令
exit退出。
注意:配置完如果想看各个服务有没有开启,不要迷信dmservice图形化工具,那个有时候不准,应该使用ps -ef|grep dmserver
3、关闭集群
如果你要关机之前一定要先把集群按照争取顺序关掉!
关闭顺序:备库守护进程-主库守护进程-主库实例-备库实例
备库守护进程:
[dmbda@Dameng bin]$ ./DmWatcherServiceDM stop
主库守护进程:
[dmdba@DaMeng bin]$ ./DmWatcherServiceDM stop
主库实例:
[dmdba@DaMeng bin]$ ./DmServiceDMSERVER stop
备库实例:
[dmbda@Dameng bin]$ ./DmServiceDMSERVER01 stop
注册过实例服务和守护进程服务的话 ,开机的时候集群会自启的
4、测试集群
1)完成读写分离集群的部署,并测试建表和插入数据备机是否能及时同步,并可查询到数据。
2)制造主机故障,测试备机可接管并持续提供服务。
主机关机,备机自动接管
3)恢复故障主机,将故障主机加入集群。
4)手动切换主备集群,恢复原主备集群的位置。
此时两台机器的主备位置是调换过来的,所以要进行主备切换
switchover GRP1.DMSERVER #组名+实例名 [monitor] 2020-11-26 10:47:03: 开始切换实例DMSERVER [monitor] 2020-11-26 10:47:03: 通知守护进程DMSERVER01切换SWITCHOVER状态 [monitor] 2020-11-26 10:47:03: 守护进程(DMSERVER01)状态切换 [OPEN-->SWITCHOVER] [monitor] 2020-11-26 10:47:03: 切换守护进程DMSERVER01为SWITCHOVER状态成功 [monitor] 2020-11-26 10:47:03: 通知守护进程DMSERVER切换SWITCHOVER状态 [monitor] 2020-11-26 10:47:03: 守护进程(DMSERVER)状态切换 [OPEN-->SWITCHOVER] [monitor] 2020-11-26 10:47:03: 切换守护进程DMSERVER为SWITCHOVER状态成功 [monitor] 2020-11-26 10:47:03: 实例DMSERVER01开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句 [monitor] 2020-11-26 10:47:03: 实例DMSERVER01执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功 [monitor] 2020-11-26 10:47:03: 实例DMSERVER开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句 [monitor] 2020-11-26 10:47:03: 实例DMSERVER执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功 [monitor] 2020-11-26 10:47:03: 实例DMSERVER01开始执行ALTER DATABASE MOUNT语句 [monitor] 2020-11-26 10:47:05: 实例DMSERVER01执行ALTER DATABASE MOUNT语句成功 [monitor] 2020-11-26 10:47:05: 实例DMSERVER开始执行ALTER DATABASE MOUNT语句 [monitor] 2020-11-26 10:47:07: 实例DMSERVER执行ALTER DATABASE MOUNT语句成功 [monitor] 2020-11-26 10:47:07: 实例DMSERVER01开始执行ALTER DATABASE STANDBY语句 [monitor] 2020-11-26 10:47:07: 实例DMSERVER01执行ALTER DATABASE STANDBY语句成功 [monitor] 2020-11-26 10:47:07: 实例DMSERVER开始执行ALTER DATABASE PRIMARY语句 [monitor] 2020-11-26 10:47:07: 实例DMSERVER执行ALTER DATABASE PRIMARY语句成功 [monitor] 2020-11-26 10:47:07: 通知实例DMSERVER修改所有归档状态无效 [monitor] 2020-11-26 10:47:07: 修改所有实例归档为无效状态成功 [monitor] 2020-11-26 10:47:07: 实例DMSERVER01开始执行ALTER DATABASE OPEN FORCE语句 [monitor] 2020-11-26 10:47:07: 实例DMSERVER01执行ALTER DATABASE OPEN FORCE语句成功 [monitor] 2020-11-26 10:47:07: 实例DMSERVER开始执行ALTER DATABASE OPEN FORCE语句 [monitor] 2020-11-26 10:47:10: 实例DMSERVER执行ALTER DATABASE OPEN FORCE语句成功 [monitor] 2020-11-26 10:47:10: 实例DMSERVER01开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句 [monitor] 2020-11-26 10:47:10: 实例DMSERVER01执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功 [monitor] 2020-11-26 10:47:10: 实例DMSERVER开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句 [monitor] 2020-11-26 10:47:10: 实例DMSERVER执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功 [monitor] 2020-11-26 10:47:10: 通知守护进程DMSERVER01切换OPEN状态 [monitor] 2020-11-26 10:47:10: 守护进程(DMSERVER01)状态切换 [SWITCHOVER-->OPEN] [monitor] 2020-11-26 10:47:10: 切换守护进程DMSERVER01为OPEN状态成功 [monitor] 2020-11-26 10:47:10: 通知守护进程DMSERVER切换OPEN状态 [monitor] 2020-11-26 10:47:10: 守护进程(DMSERVER)状态切换 [SWITCHOVER-->OPEN] [monitor] 2020-11-26 10:47:11: 切换守护进程DMSERVER为OPEN状态成功 [monitor] 2020-11-26 10:47:11: 通知组(GRP1)的守护进程执行清理操作 [monitor] 2020-11-26 10:47:11: 清理守护进程(DMSERVER)请求成功 [monitor] 2020-11-26 10:47:11: 清理守护进程(DMSERVER01)请求成功 [monitor] 2020-11-26 10:47:11: 实例DMSERVER切换成功 |
可以看到切换成功。