达梦数据库共享集群(DMDSC)部署与优化指南
1. 达梦数据库共享集群(DMDSC)概述
达梦数据库共享存储集群(DM Data Shared Cluster,简称DMDSC)是达梦数据库管理系统中的高可用解决方案。它通过多节点共享同一存储设备的方式,实现数据库服务的高可用性和负载均衡。在实际生产环境中,DMDSC能够有效避免单点故障,确保业务连续性。
DMDSC架构通常由以下几个核心组件构成:
- 共享存储设备(通常采用SAN或NAS)
- 至少两个数据库服务器节点
- 高速互联网络
- 集群管理软件
这种架构下,所有节点可以同时访问相同的数据库文件,当一个节点发生故障时,其他节点可以立即接管服务,实现故障转移(Failover)而不需要数据迁移。
2. 安装前准备工作
2.1 硬件环境要求
部署DMDSC集群需要满足以下硬件条件:
| 组件 | 最低配置要求 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 16核及以上 |
| 内存 | 16GB | 64GB及以上 |
| 存储 | 共享存储阵列,100GB可用空间 | 高性能SAN存储,1TB以上 |
| 网络 | 千兆以太网 | 万兆以太网或InfiniBand |
特别需要注意的是,共享存储必须支持SCSI-3 Persistent Reservation协议,这是DMDSC正常工作的基础。
2.2 软件环境准备
- 操作系统:支持主流Linux发行版(CentOS/RHEL 7.4+、麒麟V10、统信UOS等)
- 依赖包:
yum install -y libaio-devel numactl libnsl - 内核参数调整:
echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf echo "fs.file-max = 6815744" >> /etc/sysctl.conf sysctl -p - 用户和组:
groupadd dinstall useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba echo "dmdba:Dameng123" | chpasswd
2.3 共享存储配置
共享存储的配置是DMDSC部署的关键环节。以下是常见的配置步骤:
- 在存储设备上创建LUN并映射到所有集群节点
- 在各节点上执行以下操作:
rescan-scsi-bus.sh multipath -ll - 配置多路径(以DM-MPIO为例):
添加以下内容:vi /etc/multipath.confdefaults { user_friendly_names yes } devices { device { vendor "DM" product ".*" path_grouping_policy group_by_prio path_checker tur features "1 queue_if_no_path" prio "const" failback immediate } }
3. DMDSC安装步骤详解
3.1 安装介质准备
从达梦官网下载最新版本的DMDSC安装包(通常为ISO格式),上传到所有节点。假设安装包名为dm8_20230630_x86_rh7_64_dsc.iso。
mkdir -p /mnt/dmiso mount -o loop dm8_20230630_x86_rh7_64_dsc.iso /mnt/dmiso3.2 图形化安装过程
- 切换到dmdba用户:
su - dmdba - 启动安装程序:
cd /mnt/dmiso ./DMInstall.bin - 在安装向导中选择"安装达梦数据库共享存储集群"
- 配置参数:
- 安装路径:/dm8
- 集群名称:DMDSC_CLUSTER
- 节点列表:添加所有参与集群的节点IP
- 投票磁盘:选择共享存储上的特定分区(通常需要至少3个投票磁盘)
注意:投票磁盘大小建议为1GB,且必须位于共享存储上。生产环境建议配置奇数个投票磁盘(3个或5个)以确保仲裁可用。
3.3 静默安装方式
对于自动化部署,可以使用静默安装方式。首先创建响应文件silent_install.xml:
<?xml version="1.0"?> <DATABASE> <TIME_ZONE>+08:00</TIME_ZONE> <INSTALL_TYPE>DMDSC</INSTALL_TYPE> <INSTALL_PATH>/dm8</INSTALL_PATH> <DSC_NODES> <NODE> <NODE_NAME>DSC01</NODE_NAME> <NODE_IP>192.168.1.101</NODE_IP> </NODE> <NODE> <NODE_NAME>DSC02</NODE_NAME> <NODE_IP>192.168.1.102</NODE_IP> </NODE> </DSC_NODES> <VOTING_DISKS> <DISK>/dev/mapper/mpatha</DISK> <DISK>/dev/mapper/mpathb</DISK> <DISK>/dev/mapper/mpathc</DISK> </VOTING_DISKS> </DATABASE>然后执行安装命令:
./DMInstall.bin -q silent_install.xml4. 集群配置与优化
4.1 初始化数据库实例
在所有节点上执行以下命令初始化数据库:
cd /dm8/bin ./dminit path=/dm8/data page_size=16 extent_size=32 case_sensitive=1关键参数说明:
- page_size:数据页大小,OLTP建议16KB,OLAP建议32KB
- extent_size:簇大小,通常设置为页大小的倍数
- case_sensitive:是否区分大小写,根据业务需求设置
4.2 配置dm.ini文件
修改/dm8/data/DAMENG/dm.ini文件,添加以下DMDSC相关参数:
INSTANCE_NAME = DSC01 # 各节点名称不同 DSC_NODE_NAME = DSC01 DSC_NODE_IP = 192.168.1.101 DSC_NODE_PORT = 5236 DSC_SEQNO = 1 # 各节点序号不同 DSC_CONTROL_PATH = /dev/raw/raw1 # 控制文件路径4.3 配置dmdcr_cfg.ini
这是DMDSC的核心配置文件,内容示例:
[SYSTEM] DCR_N_EP = 2 # 节点数量 DCR_VTD_PATH = /dev/mapper/mpatha # 投票磁盘路径 DCR_VTD_SIZE = 1024 # 投票磁盘大小(MB) [NODE] DCR_NODE_NAME = DSC01 DCR_NODE_IP = 192.168.1.101 DCR_NODE_PORT = 9341 [NODE] DCR_NODE_NAME = DSC02 DCR_NODE_IP = 192.168.1.102 DCR_NODE_PORT = 93414.4 启动集群服务
按照特定顺序启动集群服务:
- 首先在所有节点上启动DMASM服务:
./dmasmsvr dcr_ini=/dm8/data/dmdcr_cfg.ini - 然后在主节点上初始化DMASM磁盘组:
执行以下命令创建磁盘组:./dmasmtool dcr_ini=/dm8/data/dmdcr_cfg.inicreate diskgroup 'DGROUPA' asmdisk '/dev/mapper/mpathd'; - 最后在所有节点上启动数据库实例:
./dmserver path=/dm8/data/DAMENG/dm.ini dcr_ini=/dm8/data/dmdcr_cfg.ini
5. 集群管理与维护
5.1 常用管理命令
查看集群状态:
./disql SYSDBA/SYSDBA@localhost:5236 SQL> select * from v$dsc_ep_info;节点状态控制:
# 停止节点 ./dmcssmgr stop -n DSC01 # 启动节点 ./dmcssmgr start -n DSC01资源组管理:
-- 创建资源组 CREATE RESOURCE GROUP rg1 WITH ( NODE_LIST='DSC01,DSC02', TYPE='NORMAL' ); -- 将数据库绑定到资源组 ALTER DATABASE MAIN ADD TO RESOURCE GROUP rg1;
5.2 性能监控与优化
关键性能视图:
-- 集群负载情况 SELECT * FROM V$DSC_LOAD_BALANCE; -- 共享存储I/O性能 SELECT * FROM V$ASM_DISK_STAT; -- 节点间通信延迟 SELECT * FROM V$DSC_NETWORK_LATENCY;优化建议:
- 调整共享存储的I/O调度器为deadline或noop
- 增加ASM磁盘组的AU_SIZE(通常设置为4MB)
- 优化网络参数,提高节点间通信效率
5.3 备份与恢复策略
DMDSC环境下的备份策略需要考虑集群特性:
在线备份:
./dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/full_backup'"归档日志配置:
# 修改dm.ini ARCH_INI = 1 # 配置dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dm8/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 102400灾难恢复演练:
# 模拟节点故障 ./dmcssmgr stop -n DSC01 # 验证自动切换 ./disql SYSDBA/SYSDBA@DSC02:5236 SQL> SELECT * FROM V$DSC_EP_INFO;
6. 常见问题与解决方案
6.1 安装部署问题
问题1:安装过程中提示共享存储不可访问
解决方案:
- 检查多路径配置是否正确
- 确认所有节点都能看到相同的设备WWID
- 验证SCSI-3 Persistent Reservation支持:
sg_persist -i /dev/mapper/mpatha
问题2:投票磁盘初始化失败
解决方案:
- 确保投票磁盘是裸设备(未格式化)
- 检查磁盘权限:
chown dmdba:dinstall /dev/mapper/mpath* - 确认磁盘大小至少1GB
6.2 运行维护问题
问题1:节点间通信延迟高
解决方案:
- 使用专用网络用于集群通信
- 调整网络参数:
echo "net.core.rmem_max=4194304" >> /etc/sysctl.conf echo "net.core.wmem_max=4194304" >> /etc/sysctl.conf sysctl -p
问题2:脑裂(Split-Brain)情况处理
解决方案:
- 增加投票磁盘数量(至少3个)
- 配置隔离(Fencing)策略
- 手动恢复步骤:
./dmcssmgr stop -n ALL # 在主节点上 ./dmasmtool -recover ./dmcssmgr start -n PRIMARY
6.3 性能问题
问题1:共享存储I/O瓶颈
解决方案:
- 优化ASM磁盘组配置:
ALTER DISKGROUP DGROUPA REBALANCE POWER 11; - 考虑使用SSD或NVMe存储
- 调整数据库参数:
# dm.ini MAX_OS_MEMORY = 80 BUFFER = 20000
问题2:节点负载不均衡
解决方案:
- 检查资源组配置:
SELECT * FROM V$RESOURCE_GROUP; - 调整服务分布:
ALTER RESOURCE GROUP rg1 MODIFY (NODE_WEIGHT='DSC01:60,DSC02:40');
7. 生产环境最佳实践
7.1 硬件配置建议
存储配置:
- 使用高性能SAN存储,配置多路径冗余
- 为数据、日志、备份分配独立的LUN
- 考虑使用Flash存储用于重做日志
网络设计:
- 节点间使用至少双万兆网络
- 分离业务网络和集群通信网络
- 考虑使用RDMA技术降低延迟
7.2 参数调优经验
关键内存参数:
MEMORY_TARGET = 40G MEMORY_MAX_TARGET = 64G BUFFER = 32G并发控制参数:
MAX_SESSIONS = 1000 TRANSACTION_TABLE_SIZE = 8192I/O优化参数:
DISK_IO_THREADS = 16 LOG_BUFFER_SIZE = 64M
7.3 监控方案设计
推荐监控指标:
| 类别 | 监控项 | 告警阈值 |
|---|---|---|
| 集群 | 节点状态 | 任何节点不可用 |
| 存储 | ASM磁盘组剩余空间 | <20% |
| 性能 | 节点间延迟 | >5ms |
| 资源 | CPU使用率 | >80%持续5分钟 |
可以使用Prometheus+Grafana搭建监控平台,配置如下采集器:
scrape_configs: - job_name: 'dmdsc' static_configs: - targets: ['DSC01:5236', 'DSC02:5236'] metrics_path: '/metrics' params: user: ['MONITOR'] password: ['Monitor123']8. 扩展与升级
8.1 节点扩展步骤
- 准备新节点硬件环境
- 安装达梦数据库软件
- 修改dmdcr_cfg.ini,增加新节点配置
- 更新所有节点的配置文件
- 启动新节点的DMASM服务
- 将新节点加入集群:
./dmcssmgr add -n DSC03 -i 192.168.1.103 -p 9341
8.2 版本升级策略
滚动升级步骤:
- 逐个停止节点
- 升级软件版本
- 重新启动节点
- 验证集群功能
注意事项:
- 确保共享存储兼容性
- 先升级DMASM服务
- 保留回滚方案
8.3 与其他系统集成
与DBeaver连接:
- 下载达梦JDBC驱动
- 在DBeaver中创建连接,选择DM7/8类型
- 配置连接参数:
URL: jdbc:dm://DSC01:5236 驱动类: dm.jdbc.driver.DmDriver
与Zabbix监控集成:
- 使用达梦提供的监控模板
- 配置自动发现规则
- 设置触发器表达式
容器化部署:
FROM centos:7 COPY dm8_20230630_x86_rh7_64_dsc.iso /tmp RUN yum install -y libaio && \ mount -o loop /tmp/dm8_20230630_x86_rh7_64_dsc.iso /mnt && \ /mnt/DMInstall.bin -q silent_install.xml && \ umount /mnt EXPOSE 5236 9341 CMD ["/dm8/bin/dmserver", "path=/dm8/data/DAMENG/dm.ini"]
在实际部署DMDSC集群时,我发现配置文件的同步维护是个挑战。为此,我开发了一个简单的配置同步脚本,可以自动将主节点的配置同步到其他节点:
#!/bin/bash # sync_dm_config.sh PRIMARY_NODE="DSC01" CONFIG_FILES=("/dm8/data/dmdcr_cfg.ini" "/dm8/data/DAMENG/dm.ini") for node in DSC02 DSC03; do for file in "${CONFIG_FILES[@]}"; do scp ${PRIMARY_NODE}:${file} /tmp/ ssh $node "cp /tmp/$(basename $file) ${file}" done done这个脚本需要在crontab中设置定时任务,确保配置变更能够及时同步到所有节点。同时建议在修改重要配置前,先备份原有配置文件。
