部署达梦读写分离集群

一、环境介绍

本次环境采用VM虚机部署、准备3台测试虚拟机,DW1_01DW1_01B作为主备数据库,03作为监视器(dbmonitor)。

  • DW1_01(192.168.128.31)

  • DW1_01B(192.168.128.32)

  • dmtest03(192.168.128.33)

主备库的配置规划如下,生产环境的 MAL_HOST 建议使用独立网段IP。

A机器

B机器

业务IP

192.168.128.31

192.168.128.32

实例名

DW1_01

DW1_01B

实例端口

5236

5236

MAL端口

5336

5336

MAL守护进程端口

5436

5436

守护进程端口

5536

5536

OGUID

45331

守护组

GDW1

安装目录

/opt/dmdbms

实例目录

/opt/dmdbms/data/

归档上限

51200

确认监视器IP

192.168.128.33

二、主库配置

  1. 实例、备份数据

--初始化实例

[dmdba@~]#/opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ INSTANCE_NAME=DW1_01

PAGE_SIZE=32 LOG_SIZE=2048

--启动服务

[dmdba@~]#/opt/dmdbms/bin/dmserver /opt/dmdbms/data/DAMENG/dm.ini

--开启归档

[dmdba@~]#/opt/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.128.31:5236

SQL>ALTER DATABASE MOUNT;

SQL>ALTER DATABASE ARCHIVELOG;

SQL>ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL,FILE_SIZE=1024, SPACE_LIMIT=51200';

SQL>ALTER DATABASE OPEN;

查询归档状态

--备份数据

SQL>BACKUP DATABASE BACKUPSET '/opt/dmdbms/data/DAMENG/bak1/BACKUP_FILE';

--修改dm.ini

SQL>SP_SET_PARA_VALUE (2,'PORT_NUM',5236);

SQL>SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);

SQL>SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);

SQL>SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);

SQL>SP_SET_PARA_VALUE (2,'MAL_INI',1);

SQL>SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

关闭前台实例服务

  1. 替换dmarch.ini

[dmdba@~]#vi /opt/dmdbms/data/DAMENG/dmarch.ini

[ARCHIVE_LOCAL]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST =/opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径

ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB

ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB

[ARCHIVE_REALTIME]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = DW1_01B #实时归档目标实例名

  1. 创建dmmal.ini

[dmdba@~]#vi /opt/dmdbms/data/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间

MAL_TEMP_PATH = /opt/dmdbms/data/malpath/ #临时文件目录

MAL_BUF_SIZE = 512 #单个MAL缓存大小,单位MB

MAL_SYS_BUF_SIZE = 2048 #MAL总大小限制,单位MB

MAL_COMPRESS_LEVEL = 0 #MAL消息压缩等级,0表示不压缩

[MAL_INST1]

MAL_INST_NAME = DW1_01 #实例名,和 dm.ini的INSTANCE_NAME一致

MAL_HOST = 192.168.128.31 #MAL系统监听TCP连接的IP地址

MAL_PORT = 5336 #MAL系统监听TCP连接的端口

MAL_INST_HOST = 192.168.128.31 #实例的对外服务IP地址

MAL_INST_PORT = 5236 #实例对外服务端口,和dm.ini的PORT_NUM一致

MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口

MAL_INST_DW_PORT = 5536 #实例监听守护进程TCP连接的端口

[MAL_INST2]

MAL_INST_NAME = DW1_01B

MAL_HOST = 192.168.128.32

MAL_PORT = 5336

MAL_INST_HOST = 192.168.128.32

MAL_INST_PORT = 5236

MAL_DW_PORT = 5436

MAL_INST_DW_PORT = 5536

  1. 创建dmwatcher.ini

[dmdba@~]#vi /opt/dmdbms/data/DAMENG/dmwatcher.ini

