DM实时主备系统部署

DM实时主备系统部署

​ 本次记录我进行DM数据库的实时主备系统搭建部署,相关的操作和我遇到的问题也记录下来了。

前期准备

服务器准备

  • 设置参数
    • 需要三台服务器(即三个虚拟机),一台主库服务器,一台备库服务器,一台监视器服务器

    • 主备服务器需要安装有DM数据库,并且配备两张网卡。监视器服务器需要安装DM数据库,且与主备内网互联

    • 三台虚拟机的参数如下(三个的配置是一样的):

      设备摘要
      内存1GB
      处理器1
      硬盘(SCSI)30GB
      CD/DVD (IDE)自动检测
      网络适配器NAT
      网络适配器 2自定义(VMnet2)
  • 系统版本
    • 本次部署使用的是CentOS 7-x86_64-2207
    • DM数据库使用的是DM8

服务器规划

  • IP规划
    主机名公网IP内网IP实例名
    DM_zhuku192.168.19.13010.10.10.1DM_zhuku
    DM_beiku192.168.19.13110.10.10.2DM_beiku
    DM_jianshiqi192.168.19.13210.10.10.3DM_jianshiqi
    • 主机名和实例名一样,在操作时更好识别
    • 内网IP用于监视器监控主库和备库
  • 端口规划
    端口作用
    5236数据库实例监听端口
    61141MAL系统监听 TCP连接的端口
    52141实例对应的守护进程监听 TCP 端口
    33141实例监听守护进程TCP连接端口
    • 这些在后面配置文件中都会涉及,只是目前展示出来
  • 数据库安装准备
    • 就是DM数据库安装那一套,这里就只是简单说一下就好,具体情况就不做演示

      • 创建新的组和用户,专用于DM数据库

        groupadd dinstall 	##新增组dinstall
        useradd  -g dinstall -m -d /home/dmdba -s /bin/bash  dmdba  ##新增用户dmdba在组dinstall下
        passwd dmdba	##设置密码
        
      • 修改资源限制

        vim /etc/security/limits.conf
        
        • 在文章最后面插入以下内容

          dmdba soft core unlimited
          dmdba hard core unlimited
          dmdba soft nofile 65536
          dmdba hard nofile 65536
          dmdba soft nproc  65536
          dmdba hard nproc  65536
          dmdba soft stack  65536
          dmdba hard stack  65536
          
          
      • 修改环境变量

        vi /home/dmdba/.bash_profile
        
        • 打开后,在最后面插入以下内容

          export DM_HOME=/home/dmdba/dmdbms
          export PATH=$PATH:$DM_HOME/bin
          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
          
      • 使用命令让环境变量生效

        source /home/dmdba/.bash_profile
        

    数据库安装这里就不再讲解

  • 初始化实例

    ​ 这里我就直接使用图形化界面来操作(方便)

    • 创建初始化实例,在tool目录下,使用下面命令打开图形化操作界面

      ./dbca.sh
      
      • 这里如果报错,很可能是图像化命令未开启,需要重新开启

        在这里插入图片描述

    • 打开后,默认选项不动即可

      在这里插入图片描述

    • 选择数据库存放位置,这里我选择的是之前创建的目录

      在这里插入图片描述

    • 填写数据库名称和实例名称,数据库名:dmrw,实例名称:DM_beiku(自己注意实例名)

      在这里插入图片描述

    • 数据库参数配置,主要是页大小、簇大小和字符集选择(这里页大小使用32K)

      在这里插入图片描述

    • 之后就直接全点【下一步】就好,不用管口令和示例。根据提示在终端完成命令就好

备份还原

