部署与优化指南)
1. 达梦数据库共享集群DMDSC概述达梦数据库共享存储集群DM Data Shared Cluster简称DMDSC是达梦数据库管理系统中的高可用解决方案。它通过多节点共享同一存储设备的方式实现数据库服务的高可用性和负载均衡。在实际生产环境中DMDSC能够有效避免单点故障确保业务连续性。DMDSC架构通常由以下几个核心组件构成共享存储设备通常采用SAN或NAS至少两个数据库服务器节点高速互联网络集群管理软件这种架构下所有节点可以同时访问相同的数据库文件当一个节点发生故障时其他节点可以立即接管服务实现故障转移Failover而不需要数据迁移。2. 安装前准备工作2.1 硬件环境要求部署DMDSC集群需要满足以下硬件条件组件最低配置要求推荐配置CPU4核16核及以上内存16GB64GB及以上存储共享存储阵列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 | chpasswd2.3 共享存储配置共享存储的配置是DMDSC部署的关键环节。以下是常见的配置步骤在存储设备上创建LUN并映射到所有集群节点在各节点上执行以下操作rescan-scsi-bus.sh multipath -ll配置多路径以DM-MPIO为例vi /etc/multipath.conf添加以下内容defaults { 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 version1.0? DATABASE TIME_ZONE08:00/TIME_ZONE INSTALL_TYPEDMDSC/INSTALL_TYPE INSTALL_PATH/dm8/INSTALL_PATH DSC_NODES NODE NODE_NAMEDSC01/NODE_NAME NODE_IP192.168.1.101/NODE_IP /NODE NODE NODE_NAMEDSC02/NODE_NAME NODE_IP192.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_size16 extent_size32 case_sensitive1关键参数说明page_size数据页大小OLTP建议16KBOLAP建议32KBextent_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.ini执行以下命令创建磁盘组create diskgroup DGROUPA asmdisk /dev/mapper/mpathd;最后在所有节点上启动数据库实例./dmserver path/dm8/data/DAMENG/dm.ini dcr_ini/dm8/data/dmdcr_cfg.ini5. 集群管理与维护5.1 常用管理命令查看集群状态./disql SYSDBA/SYSDBAlocalhost:5236 SQL select * from v$dsc_ep_info;节点状态控制# 停止节点 ./dmcssmgr stop -n DSC01 # 启动节点 ./dmcssmgr start -n DSC01资源组管理-- 创建资源组 CREATE RESOURCE GROUP rg1 WITH ( NODE_LISTDSC01,DSC02, TYPENORMAL ); -- 将数据库绑定到资源组 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 CTLSTMTBACKUP 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/SYSDBADSC02: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*确认磁盘大小至少1GB6.2 运行维护问题问题1节点间通信延迟高解决方案使用专用网络用于集群通信调整网络参数echo net.core.rmem_max4194304 /etc/sysctl.conf echo net.core.wmem_max4194304 /etc/sysctl.conf sysctl -p问题2脑裂Split-Brain情况处理解决方案增加投票磁盘数量至少3个配置隔离Fencing策略手动恢复步骤./dmcssmgr stop -n ALL # 在主节点上 ./dmasmtool -recover ./dmcssmgr start -n PRIMARY6.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_WEIGHTDSC01: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 64M7.3 监控方案设计推荐监控指标类别监控项告警阈值集群节点状态任何节点不可用存储ASM磁盘组剩余空间20%性能节点间延迟5ms资源CPU使用率80%持续5分钟可以使用PrometheusGrafana搭建监控平台配置如下采集器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 93418.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_NODEDSC01 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中设置定时任务确保配置变更能够及时同步到所有节点。同时建议在修改重要配置前先备份原有配置文件。