三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

达梦数据库共享集群(DMDSC)部署与优化指南

达梦数据库共享集群(DMDSC)部署与优化指南

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 软件环境准备

  1. 操作系统:支持主流Linux发行版(CentOS/RHEL 7.4+、麒麟V10、统信UOS等)
  2. 依赖包
    yum install -y libaio-devel numactl libnsl
  3. 内核参数调整
    echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf echo "fs.file-max = 6815744" >> /etc/sysctl.conf sysctl -p
  4. 用户和组
    groupadd dinstall useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba echo "dmdba:Dameng123" | chpasswd

2.3 共享存储配置

共享存储的配置是DMDSC部署的关键环节。以下是常见的配置步骤:

  1. 在存储设备上创建LUN并映射到所有集群节点
  2. 在各节点上执行以下操作:
    rescan-scsi-bus.sh multipath -ll
  3. 配置多路径(以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/dmiso

3.2 图形化安装过程

  1. 切换到dmdba用户:
    su - dmdba
  2. 启动安装程序:
    cd /mnt/dmiso ./DMInstall.bin
  3. 在安装向导中选择"安装达梦数据库共享存储集群"
  4. 配置参数:
    • 安装路径:/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.xml

4. 集群配置与优化

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 = 9341

4.4 启动集群服务

按照特定顺序启动集群服务:

  1. 首先在所有节点上启动DMASM服务:
    ./dmasmsvr dcr_ini=/dm8/data/dmdcr_cfg.ini
  2. 然后在主节点上初始化DMASM磁盘组:
    ./dmasmtool dcr_ini=/dm8/data/dmdcr_cfg.ini
    执行以下命令创建磁盘组:
    create diskgroup 'DGROUPA' asmdisk '/dev/mapper/mpathd';
  3. 最后在所有节点上启动数据库实例:
    ./dmserver path=/dm8/data/DAMENG/dm.ini dcr_ini=/dm8/data/dmdcr_cfg.ini

5. 集群管理与维护

5.1 常用管理命令

  1. 查看集群状态:

    ./disql SYSDBA/SYSDBA@localhost:5236 SQL> select * from v$dsc_ep_info;
  2. 节点状态控制:

    # 停止节点 ./dmcssmgr stop -n DSC01 # 启动节点 ./dmcssmgr start -n DSC01
  3. 资源组管理:

    -- 创建资源组 CREATE RESOURCE GROUP rg1 WITH ( NODE_LIST='DSC01,DSC02', TYPE='NORMAL' ); -- 将数据库绑定到资源组 ALTER DATABASE MAIN ADD TO RESOURCE GROUP rg1;

5.2 性能监控与优化

  1. 关键性能视图:

    -- 集群负载情况 SELECT * FROM V$DSC_LOAD_BALANCE; -- 共享存储I/O性能 SELECT * FROM V$ASM_DISK_STAT; -- 节点间通信延迟 SELECT * FROM V$DSC_NETWORK_LATENCY;
  2. 优化建议:

    • 调整共享存储的I/O调度器为deadline或noop
    • 增加ASM磁盘组的AU_SIZE(通常设置为4MB)
    • 优化网络参数,提高节点间通信效率

5.3 备份与恢复策略

DMDSC环境下的备份策略需要考虑集群特性:

  1. 在线备份:

    ./dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/full_backup'"
  2. 归档日志配置:

    # 修改dm.ini ARCH_INI = 1 # 配置dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dm8/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 102400
  3. 灾难恢复演练:

    # 模拟节点故障 ./dmcssmgr stop -n DSC01 # 验证自动切换 ./disql SYSDBA/SYSDBA@DSC02:5236 SQL> SELECT * FROM V$DSC_EP_INFO;

6. 常见问题与解决方案

6.1 安装部署问题

问题1:安装过程中提示共享存储不可访问

解决方案

  1. 检查多路径配置是否正确
  2. 确认所有节点都能看到相同的设备WWID
  3. 验证SCSI-3 Persistent Reservation支持:
    sg_persist -i /dev/mapper/mpatha

问题2:投票磁盘初始化失败

解决方案

  1. 确保投票磁盘是裸设备(未格式化)
  2. 检查磁盘权限:
    chown dmdba:dinstall /dev/mapper/mpath*
  3. 确认磁盘大小至少1GB

6.2 运行维护问题

问题1:节点间通信延迟高

解决方案

  1. 使用专用网络用于集群通信
  2. 调整网络参数:
    echo "net.core.rmem_max=4194304" >> /etc/sysctl.conf echo "net.core.wmem_max=4194304" >> /etc/sysctl.conf sysctl -p

问题2:脑裂(Split-Brain)情况处理

解决方案

  1. 增加投票磁盘数量(至少3个)
  2. 配置隔离(Fencing)策略
  3. 手动恢复步骤:
    ./dmcssmgr stop -n ALL # 在主节点上 ./dmasmtool -recover ./dmcssmgr start -n PRIMARY

6.3 性能问题

问题1:共享存储I/O瓶颈

解决方案

  1. 优化ASM磁盘组配置:
    ALTER DISKGROUP DGROUPA REBALANCE POWER 11;
  2. 考虑使用SSD或NVMe存储
  3. 调整数据库参数:
    # dm.ini MAX_OS_MEMORY = 80 BUFFER = 20000

问题2:节点负载不均衡

解决方案

  1. 检查资源组配置:
    SELECT * FROM V$RESOURCE_GROUP;
  2. 调整服务分布:
    ALTER RESOURCE GROUP rg1 MODIFY (NODE_WEIGHT='DSC01:60,DSC02:40');

7. 生产环境最佳实践

7.1 硬件配置建议

  1. 存储配置

    • 使用高性能SAN存储,配置多路径冗余
    • 为数据、日志、备份分配独立的LUN
    • 考虑使用Flash存储用于重做日志
  2. 网络设计

    • 节点间使用至少双万兆网络
    • 分离业务网络和集群通信网络
    • 考虑使用RDMA技术降低延迟

7.2 参数调优经验

  1. 关键内存参数

    MEMORY_TARGET = 40G MEMORY_MAX_TARGET = 64G BUFFER = 32G
  2. 并发控制参数

    MAX_SESSIONS = 1000 TRANSACTION_TABLE_SIZE = 8192
  3. I/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 节点扩展步骤

  1. 准备新节点硬件环境
  2. 安装达梦数据库软件
  3. 修改dmdcr_cfg.ini,增加新节点配置
  4. 更新所有节点的配置文件
  5. 启动新节点的DMASM服务
  6. 将新节点加入集群:
    ./dmcssmgr add -n DSC03 -i 192.168.1.103 -p 9341

8.2 版本升级策略

  1. 滚动升级步骤:

    • 逐个停止节点
    • 升级软件版本
    • 重新启动节点
    • 验证集群功能
  2. 注意事项:

    • 确保共享存储兼容性
    • 先升级DMASM服务
    • 保留回滚方案

8.3 与其他系统集成

  1. 与DBeaver连接

    • 下载达梦JDBC驱动
    • 在DBeaver中创建连接,选择DM7/8类型
    • 配置连接参数:
      URL: jdbc:dm://DSC01:5236 驱动类: dm.jdbc.driver.DmDriver
  2. 与Zabbix监控集成

    • 使用达梦提供的监控模板
    • 配置自动发现规则
    • 设置触发器表达式
  3. 容器化部署

    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中设置定时任务,确保配置变更能够及时同步到所有节点。同时建议在修改重要配置前,先备份原有配置文件。

← 返回列表