主库脱机备份

  • 查看主库DMAP服务是否启动

    ps -ef|grep dmap
    

    在这里插入图片描述

  • 这里没启动,需要先启动DMAP服务,到bin目录下执行命令

    ./DmAPService start
    

    在这里插入图片描述

    • 有【OK】显示,就算是启动成功了
  • 关闭数据库,这里指的是关闭当前实例

    [root@localhost tool]# ./dmservice.sh 
    

    在这里插入图片描述

  • 使用dmrman工具进行主库脱机备份,在bin目录下面

    ./dmrman
    
  • 执行 backup 全库

    backup database '/home/dmdba/dmdata/dmrw/dm.ini' backupset '/home/dmdba/dmbak/bakfull'; 
    

    在这里插入图片描述

备库还原

  • 将主库的备份拷贝到备库中,在主库下执行命令

    scp -r /home/dmdba/dmbak/bakfull 192.168.19.131:/home/dmdba/dmbak
    

    在这里插入图片描述

    在这里插入图片描述

    • 这里拷贝成功的话,会在备库生成一个dmbak目录,里面有bakfull.bak和bakfull.meta两个文件
  • 关闭数据库,启用图形化工具CONSOLE还原备库

    • 点击配置,选择还原的目录位置

      在这里插入图片描述

    • 选择完后点击【获取备份】,可以得到对应的备份情况

      在这里插入图片描述

    • 选择好还原的文件,点击【还原】进入还原界面,编辑存放备份的位置(这里我就直接默认)

      在这里插入图片描述

    • 点击【确定】进行还原,最后出现提示【还原成功】则说明成功

      在这里插入图片描述

添加配置文件

配置实例配置文件dm.ini

  • 使用dmdba用户,打开dmrw库的dm.ini配置文件

    vi /home/dmdba/dmdata/dmrw/dm.ini
    
  • 主库修改参数值
    INSTANCE_NAME = DM_zhuku
    MAL_INI = 1
    ARCH_INI = 1
    ALTER_MODE_STATUS = 0
    ENABLE_OFFLINE_TS = 2
    
    • 这里使用图形化工具CONSOLE更方便,选择【服务器配置】,选择需要修改的实例,点击进入,就可以搜索

      在这里插入图片描述

      • 这里就不过多展示内容,自行查找修改对应数值即可
  • 备库修改参数值
    INSTANCE_NAME = DM_beiku
    MAL_INI = 1
    ARCH_INI = 1
    ALTER_MODE_STATUS = 0
    ENABLE_OFFLINE_TS = 2
    
    • 同样的操作(注意,这里是备库,别搞混了)

      在这里插入图片描述

      • 一定记得下面要保存

配置归档配置文件dmarch.ini

  • 使用dmdba用户,打开dmarch.ini配置文件

    vi /home/dmdba/dmdata/dmrw/dmarch.ini
    
  • 主库添加内容
    [ARCHIVE_REALTIME]
    ARCH_TYPE     = REALTIME  #实时归档类型
    ARCH_DEST     = DM_beiku   #实时归档目标实例名(主库侧填写备库实例名)
    [ARCHIVE_LOCAL1]
    ARCH_TYPE     = LOCAL #本地归档类型
    ARCH_DEST     = /home/dmdba/dmarch/arch #本地归档文件存放路径
    ARCH_FILE_SIZE    = 128 #单位 MB,本地单个归档文件最大值
    ARCH_SPACE_LIMIT  = 10240    #单位 MB,0 表示无限制,范围 1024~4294967294 MB
    

    在这里插入图片描述

  • 备库添加内容
    [ARCHIVE_REALTIME]
    ARCH_TYPE     = REALTIME  #实时归档类型
    ARCH_DEST     = DM_zhuku  #实时归档目标实例名(备库侧填写主库实例名)
    [ARCHIVE_LOCAL1]
    ARCH_TYPE     = LOCAL  #本地归档类型
    ARCH_DEST     = /home/dmdba/dmarch/arch  #本地归档文件存放路径
    ARCH_FILE_SIZE    = 128  #单位 MB,本地单个归档文件最大值
    ARCH_SPACE_LIMIT  = 10240  #单位 MB,0 表示无限制,范围 1024~4294967294 MB
    

    在这里插入图片描述

