达梦数据库-实时主备集群部署详解(附图文)

06-01 1909阅读

目录

一、、主备集群作用:

二、达梦集群各个组件作用::

1、MAL通信系统:主备库之间的专用通信链路

2、DMServer:提供达梦服务

3、dmwatcher服务(守护进程):

4、监视器(dmmonitor):

三、达梦数据库主备集群逻辑:

四、数据库软件安装

五、主备集群配置

1、初始化实例

2、脱机备份数据库

2.1、执行backup全库:

2.2备份还原备库

3、修改dm.ini参数

4、配置归档配置文件 dmarch.ini

5、配置MAL配置文件 dmmal.ini

6、配置守护进程配置文件

7、注册服务

8、mount状态启动集群

9、配置监视器

10、注册监视器服务(建议在备库上执行)

11、配置sql日志

12、验证集群同步状态

六、验证集群主备切换测试

七、手动切换主备库

八、客户端连接集群

一、、主备集群作用:

主备集群为最基础的高可用架构,只有主库对外提供服务(读写),备库实时同步数据(只读),如果主库宕机的话,备库自动接管

二、达梦集群各个组件作用::

1、MAL通信系统:主备库之间的专用通信链路

  • 用于传输事物日志,确保日志传输的实时性和网络的可靠性  。传输的日志记录主库的所有数据修改操作,通过MAL实时传输到备库,备库解析并应用到主库传输日志,保证数据一致性,而持久化日志用于备库延迟同步或数据恢复。
  • 心跳检测通过MAL定期发送心跳检测,检测节点存活状态,超时未响应触法备库升级主(依赖dmwatcher)

    部分参数如下:

    MAL_DW_PORT=7436(MAL 监听端口)
    INST_PORT=5236 (数据库实例通信端口)

    2、DMServer:提供达梦服务

    3、dmwatcher服务(守护进程):

    • 监控主备实例的运行状态(如进程存活、网络连通性)
    • 触法自动故障切换(当主库故障时,提供备库为新主库)
    • 控制集群模式(自动或手动切换)

      4、监视器(dmmonitor):

      • 提供集群状态的可视化监控(如主备切换、日志同步进去)
      • 支持手动执行主备切换、故障恢复等操作

        三、达梦数据库主备集群逻辑:

        1. 主库接收写请求,生成Redo log。
        2. MAL系统将日志实时传输到备库。
        3. 备库通过Redo apply应用日志,保持数据同步
        4. dmwatcher监控主备状态,异常时触法切换
        5. dmmonitor提供监控和管理入口

        注意:守护进程配置为自动切换时,必须配置确认监视器。如果在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)

        ---------------------------------------------------------------------------------------------------------------------------------

        主机规划:

        主机名服务器IP心跳IP数据库名实例名备注
        AAAA192.168.5.136192.168.5.136DAMENGdmrw1
        BBBB192.168.5.137192.168.5.137DAMENGdmrw1主机BBBB部署达梦监视器

        本地存储LVM磁盘规划:(按实际需求调整磁盘空间)

        安装目录/用途

        /data/dmserver/app(数据库安装盘)

        /data/dmserver/data(数据磁盘)

        /data/dmserver/arch(归档日志存放目录)

        /data/dmserver/backup  (备份目录)

        四、数据库软件安装

        该步骤与单机版一致,详情见达梦数据库无图形化安装部署

        五、主备集群配置

        1、初始化实例

        2个节点完成实例初始化,达梦集群之间实例名需要不同

        分别执行以下命令:

        主库:

        cd /data/dmserver/app/bin

        ./dminit path=/data/dmserver/data/ CHARSET=1 CASE_SENSITIVE=N EXTENT_SIZE=16 PAGE_SIZE=32 SYSDBA_PWD=Passw0rd@DM SYSAUDITOR_PWD=Passw0rd@DM INSTANCE_NAME=dmrw1

        备库:

        ./dminit path=/data/dmserver/data/ CHARSET=1 CASE_SENSITIVE=N EXTENT_SIZE=16 PAGE_SIZE=32 SYSDBA_PWD=Passw0rd@DM SYSAUDITOR_PWD=Passw0rd@DM INSTANCE_NAME=dmrw2

        注册服务:

        注册服务需使用 root 用户进行注册。使用 root 用户进入数据库安装目录的 /script/root 下,如下所示:

        [root@AAAA bin]# cd /data/dmserver/app/script/root/

        注册服务,如下所示:

        [root@BBBB root]# ./dm_service_installer.sh -t dmserver -dm_ini /data/dmserver/data/DAMENG/dm.ini -p DMSERVER
        Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service → /usr/lib/systemd/system/DmServiceDMSERVER.service.
        创建服务(DmServiceDMSERVER)完成
        

        注意:dm.in文件位置可以通过find查找位置

        2、脱机备份数据库

        所有节点都要停止数据库

        systemctl stop DmServiceDMSERVER.service

        在主机AAAA上执行以下命令查询dmap服务已启动:

        ps -ef | grep dmap

        达梦数据库-实时主备集群部署详解(附图文)

        若未启动,则先启动DMAP服务,dmdba到安装目录的bin/service_template目录下执行以下命令

        [dmdba@AAAA ~]# cd /data/dmserver/app/bin/service_template/
        [dmdba@AAAA service_template]# /data/dmserver/app/bin/service_template/DmAPService start
        Starting DmAPService: 上一次登录: 日 3月 16 14:15:46 CST 2025 pts/0 上
                    [ OK ]

        注意:从节点也要执行上面的步骤,确保DMAP服务启动

        2.1、执行backup全库:

        主库上执行,备份文件备份到/data/dmserver/backup目录

        [dmdba@AAAA ~]$ cd /data/dmserver/app/bin
        [dmdba@AAAA bin]$ 
        [dmdba@AAAA bin]$ ./dmrman 
        dmrman V8
        RMAN> backup database '/data/dmserver/data/DAMENG/dm.ini' backupset '/data/dmserver/backup';
        backup database '/data/dmserver/data/DAMENG/dm.ini' backupset '/data/dmserver/backup';
        file dm.key not found, use default license!
        Processing backupset /data/dmserver/backup
        [Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00]                                 
        backup successfully!
        time used: 00:00:05.309
        RMAN> 
        

        将备份的文件/data/dmserver/backup拷贝到备库服务器上。

        [dmdba@AAAA bin]$ scp -r /data/dmserver/backup/* 192.168.5.137:/data/dmserver/backup
        dmdba@192.168.5.137's password: 
        backup.bak                         100%   28MB 282.2MB/s   00:00    
        backup.meta                        100%  110KB  31.5MB/s   00:00   

        2.2备份还原备库

        在备库上执行

        在主机BBBB上,使用dmrman工具还原备份文件

        restore database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';

        完成后执行recover(图中报错显示为备份期间没有日志产生,可忽略):

        recover database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';

        最后执行recover update db_magic。

        RMAN> recover database '/data/dmserver/data/DAMENG/dm.ini' update db_magic;

        3、修改dm.ini参数

        有节点都要修改

        主库修改以下参数:

        vim /data/dmserver/data/DAMENG/dm.ini

        INSTANCE_NAME = DMRW1
        MAL_INI = 1
        ARCH_INI = 1
        ALTER_MODE_STATUS = 0
        ENABLE_OFFLINE_TS = 2
        

        备库修改以下参数:

        INSTANCE_NAME = DMRW2
        MAL_INI = 1
        ARCH_INI = 1
        ALTER_MODE_STATUS = 0
        ENABLE_OFFLINE_TS = 2

        4、配置归档配置文件 dmarch.ini

        在实例目录下/data/dmserver/data/DAMENG/新建文件dmarch.ini

        主库:

        [dmdba@AAAA~]$ cat /data/dmserver/data/DAMENG/dmarch.ini

        [ARCHIVE_REALTIME1]
        ARCH_TYPE     = REALTIME #实时归档类型 
        ARCH_DEST     = DMRW2    #实时归档目标实例名(主库则填写备库实例名)
        [ARCHIVE_LOCAL1]
        ARCH_TYPE     = LOCAL    #本地归档类型
        ARCH_DEST     = /data/dmserver/arch   #本地归档存放路径
        ARCH_FILE_SIZE    = 2048     #单位MB,本地单个归档文件最大值
        ARCH_SPACE_LIMIT  = 102400   #单位MB。0标识无限制,范围1024~4294967294MB

        备库:

        [dmdba@BBBB ~]$ cat /data/dmserver/data/DAMENG/dmarch.ini

        [ARCHIVE_REALTIME1]
        ARCH_TYPE     = REALTIME #实时归档类型 
        ARCH_DEST     = DMRW1    #实时归档目标实例名(主库则填写备库实例名)
        [ARCHIVE_LOCAL1]
        ARCH_TYPE     = LOCAL    #本地归档类型
        ARCH_DEST     = /data/dmserver/arch   #本地归档存放路径
        ARCH_FILE_SIZE    = 2048     #单位MB,本地单个归档文件最大值
        ARCH_SPACE_LIMIT  = 102400   #单位MB。0标识无限制,范围1024~4294967294MB

        5、配置MAL配置文件 dmmal.ini

        在实例目录下/data/dmserver/data/DAMENG/新建文件dmmal.ini

        主备库2个节点文件内容要相同。

        [dmdba@AAAA bin]$ cat /data/dmserver/data/DAMENG/dmmal.ini

        MAL_CHECK_INTERVAL   = 5                     #MAL 链路检测时间间隔
        MAL_CONN_FAIL_INTERVAL  = 15                 #判定 MAL 链路断开的时间
        [MAL_INST1]
          MAL_INST_NAME = DMRW1                      #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
          MAL_HOST     = 192.168.5.136               #MAL 系统监听 TCP 连接的 IP 地址
          MAL_PORT     = 7336                        #MAL 系统监听 TCP 连接的端口
          MAL_INST_HOST   = 192.168.5.136            #实例的对外服务 IP 地址
          MAL_INST_PORT   = 5236                     #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
          MAL_DW_PORT   = 7436                       #实例对应的守护进程监听 TCP 连接的端口
          MAL_INST_DW_PORT = 7536
        [MAL_INST2]
          MAL_INST_NAME = DMRW2
          MAL_HOST      = 192.168.5.137  
          MAL_PORT          = 7336
          MAL_INST_HOST         = 192.168.5.137  
          MAL_INST_PORT         = 5236 
          MAL_DW_PORT  = 7436
          MAL_INST_DW_PORT = 7536

        6、配置守护进程配置文件

        主备库dmwatcher.ini内容要相同

        cat /data/dmserver/data/DAMENG/dmwatcher.ini

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

        7、注册服务

        以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。

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

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

        ./dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /data/dmserver/data/DAMENG/dmwatcher.ini 
        

        注册之后先不启动,启动服务不以root用户,而要用dmdba用户,启动脚本在v$DM_HOME/bin目录下(也就是软件安装的bin目录),执行 ll | grep Dm可以看到。

        8、mount状态启动集群

        以 mount 方式启动数据库实例

        使用 dmdba 用户,执行以下命令(主备库都执行)

        [dmdba@AAAA bin]$ ./dmserver /data/dmserver/data/DAMENG/dm.ini mount

        达梦数据库-实时主备集群部署详解(附图文)

        主备库都要是ready状态,表示成功

        在新的终端使用 disql 工具连接数据库:

        [dmdba@AAAA ~]$ cd /data/dmserver/app/bin
        [dmdba@AAAA bin]$ ./disql SYSDBA/'"Passw0rd@DM"'
        服务器[LOCALHOST:5236]:处于普通配置状态
        登录使用时间 : 3.237(ms)
        disql V8
        SQL> 
        

        主备库都修改 oguid,执行以下命令

        SQL> sp_set_oguid(453331);
        DMSQL 过程已成功完成
        已用时间: 2.601(毫秒). 执行号:1.
        SQL> 
        

        主库dmrw1上修改数据库模式为 primary,执行以下命令:

        SQL> alter database primary;
        操作已执行
        已用时间: 5.220(毫秒). 执行号:0.
        SQL> 
        

        备库dmrw2上修改数据库模式为 standby,执行以下命令:

        SQL>  alter database standby;
        操作已执行
        已用时间: 4.452(毫秒). 执行号:0.
        SQL> 
        

        启动守护进程:

        dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

        [dmdba@AAAA bin]$ pwd
        /data/dmserver/app/bin
        [dmdba@AAAA bin]$ ./dmwatcher /data/dmserver/data/DAMENG/dmwatcher.ini
        

        出现

        DMWATCHER[4.0] V8

        DMWATCHER[4.0] IS READY

        说明正常了

        守护进程启动后,会将 Mount 的实例 Open。这里是前台启动的方式,因为我们前面注册了服务名称,所以就没必要前台启动,直接配好主从的主备关系后crtl+C退出两个实例的前台mount启动,然后调整实例启动服务脚本里的启动状态,依次按顺序启动主、备库实例、然后再主、备库的守护DmWatcher服务。

        9、配置监视器

                启动监视器(可以在任意节点配置,建议配置在从节点上)

        守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。

        新建确认监视器配置文件 dmmonitor.ini,执行以下命令:

        [dmdba@BBBB ~]$ vim /data/dmserver/data/DAMENG/dmmonitor.ini

        MON_DW_CONFIRM    = 1                    #确认监视器模式(0非确认监视器)
        MON_LOG_PATH    = /data/dmserver/jsq     #监视器日志文件存放路径
        MON_LOG_INTERVAL  = 60                   #每隔60秒定时记录系统信息到日志文件
        MON_LOG_FILE_SIZE   = 200                #日志文件最大32M
        MON_LOG_SPACE_LIMIT  = 1024              #不限定日志文件总占用空间
        [GRP_DW] 
         MON_INST_OGUID    = 453331              #组GRP1的唯一OGUID值
         MON_DW_IP     = 192.168.5.136:7436      #集群内部节点1
         MON_DW_IP     = 192.168.5.137:7436      #集群内部节点2

        执行以下命令,启动监视器。

        [dmdba@BBBB ~]$ cd /data/dmserver/app/bin

        [dmdba@BBBB bin]$ ./dmmonitor /data/dmserver/data/DAMENG/dmmonitor.ini

         启动后输入 show 命令查看集群状态。

        其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。

        disql 客户端验证

        达梦数据库-实时主备集群部署详解(附图文)

        10、注册监视器服务(建议在备库上执行)

        [root@BBBB ~]# cd /data/dmserver/app/script/root/

        [root@BBBB root]# ./dm_service_installer.sh -t dmmonitor -p DW -monitor_ini /data/dmserver/data/DAMENG/dmmonitor.ini
        Created symlink /etc/systemd/system/multi-user.target.wants/DmMonitorServiceDW.service → /usr/lib/systemd/system/DmMonitorServiceDW.service.
        创建服务(DmMonitorServiceDW)完成

         

        11、配置sql日志

        所有节点修改sqllog.ini

        到实例路径下

        [dmdba@AAAA ~]$ vim /data/dmserver/data/DAMENG/sqllog.ini

        BUF_TOTAL_SIZE = 10240
        BUF_SIZE = 1024
        BUF_KEEP_CNT = 6
        [SLOG_ALL]
        FILE_PATH = ../log
        PART_STOR = 1
        SWITCH_MODE = 2
        SWITCH_LIMIT = 512
        ASYNC_FLUSH = 1
        FILE_NUM = 5
        ITEMS = 0
        SQL_TRACE_MASK = 2:3:25
        MIN_EXEC_TIME = 1500
        USER_MODE = 0
        USERS =

        12、验证集群同步状态

        使用达梦客户端登录主库,创建测试表,插入数据,执行以下命令:

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

        达梦数据库-实时主备集群部署详解(附图文)

        使用达梦客户端登录备库,查询测试表验证,执行以下命令:

        select * from test;

        达梦数据库-实时主备集群部署详解(附图文)

        数据正常!

        六、验证集群主备切换测试

        这里建议将所有服务停止一下,因为前面启动的服务都是用前台启动的,后面再使用systemctl启动

        停止顺序:监视器—>备库守护---->主库守护—>主库服务---->备库服务

        启动顺序:主库服务—>备库服务—>主库守护—>备库守护---->监视器

        启动命令:

        [root@BBBB ~]# systemctl start DmServiceDMSERVER.service 
        [root@BBBB ~]# systemctl start DmWatcherServiceDW.service
        [root@BBBB root]# systemctl start DmMonitorServiceDW.service

        停止命令:

        [root@BBBB ~]# systemctl stop DmServiceDMSERVER.service 
        [root@BBBB ~]# systemctl stop DmWatcherServiceDW.service
        [root@BBBB root]# systemctl stop DmMonitorServiceDW.service

        开始模拟故障

        将主库的守护进程停止后,监听器报错接受不到主库的监视器消息了

        达梦数据库-实时主备集群部署详解(附图文)

        再将主数据库的服务停止后,监视器开始切换升级备库为主库

        达梦数据库-实时主备集群部署详解(附图文)

        在BBBB服务器上执行写操作,查看是否可以正常写入

        达梦数据库-实时主备集群部署详解(附图文)

        现在将AAAA达梦数据库重新启动加入集群,验证数据是否可以正常同步

        启动宕机的达梦数据库:

        [root@BBBB ~]# systemctl start DmServiceDMSERVER.service 

        达梦数据库-实时主备集群部署详解(附图文)

        启动宕机的达梦数据库监视器:

        [root@BBBB ~]# systemctl start DmWatcherServiceDW.service

        查看监视器日志已经检测到被宕机的库了,并且已经重新加入了集群

        达梦数据库-实时主备集群部署详解(附图文)

        上AAAA达梦数据库上查询数据库的数据同步是否正常

        达梦数据库-实时主备集群部署详解(附图文)

        数据同步正常

        七、手动切换主备库

        在监视器交互界面输入 login

        输入sysdba账号和密码

        达梦数据库-实时主备集群部署详解(附图文)

        手动切换命令格式如下

        switchover GRP1(组名).GRP1_RT_02(要切换成主库的备库实例名)

        组信息存放在达梦守护进程配置文件中

        cat /data/dmserver/data/DAMENG/dmwatcher.ini

        达梦数据库-实时主备集群部署详解(附图文)

        手动切换主备集群测试

        switchover GRP_DW.DMRW1

        达梦数据库-实时主备集群部署详解(附图文)

        达梦数据库-实时主备集群部署详解(附图文)

        到这里手动切换集群状态也完成了

        八、客户端连接集群

        客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:

        32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;

        64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;

        32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;

        在 Linux 平台下,此文件位于/etc/dm_svc.conf。

        文件内容:

        #全局配置区
        DMDW=(192.168.10.101:5236,192.168.10.102:5236)
        TIME_ZONE=(+480) #表示+8:00 时区
        LOGIN_ENCRYPT=(0)
        DIRECT=(Y)
        #服务配置区
        [DMDW]
        LOGIN_MODE=(1) #只连主库
        

        客户端程序连接数据库时,需要指定 IP 端口处替换为服务名即可,例如:disql SYSDBA/‘“password”’@DMDW。jdbc的url为:jdbc:dm://DMDW

        注意

        当修改了 dm_svc.conf 内容后,需要重启客户端程序,修改的配置才能生效。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码