• 2节点主备群部署


     

    2节点主备集群部署

     

    一、部署前规划    2

    1、路径规划    2

    2、实例规划    2

    二、搭建集群    2

    1、创建实例并初始化    2

    1.1、在两台机器的dmdba用户下初始化实例    2

    1.2、开关库一次    2

    2、在主库上脱机备份    3

    3、在备库上还原、恢复、更新    3

    4、配置主库DM01(192.168.138.128)    3

    4.1、dm.ini文件    4

    4.2、配置dmmal.ini文件    4

    4.3、配置dmarch.ini文件    4

    4.4、配置dmwatcher.ini文件    4

    4.5、发送配置给备库    4

    5、配置备库参数    4

    5.1、dm.ini    4

    5.2、dmarch.ini    4

    6、配置OGUID    4

    7、注册守护进程服务    5

    8、配置监听器    5

    9、启动主备机的守护进程    6

    10、启动监听器    6

    11、注册服务    7

    12、关闭和开启    7

    三、测试    7

    1、创建一个用户    7

    2、插入测试数据    8

    3、备份    8

    4、删除数据    8

    4、还原集群    9

    5、查看是否还原    9

     

    一、部署前规划

    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表格。

  • 相关阅读:
    让Windows Server 2008 + IIS 7+ ASP.NET 支持10万个同时请求
    C#多线程锁定全局变量
    ASP.NET 防止F5刷新页面按钮重复提交
    子线程调用窗体控件
    asp.net 转成XML后在SQL操作XML的值
    Sql中字符串的循环截取(用循环实现输入键串能输出值串)
    大数据量分页存储过程
    函数相关概念,及练习
    js循环(while循环,do while循环,for循环)相关知识点及练习
    parseInt()和Number()的应用区别
  • 原文地址:https://www.cnblogs.com/hong-yf/p/14762889.html
Copyright © 2020-2023  润新知