1. 达梦数据库共享集群(DMDSC)概述
达梦数据库共享存储集群(DM Data Shared Cluster,简称DMDSC)是达梦数据库管理系统的高可用解决方案。它通过多节点共享同一存储设备的方式,实现数据库服务的高可用性和负载均衡。在实际生产环境中,DMDSC能够有效避免单点故障,确保业务连续性。
DMDSC架构通常由以下几个核心组件构成:
- 共享存储设备(通常采用SAN或高性能NAS)
- 至少两个数据库服务器节点
- 高速互联网络(建议万兆以上)
- 集群管理软件(集成在达梦数据库安装包中)
这种架构的最大特点是所有节点可以同时访问同一份数据文件,当主节点发生故障时,备节点可以在极短时间内接管服务,实现故障自动转移(Failover),对应用几乎透明。
2. 安装前准备工作
2.1 硬件环境要求
对于生产环境部署DMDSC,建议采用以下硬件配置:
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| 服务器节点 | 8核CPU/32GB内存 | 16核CPU/64GB内存以上 |
| 共享存储 | 1TB SAS/SATA | 2TB以上SSD或高性能SAN |
| 网络 | 千兆以太网 | 万兆以太网或InfiniBand |
| 交换设备 | 普通交换机 | 支持多路径的高可用交换机 |
特别注意:
- 存储I/O性能直接影响集群整体表现,建议使用支持多路径的FC-SAN或iSCSI存储
- 节点间心跳网络建议与业务网络物理隔离
- 每个节点需要至少2块网卡(业务网络+心跳网络)
2.2 软件环境准备
安装前需确保所有节点满足以下软件条件:
操作系统:
- 支持主流Linux发行版(CentOS/RHEL 7.4+、Ubuntu 16.04+、麒麟等)
- 内核版本建议3.10以上
- 已关闭SELinux(或配置适当策略)
- 防火墙开放必要端口(默认5236)
依赖包:
# CentOS/RHEL yum install -y glibc libaio libnsl gcc gcc-c++ ksh compat-libstdc++-33 # Ubuntu apt-get install -y libaio1 libnss3-dev libncurses5-dev libtinfo5系统参数调整:
# 修改内核参数 echo "kernel.sem = 250 32000 100 500" >> /etc/sysctl.conf echo "fs.file-max = 6815744" >> /etc/sysctl.conf sysctl -p # 修改用户限制 echo "dmdba soft nofile 65536" >> /etc/security/limits.conf echo "dmdba hard nofile 65536" >> /etc/security/limits.conf
2.3 共享存储配置
共享存储是DMDSC的核心组件,建议按以下步骤配置:
- 在存储设备上创建LUN并映射到所有节点
- 在各节点上配置多路径(如使用multipath):
yum install -y device-mapper-multipath mpathconf --enable --with_multipathd y systemctl start multipathd - 在所有节点上验证存储可见性:
multipath -ll fdisk -l
3. DMDSC安装步骤详解
3.1 基础软件安装
创建安装用户和组:
groupadd dinstall useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba echo "dmdba:Dameng123" | chpasswd上传安装包并解压:
mkdir -p /opt/dmdbms tar -zxvf dm8_20230104_x86_rh6_64.tar.gz -C /opt/dmdbms chown -R dmdba:dinstall /opt/dmdbms执行图形化安装(需X11转发或本地桌面):
su - dmdba cd /opt/dmdbms ./DMInstall.bin安装过程中注意:
- 选择"集群安装"模式
- 指定共享存储路径(如/dev/mapper/mpatha)
- 设置合理的实例名和端口(默认5236)
3.2 集群初始化配置
生成集群配置文件dmdcr_cfg.ini:
[DCR] DCR_N_GRP = 2 DCR_VTD_PATH = /dev/mapper/mpatha DCR_OGUID = 63635 [NODE] DCR_NODE_NAME = DMSERVER1 DCR_NODE_ID = 0 DCR_ASM_PORT = 5238 DCR_DB_PORT = 5236 [NODE] DCR_NODE_NAME = DMSERVER2 DCR_NODE_ID = 1 DCR_ASM_PORT = 5238 DCR_DB_PORT = 5236初始化共享存储:
/opt/dmdbms/bin/dminit path=/dmdata extent_size=16 page_size=8 case_sensitive=1启动集群服务:
# 各节点分别执行 /opt/dmdbms/bin/dmserver path=/dmdata/dm.ini dcr_ini=/opt/dmdbms/config/dmdcr_cfg.ini
3.3 集群验证
查看集群状态:
SELECT * FROM V$DSC_EP; SELECT * FROM V$DSC_NODE_INFO;测试故障转移:
- 在主节点执行:
/opt/dmdbms/bin/DmServiceDMSERVER stop - 在备节点观察接管日志
- 验证应用连接是否自动切换到存活节点
- 在主节点执行:
4. 高级配置与优化
4.1 网络冗余配置
为提高集群可靠性,建议配置网络绑定:
创建bond接口:
nmcli con add type bond con-name bond0 ifname bond0 mode active-backup nmcli con add type bond-slave ifname eth1 master bond0 nmcli con add type bond-slave ifname eth2 master bond0配置心跳网络:
nmcli con mod bond0 ipv4.addresses 192.168.100.10/24 nmcli con mod bond0 ipv4.method manual nmcli con up bond0
4.2 存储性能优化
调整I/O调度器:
echo deadline > /sys/block/sdb/queue/scheduler配置ASM磁盘组(可选):
CREATE DISKGROUP DATA NORMAL REDUNDANCY FAILGROUP fg1 DISK '/dev/mapper/mpatha' NAME dg1 FAILGROUP fg2 DISK '/dev/mapper/mpathb' NAME dg2;
4.3 参数调优建议
关键数据库参数调整:
-- 内存配置 ALTER SYSTEM SET 'MEMORY_TARGET' = 16G SCOPE=BOTH; ALTER SYSTEM SET 'MEMORY_MAX_TARGET' = 32G SCOPE=BOTH; -- 集群参数 ALTER SYSTEM SET 'DSC_TIMEOUT' = 30 SCOPE=BOTH; ALTER SYSTEM SET 'DSC_EP_SEQNO' = 1 SCOPE=BOTH;5. 常见问题与解决方案
5.1 安装阶段问题
问题1:共享存储无法识别
- 现象:节点无法看到共享磁盘
- 排查:
# 检查多路径状态 multipath -ll # 检查SCSI设备 lsscsi - 解决:确认存储映射正确,重启multipathd服务
问题2:集群服务无法启动
- 现象:DMSERVER启动报错"Failed to lock DCR disk"
- 原因:共享存储被其他节点锁定
- 解决:确保只有一个节点在初始化,检查存储路径权限
5.2 运行阶段问题
问题1:脑裂(Split-Brain)
- 现象:节点间失去通信,各自认为自己是主节点
- 解决:
- 手动停止所有节点服务
- 检查网络连接
- 通过强制参数启动:
dmserver path=/dmdata/dm.ini dcr_ini=/opt/dmdbms/config/dmdcr_cfg.ini dcr_force_start=1
问题2:性能下降
- 现象:集群响应变慢
- 排查:
-- 查看等待事件 SELECT * FROM V$SYSTEM_EVENT WHERE WAIT_CLASS != 'Idle'; -- 检查I/O负载 SELECT * FROM V$FILESTAT; - 解决:优化存储配置,调整检查点参数
5.3 维护操作指南
节点扩容步骤:
- 在新节点安装达梦软件
- 修改dcr_cfg.ini添加新节点配置
- 重启集群服务
数据备份策略:
# 在线热备 /opt/dmdbms/bin/dmrman BACKUP DATABASE '/dmdata/dm.ini' FULL TO BACKUP_FILE; # 归档日志备份 /opt/dmdbms/bin/dmrman ARCHIVELOG ALL DELETE INPUT;版本升级流程:
- 停止所有节点服务
- 备份数据库和配置文件
- 逐个节点升级软件
- 验证兼容性后启动集群
6. 监控与日常管理
6.1 关键监控指标
建议监控以下集群指标:
| 指标类别 | 具体指标 | 正常范围 |
|---|---|---|
| 节点状态 | DSC_NODE_STATUS | 1(在线) |
| 网络延迟 | DSC_NET_LATENCY | <50ms |
| 存储延迟 | DSC_IO_LATENCY | <20ms |
| 负载均衡 | DSC_LOAD_BALANCE | 差值<30% |
6.2 自动化运维脚本
集群状态检查脚本:
#!/bin/bash DM_HOME=/opt/dmdbms $DM_HOME/bin/disql SYSDBA/SYSDBA@localhost:5236 -e "SELECT * FROM V$DSC_EP;" > /tmp/dsc_status.log自动故障通知脚本:
#!/bin/bash STATUS=$(/opt/dmdbms/bin/disql -s SYSDBA/SYSDBA@localhost:5236 <<EOF SET HEADING OFF SELECT STATUS FROM V\$DSC_EP WHERE EP_NAME='DMSERVER1'; EXIT EOF) if [ "$STATUS" != "1" ]; then mail -s "DMDSC Alert: Node DMSERVER1 Down" admin@example.com < /dev/null fi
6.3 性能优化建议
SQL优化方向:
-- 查找高负载SQL SELECT * FROM V$SQL_AREA ORDER BY ELAPSED_TIME DESC; -- 创建适当索引 CREATE INDEX idx_emp_name ON employee(emp_name);内存调整建议:
-- 调整缓冲池 ALTER SYSTEM SET 'BUFFER_POOLS' = 4 SCOPE=BOTH; -- 调整排序区 ALTER SYSTEM SET 'SORT_AREA_SIZE' = 256M SCOPE=BOTH;定期维护任务:
-- 统计信息收集 ANALYZE TABLE employee COMPUTE STATISTICS; -- 碎片整理 ALTER TABLE employee SHRINK SPACE;
在实际生产环境中运行DMDSC集群时,建议建立完整的监控体系,定期检查集群健康状态,特别是在业务高峰期前后。对于关键业务系统,可以考虑部署三节点集群进一步提高可用性。存储方面,采用全闪存阵列可以显著提升集群性能,特别是在高并发写入场景下。