本章节主要介绍在生产环境中(Linux 系统)规范化部署读写分离集群。
服务器硬件需求
按实际业务需求,选择合适的服务器,准备 3 台服务器,一台主库服务器,一台备库服务器,一台监视器服务器,服务器参数建议如下:
| 硬件 | 要求 |
|---|---|
| 物理内存 | >=16 GB |
| 交换区 | Swap 空间>=物理内存 |
| /tmp大小 | > 1000 MB |
| 网络 | 物理机器需要 4 个网卡,2 个 public 网卡做 band,2 个 private 网卡做 band |
| 磁盘 | 根据实际应用系统需要挂载合适大小磁盘 |
| 时间服务器 | 按机房要求配置连接时间服务器 |
警告守护进程配置自动切换时,必须在监视器服务器上配置确认监视器,并且保证网络高可用。
操作系统要求
操作系统版本安装
DM 数据库安装在 Linux 操作系统所需条件:glibc 2.3 以上,内核 2.6,预先安装 UnixODBC,系统性能监控等组件。
目录与存储规划
| 用途 | 目录路径 | 备注 |
|---|---|---|
| 数据库软件安装目录 | /home/dmdba/dmdbms | 可用空间>50 GB |
| 实例安装目录 | /dmdata | 单独挂载性能最好的磁盘建议 SSD |
| 归档日志存放目录 | /dmarch | 单独挂载磁盘 |
| 备份文件存放目录 | /dmbak | 单独挂载磁盘 |
用户与组
DM 数据库不应该使用 root 用户安装和维护。需要在安装之前为 DM 数据库创建一个专用的系统用户 (dmdba) 和用户组 (dinstall)。
执行以下命令,新建用户组 dinstall。
groupadd dinstall |
执行以下命令,新建用户 dmdba。
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba |
执行以下命令,修改 dmdba 用户密码。
passwd dmdba |
输入密码并确认。
用户资源限制
执行以下命令,修改 dmdba 用户资源限制。
vim /etc/security/limits.conf |
文件末尾添加如下内容:
dmdba soft core unlimited |
用户环境变量
执行以下命令,修改 dmdba 用户环境变量。
vi /home/dmdba/.bash_profile |
文件末尾添加如下内容:
export DM_HOME=/home/dmdba/dmdbms |
防火墙设置
端口规划
搭建 2 节点主备集群,端口规划如下:(实际中可以按需要修改端口号)
| 主机名 | public ip | private ip | 实例名 | 端口 | 用途 |
|---|---|---|---|---|---|
| dmdsc1 | 192.168.56.11 | 10.0.0.11 | dmrw1 | 5236 | 数据库实例 dmrw1 监听端口 |
| dmdsc1 | 192.168.56.11 | 10.0.0.11 | dmrw1 | 61141 | MAL 系统监听 TCP 连接的端口 |
| dmdsc1 | 192.168.56.11 | 10.0.0.11 | dmrw1 | 52141 | 实例本地的守护进程监听 TCP 连接的端口 |
| dmdsc1 | 192.168.56.11 | 10.0.0.11 | dmrw1 | 33141 | 实例监听守护进程 TCP 连接的端口 |
| dmdsc2 | 192.168.56.12 | 10.0.0.12 | dmrw2 | 5236 | 数据库实例 dmrw2 监听端口 |
| dmdsc2 | 192.168.56.12 | 10.0.0.12 | dmrw2 | 61141 | MAL 系统监听 TCP 连接的端口 |
| dmdsc2 | 192.168.56.12 | 10.0.0.12 | dmrw2 | 52141 | 实例本地的守护进程监听 TCP 连接的端口 |
| dmdsc2 | 192.168.56.12 | 10.0.0.12 | dmrw2 | 33141 | 实例监听守护进程 TCP 连接的端口 |
防火墙集群之间需开放以上所有端口,集群对客户端只需要开通数据库实例监听端口。
安装数据库
数据库软件安装参考单机规范化部署
软件安装目录为/home/dmdba/dmdbms,实例初始化目录/home/dmdba/dmdbms/dmrw,初始化脚本如下:
./dminit path=/home/dmdba/dmdbms db_name=dmrw page_size=32 |
注意初始化的实例必须先启动一次,才能脱机备份。
主库脱机备份
执行以下命令,确认主库 dmap 服务已启动。
ps -ef|grep dmap |

若未启动,则先启动 dmap 服务,dmdba 到安装目录的 bin 下执行以下命令。
./DmAPService start |
关闭数据库后,使用 dmrman 工具脱机备份主库,dmdba 用户到安装目录的 bin 下执行以下命令。
./dmrman |
执行 backup 全库。
backup database '/home/dmdba/dmdbms/dmrw/dm.ini' backupset '/home/dmdba/bakfull'; |

备库还原
拷贝主库备份到备库合适目录。
scp -r /home/dmdba/bakfull 192.168.56.12:/home/dmdba |

关闭数据库后,使用 dmrman 工具还原备库,dmdba 用户到安装目录的 bin 下执行。
./dmrman |
执行 restore。
restore database '/home/dmdba/dmdbms/dmrw/dm.ini' from backupset '/home/dmdba/bakfull'; |