配置MAL系统配置文件dmmal.ini

  • 使用dmdba用户,打开dmmal.ini配置文件

    vi /home/dmdba/dmdata/dmrw/dmmal.ini
    
  • 主备库添加的内容一样,如下:

    MAL_CHECK_INTERVAL   = 5  # MAL链路检测时间间隔
    MAL_CONN_FAIL_INTERVAL  = 5  # 判定 MAL链路断开的时间
    [MAL_INST1]
      MAL_INST_NAME = DM_zhuku  #与 dm.ini中的 INSTANCE_NAME一致
      MAL_HOST     = 10.10.10.1  # MAL系统监听 TCP 内部网络 IP
      MAL_PORT     = 61141  # MAL系统监听 TCP连接的端口
      MAL_INST_HOST   = 192.168.19.130  #实例的对外服务 IP地址
      MAL_INST_PORT   = 5236  #与 dm.ini中的 PORT_NUM一致
      MAL_DW_PORT   = 52141  #实例对应的守护进程监听 TCP 端口
      MAL_INST_DW_PORT = 33141
    [MAL_INST2]
      MAL_INST_NAME = DM_beiku  #与 dm.ini中的 INSTANCE_NAME 一致
      MAL_HOST      = 10.10.10.2  # MAL系统监听 TCP内部网络 IP
      MAL_PORT          = 61141  # MAL系统监听 TCP连接的端口
      MAL_INST_HOST         = 192.168.19.131  #实例的对外服务 IP地址
      MAL_INST_PORT         = 5236  #与 dm.ini中的 PORT_NUM一致
      MAL_DW_PORT  = 52141  #实例对应的守护进程监听 TCP端口
      MAL_INST_DW_PORT = 33141
    

    在这里插入图片描述

    注意:

    主库和备库的内容是一样的!

配置守护进程文件dmwatcher.ini

  • 在dmdba用户下,编辑dmwatcher.ini配置文件

    vi /home/dmdba/dmdata/dmrw/dmwatcher.ini
    
  • 主备库添加同样的内容,如下:

    [GRP_RW] 
    DW_TYPE    = GLOBAL  #全局守护类型
    DW_MODE    = AUTO  #自动切换模式
    DW_ERROR_TIME     = 10  #远程守护进程故障认定时间
    INST_RECOVER_TIME  = 60  #主库守护进程启动恢复的间隔时间
    INST_ERROR_TIME   = 10  #本地实例故障认定时间
    INST_OGUID         = 453331  #守护系统唯一 OGUID 值
    INST_INI           = /home/dmdba/dmdata/dmrw/dm.ini  # dm.ini 配置文件路径
    INST_AUTO_RESTART  = 1   #打开实例的自动启动功能
    INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动
    

    在这里插入图片描述

启动主备集群

​ 这里提供两种方法,选择一个就好。

