注册
DM8 数据库在线从单机升级为主备读写分离集群操作手册_单网卡版本
专栏/技术分享/ 文章详情 /

DM8 数据库在线从单机升级为主备读写分离集群操作手册_单网卡版本

JC 2025/11/21 92 1 0
摘要

1. 概述

本手册仅适用于达梦8.1.4.80及其以后的版本,旨在指导技术人员在 不中断业务 的前提下,将一个运行中的、已开启归档模式的单机 DM8 数据库,在线无中断地升级为一个“一主一备”的 事务一致性 实时读写分离集群。所有组件将注册为系统服务,实现标准化运维和开机自启。

2. 环境与准备工作

2.1 环境规划

为实现标准化和避免端口冲突,对集群端口进行统一规划。

角色 主机名 IP地址 实例名 DB端口 MAL端口 守护端口 实例监听守护端口
原单机/新主库 DW-MASTER 192.168.16.136 DMSERVER 5236 6236 8236 7236
备库 & 监视器 DW-SLAVE01 192.168.16.146 DMSERVER_S 5236 6236 8236 7236

2.2 准备工作与前置检查

  1. 新服务器准备:确保新备库服务器(DW-SLAVE01)已就绪,并与主库(DW-MASTER)安装了完全相同版本的 DM8 软件,软件安装目录为 /home/dmdba/dmdbms

  2. 网络与目录:确保主备机网络互通,所有端口已开放,并在备库创建一致的、包含数据库名的目录结构。

    # 在备库 DW-SLAVE01 上以 root 用户执行 mkdir -p /data/dmdata/DAMENG /data/dmdata/dmarch/DAMENG /data/dmdata/dmbak/DAMENG chown -R dmdba:dinstall /data/dmdata
  3. 【关键】检查主库归档状态:登录原单机数据库,确认其已处于归档模式。

    # 切换到 dmdba 用户 su - dmdba # 使用操作系统认证登录,如果配置了密码,也可使用 disql SYSDBA/Your_Password 登录 disql / as sysdba SELECT ARCH_MODE FROM V$DATABASE; -- 预期结果应为 'Y'
  4. 根据主库参数初始化新备库

    # 在备库 DW-SLAVE01 上,切换到 dmdba 用户执行 su - dmdba dminit PATH=/data/dmdata DB_NAME=DAMENG INSTANCE_NAME=DMSERVER_S PORT_NUM=5236 MAL_FLAG=1 ARCH_FLAG=1 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
  5. 规划 OGUID:本例中使用 45333

3. 操作步骤

3.1 准备新备库数据

  1. 主库在线备份

    # 切换到 dmdba 用户,登录主库 disql disql / as sysdba BACKUP DATABASE FULL BACKUPSET '/data/dmdata/dmbak/DAMENG/FULL_BAK_01'; exit;
  2. 传输备份集

    # 在主库服务器上执行 scp -rp /data/dmdata/dmbak/DAMENG/FULL_BAK_01 root@192.168.16.146:/data/dmdata/dmbak/DAMENG/ # 在备库服务器上确认权限 ssh root@192.168.16.146 "chown -R dmdba:dinstall /data/dmdata/dmbak/DAMENG/FULL_BAK_01"
  3. 备库脱机还原恢复

    # 在备库服务器上,切换到 dmdba 用户执行 dmrman use_ap=2 ctlstmt="RESTORE DATABASE '/data/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/data/dmdata/dmbak/DAMENG/FULL_BAK_01'" dmrman use_ap=2 ctlstmt="RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' FOR STANDBY FROM BACKUPSET '/data/dmdata/dmbak/DAMENG/FULL_BAK_01'" dmrman use_ap=2 ctlstmt="RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"

3.2 在线配置主库

  1. 在线配置主库模式、OGUID、归档和MAL

    # 切换到 dmdba 用户,登录主库 disql disql / as sysdba -- 1. 在线添加主备库的MAL信息,此操作会自动生成和更新 dmmal.ini 文件 SF_MAL_INST_ADD_APPLY( MAL_NAME => 'MAL_INST1', -- MAL配置项名 INST_NAME => 'DMSERVER', -- 实例名 MAL_HOST => '192.168.16.136', -- MAL IP 地址 (内部IP) MAL_PORT => 6236, -- MAL 端口 INST_HOST => '192.168.16.136', -- 实例 IP 地址 (外部IP) INST_PORT => 5236, -- 实例端口 DW_PORT => 8236, -- 守护进程端口 LINK_MAGIC => 1, -- 链路魔数 INST_DW_PORT => 7236 -- 实例监听守护进程端口 ); SF_MAL_INST_ADD_APPLY( MAL_NAME => 'MAL_INST2', -- MAL配置项名 INST_NAME => 'DMSERVER_S', -- 实例名 MAL_HOST => '192.168.16.146', -- MAL IP 地址 MAL_PORT => 6236, -- MAL 端口 INST_HOST => '192.168.16.146', -- 实例 IP 地址 INST_PORT => 5236, -- 实例端口 DW_PORT => 8236, -- 守护进程端口 LINK_MAGIC => 1, -- 链路魔数 INST_DW_PORT => 7236 -- 实例监听守护进程端口 ); -- 2. 动态开启MAL功能,为添加实时归档做准备 CALL SP_SET_PARA_VALUE(1,'MAL_INI',1); -- 3. 在线修改本地归档并添加实时归档 alter database modify archivelog 'DEST=/data/dmdata/dmarch/DAMENG, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=204800'; ALTER DATABASE ADD ARCHIVELOG 'TYPE=REALTIME,DEST=DMSERVER_S,WAIT_APPLY=1'; -- 4. 切换为主库模式并设置OGUID SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); ALTER DATABASE PRIMARY FORCE; SP_SET_OGUID(45333); SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

