注册
主备集群和读写分离集群的搭建
专栏/技术分享/ 文章详情 /

主备集群和读写分离集群的搭建

R. 2026/09/11 19 0 0
摘要

主备集群以及读写分离集群的搭建


第一部分:2 节点实时数据守护集群(Data Watcher)

1. 集群部署与同步测试

步骤 1:数据准备(主库备份、备库还原恢复)

  • 主库(138)脱机备份或联机备份:
su - dmdba /opt/dmdbms/bin/dmrman RMAN> BACKUP DATABASE '/dmdata/data/SYSDBA/dm.ini' TO BACKUP_FOR_DW BACKUPSET '/dmdata/data/backup_for_dw'; RMAN> exit;

image.png

  • 将备份拷贝至备库(136),并在备库执行脱机还原恢复:
scp -r /dmdata/data/backup_for_dw dmdba@192.168.72.136:/dmdata/data/ # 还原数据库 su - dmdba /home/dmdba/dmdbms/bin/dmrman RESTORE DATABASE TO '/dmdata/data/SYSDBA' FROM BACKUPSET '/dmdata/data/backup_for_dw'; RECOVER DATABASE '/dmdata/data/SYSDBA/dm.ini' FROM BACKUPSET '/dmdata/data/backup_for_dw'; RECOVER DATABASE '/dmdata/data/SYSDBA/dm.ini' UPDATE DB_MAGIC; exit;

image.png

步骤 2:配置文件设置

  • 主备库参数调整 (dm.ini)
INSTANCE_NAME = DMOA01 # 136备库改为 DMOA02 PORT_NUM = 5236 MAL_INI = 1 ARCH_INI = 1 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2
  • 两节点保持一致的 MAL 配置 (dmmal.ini)
MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 10 [MAL_INST1] MAL_INST_NAME = DMOA01 MAL_HOST = 192.168.1.138 MAL_PORT = 5269 MAL_INST_HOST = 192.168.1.138 MAL_INST_PORT = 5236 MAL_DW_PORT = 5241 MAL_INST_DW_PORT = 5240 [MAL_INST2] MAL_INST_NAME = DMOA02 MAL_HOST = 192.168.1.136 MAL_PORT = 5269 MAL_INST_HOST = 192.168.1.136 MAL_INST_PORT = 5236 MAL_DW_PORT = 5241 MAL_INST_DW_PORT = 5240

image.png!

  • 主库归档配置 (138: dmarch.ini)