前台启动方法

  • 启动数据库实例

    • 在dmdba用户下,在bin目录下执行命令,主备库都要执行

      ./dmserver /home/dmdba/dmdata/dmrw/dm.ini mount
      

      在这里插入图片描述

      • 出现SYSTEM IS READY就说明成功
    • 另外开一个终端,使用DIsql工具连接数据库,修改oguid

      ./disql SYSDBA/SYSDBA
      # 连接成功后修改 oguid
      sp_set_oguid(453331);
      

      在这里插入图片描述

    • 主库数据库模式修改为primary模式

      alter database primary;
      

      在这里插入图片描述

    • 备库数据库模式修改为standby模式

      alter database standby;
      
      • 我这里备库在启动数据库实例开头一步报错了

        在这里插入图片描述

        • 查了一下,是还原的时候没有更新Magic,所以需要使用CONSOLE工具更新
      • 还是前面的操作,到获取备份,选中备份,点击右边【更新Magic】

        在这里插入图片描述

      • 点击【确定】,更新

        在这里插入图片描述

      • 此时再使用./dmserver /home/dmdba/dmdata/dmrw/dm.ini mount,即可成功

        在这里插入图片描述

  • 启动守护进程

    • 在dmdba用户下,在bin目录下执行命令,主备库都要执行

      ./dmwatcher /home/dmdba/dmdata/dmrw/dmwatcher.ini
      

      在这里插入图片描述

      • 出现这个提示说明启动成功
      • 守护进程启动后,会将Mount的实例Open
      • 这里我是用的另一个终端开启的,前面启动数据库实例的没关
  • 启动确认监视器

    • 注意事项:

      • 守护进程配置为自动切换时,必须配置确认监视器
      • 监视器服务器需要安装有DM数据库,并且与主备库服务器能够互ping
    • 在监视器服务器上,编辑dmmonitor_auto.ini配置文件

      vi /home/dmdba/dmdata/dmmonitor_auto.ini
      
    • 添加内容:

      MON_DW_CONFIRM    = 1   #确认监视器模式
      MON_LOG_PATH    = /home/dmdba/dmdata/dmmonitor_auto/log #监视器日志文件存放路径
      MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件
      MON_LOG_FILE_SIZE   = 32 #每个日志文件最大 32 MB
      MON_LOG_SPACE_LIMIT  = 0  #不限定日志文件总占用空间
      [GRP_RW] 
       MON_INST_OGUID    = 453331 #组 GRP_RW 的唯一 OGUID 值
      #以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
      #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
       MON_DW_IP     = 10.10.10.1:52141
       MON_DW_IP     = 10.10.10.2:52141
      

      在这里插入图片描述

    • 在dmdba用户下,到数据库bin目录下执行命令

      ./dmmonitor /home/dmdba/dmdata/dmmonitor_auto.ini
      

      在这里插入图片描述

      • 输入show命令查看集群状态

        在这里插入图片描述

        • 出现问题了
      • 这里发现问题,三台服务器的防火墙没关(我承认,我前期工作没处理好)

      • 解决方法:关闭防火墙

        [root@localhost ~]# systemctl stop firewalld
        [root@localhost ~]# systemctl disable firewalld
        

        在这里插入图片描述

      • 成功获取主备库的守护进程信息

        在这里插入图片描述

        • 需要关注的数值:
          • 守护进程状态 WSTATUSOPEN
          • 实例状态 ISTATUSOPEN
          • 归档类型 RTYPEREALTIME
          • 归档状态 RSTATVALID

服务方式启动

  • 注册服务

    使用root用户,在数据库安装目录下的script/root下

    • 注册守护进程服务(主备库都要执行)

      ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /home/dmdba/dmdata/dmrw/dmwatcher.ini
      

      在这里插入图片描述

    • 注册数据库实例服务(主备库都要执行)

      ./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /home/dmdba/dmdata/dmrw/dm.ini
      

      在这里插入图片描述

    • 注册监视器服务(只用在监视器服务器上执行即可)

      ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /home/dmdba/dmdata/dmmonitor_auto.ini
      

      在这里插入图片描述

  • 启动服务
    • 启动数据库实例(主备库都要)

      systemctl start DmServicedmrw
      
    • 启动守护进程(主备库都要)

      systemctl start DmWatcherServicedmrw
      

      在这里插入图片描述

    • 启动监视器(只用监视器服务器)

      systemctl start DmMonitorServiceconfirm
      

      在这里插入图片描述

    至此,主备集群和监控器就启动好了