[GDW1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = MANUAL #故障手动切换模式

DW_ERROR_TIME = 20 #远程守护进程故障认定时间

INST_ERROR_TIME = 20 #本地实例故障认定时间

INST_RECOVER_TIME =60 #主库守护进程启动恢复的间隔时间

INST_OGUID = 45331 #守护系统唯一OGUID值

INST_INI =/opt/dmdbms/data/DAMENG/dm.ini #dm.ini文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动

RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

  1. 拷贝实例

[dmdba@~]#scp -r /opt/dmdbms/data/DAMENGdmdba@192.168.128.32:/opt/dmdbms/data/

  1. 注册服务

[root@~]#/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -pSERVER-dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount

[root@~]#/opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -pWatcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini

三、备库配置

  1. 修改dm.ini

[dmdba@~]#vi /opt/dmdbms/data/DAMENG/dm.ini

INSTANCE_NAME = DW1_01B #数据库实例名

  1. 替换dmarch.ini

[dmdba@~]#vi /opt/dmdbms/data/DAMENG/dmarch.ini

[ARCHIVE_LOCAL]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST =/opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径

ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB

ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB

[ARCHIVE_REALTIME]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = DW1_01 #实时归档目标实例名

  1. 相同配置项

与主库的dmmal.ini、dmwatcher.ini相同

  1. 注册服务

[root@~]#/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -pSERVER2 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount

[root@~]#/opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -pWatcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini

  1. 恢复数据

[dmdba@~]#/opt/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'

FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak1/BACKUP_FILE'"

[dmdba@~]#/opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE'/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET'/opt/dmdbms/data/DAMENG/bak1/BACKUP_FILE'"

[dmdba@~]#/opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE'/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

四、配置监视器

1、在各节点数据库的bin目录中 存放非确认监视器配置文件。

2、在确认监视器机器上(非集群节点) 注册确认监视器自启服务。

  1. 创建dmmonitor.ini

[dmdba@~]#vi /opt/dmdbms/bin/dmmonitor.ini

MON_DW_CONFIRM = 0 #0为非确认,1为确认

MON_LOG_PATH = ../log #监视器日志文件存放路径

MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE = 512 #单个日志大小,单位MB

MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位MB

[GDW1]

MON_INST_OGUID = 45331 #组GDW1的唯一OGUID 值

MON_DW_IP = 192.168.128.31:5436 #IP对应MAL_HOST,PORT对应MAL_DW_PORT

MON_DW_IP = 192.168.128.32:5436

  1. 注册服务

[root@~]#/opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -pMonitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini

五、启动服务及查看信息

  1. 主库

[dmdba@~]#/opt/dmdbms/bin/DmServiceSERVER start

[dmdba@~]#/opt/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.128.31:5236

SQL>SP_SET_OGUID(45331);

SQL>ALTER DATABASE PRIMARY;

  1. 备库

[dmdba@~]#/opt/dmdbms/bin/DmServiceSERVER2 start

[dmdba@~]#/opt/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.128.32:5236

SQL>SP_SET_OGUID(45331);

SQL>ALTER DATABASE STANDBY;

六、服务启停

  1. 启动守护进程

主备机器:[dmdba@~]#/opt/dmdbms/bin/DmWatcherServiceWatcher start

  1. 启动监视器

[dmdba@~]#/opt/dmdbms/bin/DmMonitorServiceMonitor start

前台启动:[dmdba@~]#/opt/dmdbms/bin/dmmonitor /opt/dmdbms/bin/dmmonitor.ini

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

### 达梦数据库读写分离机制及实现方式 #### 一、达梦数据库读写分离机制概述 达梦数据库读写分离是一种优化策略,旨在通过将只读查询请求分配至备库来减轻主库的压力,从而提高整体性能和并发处理能力。该机制的核心在于利用即时归档或实时归档技术,在保障数据一致性的前提下,使主库专注于事务型写入操作,而备库承担大部分只读查询任务[^3]。 #### 二、读写分离集群的特点 读写分离集群通常由一个主库和若干个备库构成。这些备库通过配置即时归档或实时归档功能与主库保持同步。相比传统的主备架构,读写分离的主要差异体现在客户端访问模式上——即如何区分并路由读写请求到相应的节点[^2]。 #### 三、读写分离的工作原理 1. **数据同步** 主库负责接收所有的写操作,并将其日志记录传输给备库。备库通过解析重做日志完成数据更新,确保与主库的数据一致性。此过程依赖于即时归档或实时归档的功能支持。 2. **读写分离逻辑** 数据库管理系统提供多种接口(如 JDBC 或 DPI),用于识别 SQL 请求的性质。对于只读类的操作(SELECT 查询等),系统会优先将其转发至备库;而对于涉及修改数据的操作(INSERT、UPDATE、DELETE 等),则始终交由主库执行。 3. **事务一致性保障** 配置事务一致模式可以进一步增强主备之间的数据可靠性。在这种模式下,只有当主库确认备库已成功应用相应变更后,才会向应用程序返回成功的响应消息。 #### 四、读写分离集群的配置方法 以下是构建达梦数据库读写分离环境的关键步骤: 1. **设置主库角色** 在主库 dmdb01 上运行如下命令以指定其为主实例: ```sql ALTER DATABASE PRIMARY; ``` 此步明确了当前服务器作为整个复制链路中的源头位置[^4]。 2. **创建初始备份** 使用 `dmrman` 工具对主库实施全量离线备份操作,以便后续初始化各备用副本: ```bash [dmdba@itsapp1 bin]$ ./dmrman DMRMAN> BACKUP DATABASE '/dmdata/its/dm.ini' FULL BACKUPSET '/dmbak/full_database'; ``` 这一步骤生成必要的基础映像文件集合,供其他成员加载恢复之用[^5]。 3. **部署备库并启用归档** 将上述制作好的备份集迁移至目标机器,按照官方文档指引逐步完成安装流程之后,调整本地参数文件使其指向远程主机上的主服务地址。同时开启对应的归档选项(TIMELY 或 REALTIME),启动监听进程等待上游推送增量改动信息过来。 4. **验证连接状态** 利用专用工具检查两方之间是否存在正常的心跳信号交换现象,观察是否有延迟过高或者其他异常情况发生。如果一切顺利的话,则说明初步框架已经搭建完毕,接下来就可以着手规划具体的流量分发规则了。 #### 结论 综上所述,达梦数据库提供了完善的解决方案帮助用户轻松建立起高效的读写分离体系结构。它不仅能够显著改善资源利用率水平,而且还能极大地增强了系统的稳定性和扩展潜力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值