3.3 配置文件生成与同步

  1. 在主库生成配置文件

    # 在主库 DW-MASTER 上执行 vim /data/dmdata/DAMENG/dmwatcher.ini [GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO INST_OGUID = 45333 INST_INI = /data/dmdata/DAMENG/dm.ini vim /data/dmdata/DAMENG/dmmonitor.ini MON_DW_CONFIRM = 1 MON_LOG_PATH = /data/dmdata/log [GRP1] MON_INST_OGUID = 45333 MON_DW_IP = 192.168.16.136:8236 MON_DW_IP = 192.168.16.146:8236 cp /data/dmdata/DAMENG/dmmonitor.ini /data/dmdata/DAMENG/dmmonitor_manual.ini sed -i 's/MON_DW_CONFIRM = 1/MON_DW_CONFIRM = 0/' /data/dmdata/DAMENG/dmmonitor_manual.ini
  2. 同步配置文件到备库

    # 在主库 DW-MASTER 上以 root 用户执行 scp -p /data/dmdata/DAMENG/{dmmal.ini,dmwatcher.ini,dmmonitor.ini,dmmonitor_manual.ini,dmarch.ini} root@192.168.16.146:/data/dmdata/DAMENG/ # 在备库服务器上确认权限 ssh root@192.168.16.146 "chown dmdba:dinstall /data/dmdata/DAMENG/*.ini"
  3. 修改备库的 dmarch.ini

    # 在备库 DW-SLAVE01 上执行 sed -i "s/ARCH_DEST\s*=\s*DMSERVER_S/ARCH_DEST = DMSERVER/" /data/dmdata/DAMENG/dmarch.ini

3.4 注册系统服务

root 用户在 对应节点 上执行。

  1. 主库服务器

    # 在主库 DW-MASTER 上执行
    cd /home/dmdba/dmdbms/script/root
    ./dm_service_installer.sh -t dmwatcher -p DMSERVER -watcher_ini /data/dmdata/DAMENG/dmwatcher.ini
    
  2. 备库服务器

    # 在备库 DW-SLAVE01 上执行
    cd /home/dmdba/dmdbms/script/root
    ./dm_service_installer.sh -t dmserver -p DMSERVER_S -dm_ini /data/dmdata/DAMENG/dm.ini -m mount
    ./dm_service_installer.sh -t dmwatcher -p DMSERVER_S -watcher_ini /data/dmdata/DAMENG/dmwatcher.ini
    ./dm_service_installer.sh -t dmmonitor -p GRP1 -monitor_ini /data/dmdata/DAMENG/dmmonitor.ini
    

3.5 启动服务与最终配置

  1. 启动备库服务并配置模式

    # 在备库 DW-SLAVE01 上以 root 执行 systemctl start DmServiceDMSERVER_S.service

    待服务启动到 mount 状态后:

    # 切换到 dmdba 用户,登录备库 disql su - dmdba disql SYSDBA/Dameng123 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); ALTER DATABASE STANDBY; SP_SET_OGUID(45333); SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); exit;
  2. 启动守护和监视器服务

    # 在主库 DW-MASTER 上以 root 启动守护服务 systemctl start DmWatcherServiceDMSERVER.service # 在备库 DW-SLAVE01 上以 root 启动守护服务 systemctl start DmWatcherServiceDMSERVER_S.service # 任意节点使用前台监视器确认集群状态 su - dmdba -s /bin/bash -c "source ~dmdba/.bash_profile;dmmonitor /data/dmdata/DAMENG/dmmonitor_manual.ini" # 在监视器节点启动监视器服务 systemctl start DmMonitorServiceGRP1.service

4. 验证集群状态

  1. 写入测试数据确认同步情况

    # 在主库上,使用 dmdba 用户执行 su - dmdba disql / as sysdba create table if not exists tb_test_sync(dt datetime); insert into tb_test_sync select sysdate as dt from dual; commit; # 在备库上,切换到 dmdba 用户执行 su - dmdba disql / as sysdba -e 'select * from tb_test_sync'

    根据实际需要,清理同步测试表和数据(也可保留,方便日后定期写入测试数据检验同步情况)。

  2. 配置并测试客户端读写分离
    在客户端机器上编辑 dm_svc.conf 文件:

    RWW_SERVICE=(192.168.16.136:5236,192.168.16.146:5236) [RWW_SERVICE] LOGIN_MODE=(1) # 主库优先 RW_SEPARATE=(1) # 启用读写分离 # RW_PERCENT: 主库保留的读事务比例(0-100),剩余比例分发到备库。 # 设置为20,表示80%的读请求将被分发到备库。 RW_PERCENT=(20)

    使用客户端(如 disql 或应用程序)通过服务名 RWW_SERVICE 连接,执行查询和更新操作,验证读写请求是否按预期分发。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服