执行 recover。
recover database '/home/dmdba/dmdbms/dmrw/dm.ini' from backupset '/home/dmdba/bakfull'; |

执行 recover update db_magic。
recover database '/home/dmdba/dmdbms/dmrw/dm.ini' update db_magic; |

配置实例的配置文件 dm.ini
修改实例的 dm.ini 文件参数,执行以下命令。
vi /home/dmdba/dmdbms/dmrw/dm.ini |
主库修改以下参数值:
INSTANCE_NAME = dmrw1 |
备库修改以下参数值:
INSTANCE_NAME = dmrw2 |
配置归档配置文件 dmarch.ini
在实例目录下新建文件 dmarch.ini,执行以下命令。
vi /home/dmdba/dmdbms/dmrw/dmarch.ini |
主库添加以下内容:
[ARCHIVE_TIMELYE] |
备库添加以下内容:
[ARCHIVE_TIMELY] |
配置MAL系统配置文件 dmmal.ini
在实例目录下新建文件 dmmal.ini,执行以下命令。
vi /home/dmdba/dmdbms/dmrw/dmmal.ini |
主备库文件内容要相同。
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 |
配置守护进程配置文件 dmwatcher.ini
在实例目录下新建文件 dmwatcher.ini,执行以下命令。
vi /home/dmdba/dmdbms/dmrw/dmwatcher.ini |
主备库文件内容要相同。
[GRP_RW] |
以 Mount 方式启动数据库实例
使用 dmdba 用户,到数据库安装目录的 bin 下执行以下命令。(主备库都执行)
./dmserver /home/dmdba/dmdbms/dmrw/dm.ini mount |
在新的终端使用 disql 工具连接数据库。
./disql SYSDBA/SYSDBA |
主备库都修改 oguid,执行以下命令。
sp_set_oguid(453331); |
主库修改数据库模式为 primary,执行以下命令。
alter database primary; |
备库修改数据库模式为 standby,执行以下命令。
alter database standby; |
启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令。(主备库都执行)
./dmwatcher /home/dmdba/dmdbms/dmrw/dmwatcher.ini |
守护进程启动后,会将 Mount 的实例 Open。
启动确认监视器
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令。
vi /home/dmdba/dmdbms/dmmonitor.ini |
添加以下内容:
MON_DW_CONFIRM = 1 #确认监视器模式 |
执行以下命令,启动监视器。
./dmmonitor /home/dmdba/dmdbms/dmmonitor.ini |
启动后输入 show 命令查看集群状态。

注册服务
以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行)。
./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /home/dmdba/dmdbms/dmrw/dmwatcher.ini |
注册数据库实例服务(主备库都执行)。
./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /home/dmdba/dmdbms/dmrw/dm.ini |
注册监视器服务(只需在监视器服务器上执行)。
./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /home/dmdba/dmdbms/dmmonitor.ini |
以服务方式启动
执行以下命令,启动数据库实例。
systemctl start DmServicedmrw |
执行以下命令,启动守护进程。
systemctl start DmWatcherServicedmrw |
执行以下命令,启动监视器。
systemctl start DmMonitorServiceconfirm |
验证主备集群同步状态
监视器查看读写分离集群状态
集群任意节点,配置普通监视器配置文件 dmmonitor.ini,执行以下命令,
vi /home/dmdba/dmmonitor.ini |
添加以下内容:
MON_DW_Confirm = 0 #普通监视器模式 |
执行以下命令,启动监视器。
./dmmonitor /home/dmdba/dmmonitor.ini |
输入 show 命令查看集群状态。

其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
disql 客户端验证
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令。
./disql SYSDBA/SYSDBA@192.168.56.11:5236 |
SQL 提示符下执行以下命令。
create table test(id int); |
使用 disql 客户端登录备库,查询测试表验证,执行以下命令。
./disql SYSDBA/SYSDBA@192.168.56.12:5236 |
SQL 提示符下执行以下命令。
select * from test; |

参数优化
集群部署完成后,需要优化 dm.ini 参数,主备库都需要修改。参数值优化详见参数优化部分。
重启集群
读写分离集群重启与主备相同:
- 关闭监视器:systemctl stop DmMonitorServiceconfirm
- 关闭主库守护进程:systemctl stop DmWatcherServicedmrw
- 关闭备库守护进程:systemctl stop DmWatcherServicedmrw
- 关闭主库实例:systemctl stop DmServicedmrw
- 关闭备库实例:systemctl stop DmServicedmrw
- 启动主库实例:systemctl start DmServicedmrw
- 启动备库实例:systemctl start DmServicedmrw
- 启动主库守护进程:systemctl start DmWatcherServicedmrw
- 启动备库守护进程:systemctl start DmWatcherServicedmrw
- 启动监视器:systemctl start DmMonitorServiceconfirm
定制备份策略
备份与单机相同,详见定制备份策略部分。
客户端连接集群
客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:
- 32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
- 64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
- 32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
- 在 Linux 平台下,此文件位于/etc 目录。
文件内容:
# 以#开头的行表示是注释 |




