读写分离集群(一主一从)

搭建一个读写分离集群(一主一从)

目录

1、规划    1

2、配置分离集群    1

2.1、在主库备份    1

2.2、在备库上还原、恢复、更新    2

2.3、配置主库DMSERVER    2

2.4、配置备库    4

2.5、注册服务    5

2.6、配置手动监听器    5

2.7、启动主备库的守护进程    5

2.8、启动监视器    5

3、关闭集群    6

4、测试集群    7

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切换成功

可以看到切换成功。

原文地址:https://www.cnblogs.com/hong-yf/p/14762845.html