[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/data/SYSDBA/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 10240 [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME ARCH_DEST = DMOA02

image.png!

  • 备库归档配置 (136: dmarch.ini)
[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/data/SYSDBA/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 10240 [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME ARCH_DEST = DMOA01

image.png

  • 守护进程配置 (dmwatcher.ini)
[GRP_DMOA] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 10 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 10 INST_OGUID = 453332 INST_INI = /dmdata/data/SYSDBA/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #备库为/home/dmdba/dmdbms/bin/dmserver

image.png

步骤 3:启动与模式初始化

  • 以 Mount 方式启动两端实例:
./dmserver /dmdata/data/SYSDBA/dm.ini mount

image.png

  • 主库(138)执行:
SP_SET_OGUID(453332); ALTER DATABASE PRIMARY;

image.png

  • 备库(136)执行:
SP_SET_OGUID(453332); ALTER DATABASE STANDBY;

image.png

第四步:注册 DMOA* 实例服务与守护进程服务

  1. 主库(138)注册服务(root 执行)
cd /opt/dmdbms/script/root/ ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/data/SYSDBA/dm.ini -m mount -p DMOA01 ./dm_service_installer.sh -t dmwatcher -watcher_ini /dmdata/data/SYSDBA/dmwatcher.ini -p DMOA01
  1. 备库(136)注册服务(root 执行)
cd /home/dmdba/dmdbms/script/root/ ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/data/SYSDBA/dm.ini -m mount -p DMOA02 ./dm_service_installer.sh -t dmwatcher -watcher_ini /dmdata/data/SYSDBA/dmwatcher.ini -p DMOA02
  1. 创建确认监视器配置文件(放在 138 上:/dmdata/data/dmmonitor.ini
    MON_DW_CONFIRM = 1 MON_LOG_PATH = /dmdata/data/SYSDBA/log MON_LOG_INTERVAL = 60 MON_LOG_FILE_SIZE = 32 MON_LOG_SPACE_LIMIT = 0 [GRP_DMOA] MON_INST_OGUID = 453332 MON_DW_IP = 192.168.72.138:5241 MON_DW_IP = 192.168.72.136:5241

image.png


第五步:拉起集群并验证

  1. 按顺序启动各服务
  • 138 启动实例与守护:
./DmServiceDMOA01 start ./DmWatcherServiceDMOA01 start

image.png!

  • 136 启动实例与守护:
./DmServiceDMOA02 start ./DmWatcherServiceDMOA02 start

image.png

  • 138 前台启动确认监视器:
/opt/dmdbms/bin/dmmonitor /dmdata/data/dmmonitor.ini

image.png

步骤 4:数据同步验证

  • 主库(138)写入数据:
CREATE TABLE DW_TEST_SYNC(ID INT PRIMARY KEY, MEMO VARCHAR(50), CREATE_TIME DATETIME DEFAULT SYSDATE); INSERT INTO DW_TEST_SYNC(ID, MEMO) VALUES (1, 'DW_SYNC_OK'); COMMIT; SELECT * FROM DW_TEST_SYNC;

image.png

  • 备库(136)查询验证:
SELECT * FROM T_SYNC;

image.png

备库能够立即查询到 ID=1 的记录。

2. 制造主机故障与备机接管

  • 强杀主库进程:
killall -9 dmserver
  • 确认监视器存活,监视器将触发自动接管
    image.png
    image.png

手动主备切换(切回初始架构)

  • 在监视器命令行执行切换命令:
login
switchover DM01

image.png


第二部分:2 节点读写分离集群

1. 读写分离集群部署与同步测试

读写分离集群只需将归档模式由 REALTIME 调整为 TIMELY(即时归档),打开 SQL 审计日志,并配置客户端 dm_svc.conf 的读写分发规则。

image.png

  • 客户端服务名配置 (dm_svc.conf)
    在客户端 /etc/dm_svc.conf 中添加读写分离连接组:
TIME_ZONE=(480) LANGUAGE=(cn) # 定义读写分离服务名 RW_DMOA RW_DMOA=(192.168.72.138:5236,192.168.72.136:5236) [RW_DMOA] LOGIN_MODE=(0) # 0: 优先连接 Primary 模式库 RW_SEPARATE=(1) # 1: 开启读写分离 RW_PERCENT=(0) # 0: 只读事务 100% 分发到备库执行 SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) EP_SELECTOR=(0) AUTO_RECONNECT=(1)

image.png

  • 制造主机故障与备机接管

  • 强杀主库 DM01 进程:

killall -9 dmserver
  • 由确认监视器自动接管:
    image.png

3. 恢复故障主机并加入集群

  • 启动原主库 138 数据库和守护进程:
./DmServiceDMOA01 start

image.png
image.png

  • 守护进程检测到 136 已接管为主库,将 138 切换为 STANDBY 模式并完成历史数据重演。

4. 手动切换回初始拓扑

  • 在监视器中执行切回主库命令:
login
switchover DM01

image.png
image.png

5. 测试读事务自动分发至备机

  • 确保主备库 SVR_LOG = 1,开启 SQL 日志追踪。
  • 使用服务名通过客户端连接:
./disql SYSDBA/SYSDBA@DW_RW
  • 执行混合读写流程:
-- 1. 创建测试表 CREATE TABLE T_RW_VERIFY(ID INT PRIMARY KEY, NAME VARCHAR(30)); -- 2. 插入测试数据并提交 INSERT INTO T_RW_VERIFY VALUES (1, 'TIMELY_SYNC_DATA'); COMMIT; -- 3. 本地查询确认 SELECT * FROM T_RW_VERIFY;

image.png!

在136机器上登录备库进行查询:

SELECT * FROM T_RW_VERIFY;

image.png

然后在备库查看SQL日志:
image.png

达梦社区:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服