单机读写分离集群搭建
📅 2026/8/1 8:29:28
👁️ 阅读次数
📝 编程学习
1. 环境准备
1.1 节点规划
| 节点 | 实例名 | 数据目录 | 服务端口 | MAL端口 | 守护端口 |
|---|---|---|---|---|---|
| 节点1 | GRP1_RWW_01 | /home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG | 32141 | 61141 | 52141 |
| 节点2 | GRP1_RWW_02 | /home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG | 32142 | 61142 | 52142 |
| 节点3 | GRP1_RWW_03 | /home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG | 32143 | 61143 | 52143 |
1.2 集群角色规划
| 节点 | 初始角色 | 说明 |
|---|---|---|
| GRP1_RWW_01 | 主库(PRIMARY) | 处理所有写操作和部分读操作 |
| GRP1_RWW_02 | 备库(STANDBY) | 只读,同步主库数据 |
| GRP1_RWW_03 | 备库(STANDBY) | 只读,同步主库数据 |
1.3 集群唯一标识
| 参数 | 值 | 说明 |
|---|---|---|
INST_OGUID | 453332 | 整个集群的唯一标识符,三节点必须一致 |
2. 创建三个实例的数据目录
# 切换到 dmdba 用户su- dmdba# 创建主目录mkdir-p/home/dmdba/dmdbms/data/GPR1_RW# 创建归档目录mkdir-p/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/archmkdir-p/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG/archmkdir-p/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG/arch# 创建备份目录mkdir-p/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/bakmkdir-p/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/bakmkdir-p/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/bak3. 初始化三个数据库实例
cd/home/dmdba/dmdbms/bin ./dminitPATH=/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG\DB_NAME=DAMENG\INSTANCE_NAME=GRP1_RWW_01\PORT_NUM=32141\PAGE_SIZE=16\EXTENT_SIZE=16\CHARSET=1\CASE_SENSITIVE=Y\LOG_SIZE=2048./dminitPATH=/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG\DB_NAME=DAMENG\INSTANCE_NAME=GRP1_RWW_02\PORT_NUM=32142\PAGE_SIZE=16\EXTENT_SIZE=16\CHARSET=1\CASE_SENSITIVE=Y\LOG_SIZE=2048./dminitPATH=/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG\DB_NAME=DAMENG\INSTANCE_NAME=GRP1_RWW_03\PORT_NUM=32143\PAGE_SIZE=16\EXTENT_SIZE=16\CHARSET=1\CASE_SENSITIVE=Y\LOG_SIZE=20484. 配置 dm.ini 文件
4.1 主库的 dm.ini
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/dm.iniINSTANCE_NAME = GRP1_RWW_01 PORT_NUM = 32141 DW_PORT = 33141 DW_ERROR_TIME = 10 RLOG_SEND_APPLY_MON = 64 MAL_INI = 1 ARCH_INI = 14.2 备库1的 dm.ini
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG/dm.iniINSTANCE_NAME = GRP1_RWW_02 PORT_NUM = 32142 DW_PORT = 33142 DW_ERROR_TIME = 10 RLOG_SEND_APPLY_MON = 64 MAL_INI = 1 ARCH_INI = 14.3 备库2的 dm.ini
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG/dm.iniINSTANCE_NAME = GRP1_RWW_03 PORT_NUM = 32143 DW_PORT = 33143 DW_ERROR_TIME = 10 RLOG_SEND_APPLY_MON = 64 MAL_INI = 1 ARCH_INI = 15. 配置 dmmal.ini
三节点完全相同
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/dmmal.iniMAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_INST1] MAL_INST_NAME = GRP1_RWW_01 MAL_HOST = *.*.*.* MAL_PORT = 61141 MAL_INST_HOST = *.*.*.* MAL_INST_PORT = 32141 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 33141 [MAL_INST2] MAL_INST_NAME = GRP1_RWW_02 MAL_HOST = *.*.*.* MAL_PORT = 61142 MAL_INST_HOST = *.*.*.* MAL_INST_PORT = 32142 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142 [MAL_INST3] MAL_INST_NAME = GRP1_RWW_03 MAL_HOST = *.*.*.* MAL_PORT = 61143 MAL_INST_HOST = *.*.*.* MAL_INST_PORT = 32143 MAL_DW_PORT = 52143 MAL_INST_DW_PORT = 331436. 配置 dmarch.ini
6.1 主库的 dmarch.ini
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/dmarch.ini[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RWW_02 [ARCHIVE_TIMELY2] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RWW_03 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 06.2 备库1的 dmarch.ini
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG/dmarch.ini[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RWW_01 [ARCHIVE_TIMELY2] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RWW_03 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 06.3 备库2的 dmarch.ini
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG/dmarch.ini[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RWW_01 [ARCHIVE_TIMELY2] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RWW_02 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 07. 配置 dmwatcher.ini
以下为GPR1_RWW_01,另外两个节点仅需要修改INST_INI为相应的dm.ini路径即可
vi/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/dmwatcher.ini[GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 10 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 10 INST_OGUID = 453332 INST_INI = /home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 08. 注册服务
8.1 注册三个节点的数据库服务
cd/home/dmdba/dmdbms/script/root# 注册节点1(主库)./dm_service_installer.sh-tdmserver\-pGRP1_RWW_01\-dm_ini/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/dm.ini\-mmount# 注册节点2(备库)./dm_service_installer.sh-tdmserver\-pGRP1_RWW_02\-dm_ini/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG/dm.ini\-mmount# 注册节点3(备库)./dm_service_installer.sh-tdmserver\-pGRP1_RWW_03\-dm_ini/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG/dm.ini\-mmount8.2 注册三个节点的守护进程
cd/home/dmdba/dmdbms/script/root# 注册节点1的守护进程./dm_service_installer.sh-tdmwatcher\-pRwwWatcher01\-watcher_ini/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_01/DAMENG/dmwatcher.ini# 注册节点2的守护进程./dm_service_installer.sh-tdmwatcher\-pRwwWatcher02\-watcher_ini/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_02/DAMENG/dmwatcher.ini# 注册节点3的守护进程./dm_service_installer.sh-tdmwatcher\-pRwwWatcher03\-watcher_ini/home/dmdba/dmdbms/data/GPR1_RW/GPR1_RWW_03/DAMENG/dmwatcher.ini9. 配置确认监视器
su- dmdbamkdir-p/home/dmdba/dmdbms/data/logvi/home/dmdba/dmdbms/data/dmmonitor.iniMON_DW_CONFIRM = 1 MON_LOG_PATH = /home/dmdba/dmdbms/data/log MON_LOG_INTERVAL = 60 MON_LOG_FILE_SIZE = 32 MON_LOG_SPACE_LIMIT = 0 [GRP1] MON_INST_OGUID = 453332 MON_DW_IP = *.*.*.*:52141 MON_DW_IP = *.*.*.*:52142 MON_DW_IP = *.*.*.*:5214310.集群启停
启动:实例->守护进程->监视器
su- dmdba ./DmServiceGRP1_RWW_01 start ./DmServiceGRP1_RWW_02 start ./DmServiceGRP1_RWW_03 start ./DmWatcherServiceRwwWatcher01 start ./DmWatcherServiceRwwWatcher02 start ./DmWatcherServiceRwwWatcher03 start ./dmmonitor /home/dmdba/dmdbms/data/dmmonitor.ini停止:监视器->守护进程->实例
exit#监视器界面执行,本文并没有为监视器注册服务,若为监视器注册了服务使用相关命令停掉监视器即可./DmWatcherServiceRwwWatcher01 stop ./DmWatcherServiceRwwWatcher02 stop ./DmWatcherServiceRwwWatcher03 stop ./DmServiceGRP1_RWW_01 stop ./DmServiceGRP1_RWW_02 stop ./DmServiceGRP1_RWW_03 stop11. 配置客户端读写分离(dm_svc.conf)
vi/etc/dm_svc.conf25%的读请求,备库承担75%ZN=(*.*.*.*:32141,*.*.*.*:32142,*.*.*.*:32143) TIME_ZONE=(480) LANGUAGE=(cn) [ZN] RW_SEPARATE=(1) #启用读写分离 RW_PERCENT=(25) #主库承担25%的读请求,备库承担75%声明:本文为个人实操学习笔记,部署步骤参考达梦数据库官方文档整理,仅供参考
编程学习
技术分享
实战经验