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


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

    目录

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

    可以看到切换成功。

  • 相关阅读:
    Hash碰撞
    数字证书编码ASN.1
    Python数据挖掘银行分控模型的建立
    Linux Docker 安装 Jenkins
    docker 常用命令
    公网 IP 绑定免费域名
    linux下docker和主机之间的文件拷贝
    Jenkins 各种自动项目触发方式
    TCP协议详解1 NK
    ubuntu下C++环境安装 NK
  • 原文地址:https://www.cnblogs.com/hong-yf/p/14762845.html
Copyright © 2020-2023  润新知