重启顺序

  • 主备集群重启有顺序要求
    • 关闭主备集群:
      1. 关闭监视器:systemctl stop DmMonitorServiceconfirm
      2. 关闭主库守护进程:systemctl stop DmWatcherServicedmrw
      3. 关闭备库守护进程:systemctl stop DmWatcherServicedmrw
      4. 关闭主库实例:systemctl stop DmServicedmrw
      5. 关闭备库实例:systemctl stop DmServicedmrw
    • 启动主备集群:
      1. 启动主库实例:systemctl start DmServicedmrw
      2. 启动备库实例:systemctl start DmServicedmrw
      3. 启动主库守护进程:systemctl start DmWatcherServicedmrw
      4. 启动备库守护进程:systemctl start DmWatcherServicedmrw
      5. 启动监视器:systemctl start DmMonitorServiceconfirm
  • 顺序:
    • 启动:主备库实例–>主备库守护进程–>监视器
    • 关闭:监视器–>主备库守护进程–>主备库实例
      • 启动和关闭的顺序一定是相反的!!

验证集群状态

监视器查看

  • 配置监视器

    • 集群中任意节点都可以配置,一般在备库,配置普通监视器配置文件

      vi /home/dmdba/dmdata/dmmonitor_manual.ini
      
    • 添加以下内容:

      MON_DW_Confirm    = 0   #普通监视器模式
      MON_LOG_PATH    = /home/dmdba/dmdata/dmmonitor_manual/log  #监视器日志文件存放路径
      MON_LOG_INTERVAL  = 60  #每隔 60 s 定时记录系统信息到日志文件
      MON_LOG_FILE_SIZE   = 32  #每个日志文件最大 32 MB
      MON_LOG_SPACE_LIMIT  = 0  #不限定日志文件总占用空间
      [GRP_RW] 
       MON_INST_OGUID    = 453331  #组 GRP_RW 的唯一 OGUID 值
      #以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
      #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
       MON_DW_IP     = 10.10.10.1:52141
       MON_DW_IP     = 10.10.10.2:52141
      

      在这里插入图片描述

    • 启动监视器

      ./dmmonitor /home/dmdba/dmdata/dmmonitor_manual.ini
      

      在这里插入图片描述

    • 输入show命令查看集群状况

      在这里插入图片描述

      • 仍然还是关注框里面的参数
    • 遇到问题(这里算是一个预见吧)

      在这里插入图片描述

      • 这里就是没有对应的文件或者文件里面没有内容(如果按照上面的步骤走是不会出现的,我是第二天搞的时候用错系统了)
      • 这里这个要看好自己配置的普通监视器在哪个服务器上,选择好服务就不会出现了

DIsql客户端查看

  • 使用DIsql登录主库,创建测试表,插入数据

    ./disql SYSDBA/SYSDBA@192.168.19.130:5236
    
    • SQL提示符下执行下面命令创建表和插入数据

      create table test(id int);
      insert into test values (1);
      commit;
      

      在这里插入图片描述

  • 使用DIsql登录备库,查询测试表验证

    ./disql SYSDBA/SYSDBA@192.168.19.131:5236
    
    • SQL提示符下执行查询命令

      select * from test;
      

      在这里插入图片描述

      • 这里备库查询到了数据,表明主库创建的表和插入的数据同步到了备库,主备集群搭建成功
  • 如果主库插入/更改数据后未提交(commit),在备库查询时,仍然会是未插入/更改之前的数据

    • 实验,这里主库插入数据,但不提交

      insert into test values (2);
      

      在这里插入图片描述

      • 主库已经插入数据,但未提交
    • 查看备库数据

      在这里插入图片描述

      • 确实没有
    • 主库commit提交后再查看备库

      在这里插入图片描述

      • 很好,备库也是成功更新数据了

总结

  • 本次是进行的实时主备的搭建部署,从前期的准备到后面的实际操作都有讲到,自己也在操作中遇到了问题,同样记录下来了,后面遇到了还能翻出来看看。
  • 实时主备主要目的是保障数据库可用性,提高数据安全性。实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。

参考

  • [概述 | 达梦技术文档 (dameng.com)](https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-overview.html#2.4.1 主要功能)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值