☰
达梦DMDSC共享集群安装部署实战:从架构规划到故障验证
2026/10/19 5:23:14 网站建设 项目流程

第一次接触达梦数据库的DMDSC,是在一套需要7×24小时连续运行的生产系统上。那时候我对共享集群的认知基本还停留在"几个节点连一套盘"的粗糙印象上,以为装DMDSC就是配好几台机器、把共享盘一挂就能跑起来。等真正把环境从无到有搭出来,才发现达梦数据库共享集群的安装部署里,最花时间的从来不是敲命令,而是环境规划、组件依赖关系的理解,以及部署完成之后的验证思路。这篇文章就把我实操DMDSC安装部署的完整路径、关键决策点和踩过的坑梳理一遍,给准备上共享集群、或者正在硬着头皮翻官方文档的同行一个可以直接参考的思路。

文章覆盖的内容包括:安装前必须想清楚的架构问题、存储网络系统参数这些前置条件、DMASM与DMCSS的配置顺序、实例初始化与服务拉起验证、以及部署完之后的日志巡检和故障处理。适合正在做技术选型评估、第一次部署DMDSC、或者部署完不知道怎么验证可用性的数据库管理员和运维同学参考。

1. 装DMDSC之前,先想清楚这几个架构问题

1.1 DMDSC到底解决什么问题

DMDSC是达梦数据库的共享存储集群方案,核心思路是让多个数据库实例同时访问同一套共享存储,对外表现为一个逻辑数据库。它解决的是两个层面的问题:一是节点级的可用性,某个实例所在的服务器宕机了,其他实例还能继续提供服务;二是计算能力的横向扩展,当业务并发上来之后,可以通过增加节点的方式提升整体处理能力,而不是简单地把硬件换成更大的。

这种架构和单机高可用方案有本质区别。单机主备模式是"一主一备、故障切换",备机平时不承接业务流量;而DMDSC是"多节点同时干活",所有节点都在处理请求,资源利用率更高。代价是复杂度显著上升——多个实例并发访问同一份数据,必然要解决数据一致性、缓存协调、节点状态同步这些问题。这也是为什么DMDSC对共享存储、内部网络、系统参数的要求都比单机环境苛刻得多。

我在做选型评估的时候,通常会先问三个问题:业务能不能接受共享存储作为唯一数据副本?内部网络有没有条件做到低延迟高带宽?运维团队有没有能力处理集群特有的故障场景?这三个问题只要有一个答案是否定的,我就会建议优先考虑达梦的主备方案,而不是硬上DMDSC。

1.2 组件分工:DMCSS、DMASM和实例各自干啥

很多新手看DMDSC的安装文档容易懵,就是因为文档里同时出现DMCSS、DMASM、实例这些名词,却不解释它们之间是什么关系。我习惯用一个"大楼"的类比来理解:共享存储是地基和墙体,实例是住在楼里的住户,DMASM是物业公司,负责管钥匙、管公共空间分配,而DMCSS是保安队长,负责盯着每个住户是不是还活着,谁掉线了就要及时处理。

具体到组件层面,它们的分工非常清晰:

组件作用类比
DMASM管理共享存储的磁盘组,为实例提供数据文件的存放空间物业公司,管理公共空间
DMCSS集群同步服务,监控各节点状态、决策节点故障后的处理动作保安队长,盯梢与应急
DMCSSM集群监控进程,维护集群配置信息,提供管理接口保安队的台账系统
DMSERVER实例真正承接SQL请求的数据库进程楼里的住户,实际干活的人

这套分工决定了安装顺序:必须先让DMASM把共享存储管起来,DMCSS才能监控集群状态,实例才能把数据文件放到ASM磁盘组里。任何一步顺序颠倒,后面都会出现"服务起来了但数据文件找不到"或者"监控进程等不到ASM响应"的诡异问题。

1.3 不适合上DMDSC的场景(这也是很重要的决策点)

DMDSC确实能把可用性和扩展性做到一个很高的水平,但它不是银弹。我见过有些项目为了"上集群"而上集群,最后反而把系统搞得更脆弱。以下场景我通常不建议用DMDSC:

第一,没有真正可用的共享存储条件。这里的"共享存储"指的是SAN、iSCSI这类能让多个服务器同时读写同一块磁盘的存储方案。两台服务器各自挂本地盘、用rsync等工具做数据同步,那不叫共享集群,那只是被包装成集群的伪方案。第二,业务以单节点写为主、读压力也不大。这种情况下DMDSC带来的并发扩展优势发挥不出来,反而增加一致性协调的开销。第三,内部网络质量不可控。DMDSC的节点之间要频繁同步状态信息,私网如果经常抖动、延迟忽高忽低,集群很容易出现误判和节点反复重启。第四,运维团队没有集群运维经验且短期无法补齐。共享集群的故障场景和单机完全不同,从"会装"到"会运维"之间有不小的距离。

把这个决策点放在文章最开始,是想强调一个容易被忽略的事实:安装部署的成败,在选定架构的那一刻就已经决定了大半。

2. 环境准备里最容易翻车的三块:存储、网络、系统参数

2.1 共享存储:LUN规划与udev权限

DMDSC对共享存储的要求不是"能共享"就行,而是要细致规划。我在实际项目中把共享盘分成两类:一类是给小体量的集群元数据和监控信息用的,单独划一个小容量LUN,不需要太大但必须独立;另一类是数据文件、联机日志用的正式数据盘,容量按业务增长预期预留,宁多勿少。这种分离的好处是,即使数据盘操作频繁,也不会干扰到集群自身状态信息的读写。

LUN划分完之后,真正容易翻车的是操作系统层的权限配置。DMDSC相关的服务进程通常以dmdba用户运行,所以共享盘必须让dmdba有完整的读写权限。Linux环境下建议用udev规则来固定磁盘所有权和权限,而不是每次重启之后手动chmod。我见过一个生产环境,就是因为重启后共享盘的owner变成了root,DMASM启动时直接报权限错误,整个集群起不来,排查了大半天才发现只是udev规则写得不够严谨。

udev规则的关键点是绑定稳定的设备标识,而不是设备名。因为设备名可能因为探测顺序变化而漂移,比如开机后sdb和sdc互换。用磁盘的WWID或者UUID来识别设备,再通过udev规则设置OWNER和GROUP,这样即使设备名变了,权限也正确。配置完成后一定要验证一遍:重启服务器,然后检查共享盘在系统里是否以预期名字出现,owner是否还是dmdba。

另一个存储层面的坑是多路径。生产环境一般会用光纤或多路径方式连接SAN,操作系统里经常看到dm-0、dm-1这类多路径设备。DMASM在识别磁盘时要用多路径设备的路径,而不是底层物理路径,否则写入会把数据打散到不同路径,表面看没问题,一旦某个路径异常就会引发数据完整性风险。这个细节文档里经常一句话带过,但实际环境里必须反复确认。

2.2 网络规划与私网心跳设计

DMDSC部署必须规划至少两套网络:业务网络和集群内部通信网络。业务网络是应用连接数据库的通道,带宽按业务流量预估;集群内部通信网络则承载节点之间的状态同步、缓存协调这些信息,对延迟和稳定性极其敏感。

我在这块的建议是,内部网络一定要用独立的物理链路,不要和业务网络共享交换机,更不要走跨地域的远程链路。两个节点之间的心跳交换频率很高,如果和业务流量混在一起,高峰期很容易出现心跳超时,DMCSS会误以为节点故障而触发不必要的重启操作。条件允许的话,内部网络建议上万兆,至少也要千兆以上并做好网卡bond,同时把防火墙规则设置齐全,放通集群组件需要的端口范围。不要图省事关闭防火墙了事,安全性和稳定性要兼顾。

主机名和解析也是个容易被忽略的细节。所有节点的hostname要提前定好,写入各节点的/etc/hosts,确保节点之间可以通过主机名互相解析。我在环境里吃过亏:节点A能ping通节点B的IP,但解析主机名时超时,导致DMCSS在启动阶段等待节点注册超时,整个集群迟迟进入不了正常状态。网络这块不复杂,但每一项都要验证,不能想当然。

2.3 系统参数与用户环境准备

数据库类软件对操作系统参数都有基本要求,DMDSC涉及的进程更多,参数要求也更严格。以下这类参数至少要检查一遍:进程数限制、文件句柄数限制、共享内存大小、信号量参数、虚拟内存映射数量。这些参数具体怎么设,官方文档有明确表格,我通常直接按文档的建议值配置,不会自作主张调小,因为集群环境的进程数量比单机多出不少,很多莫名其妙的"服务启动失败"背后就是句柄或内存参数不够。

dmdba用户的创建和资源限制配置是常规操作,但这块有个值得注意的地方:ulimit的配置要确保对dmdba用户生效。有人只改/etc/security/limits.conf,却忘了确认dmdba的实际ulimit输出,结果配置没生效还以为是系统版本的问题。正确的做法是配置完重新登录dmdba用户,执行ulimit -n、ulimit -u这些命令逐项检查,确认生效后再继续后续安装。

目录规划方面,我建议把软件安装目录、实例配置目录、日志目录分开管理。软件安装目录放数据库软件本体,实例配置目录放每个节点的dm.ini等参数文件,日志目录放运行日志。这样做的最大好处是备份和问题排查时定位清晰。环境变量方面,DM_HOME、PATH、LD_LIBRARY_PATH这些要正确设置并写入dmdba的bashrc,后续用dmasmtool、dmcssm这些工具时才能直接在命令行里调用。

还有一个经常被忽略的基础项:时间同步。DMDSC的多个节点之间如果时钟偏差过大,节点状态判断和日志对齐都会出问题。部署前配置好NTP或chrony,让所有节点的时间保持基本一致,我会在环境检查清单里专门加这一项,避免后续排查问题时因为时间戳对不上白费功夫。

3. DMASM与DMCSS的配置顺序:先盘组,后集群服务

3.1 初始化ASM磁盘组的关键步骤

按照组件依赖关系,第一件要做的事是让DMASM能管理共享磁盘。达梦提供了对应的ASM管理工具,实际操作时以dmdba用户登录节点A,启动工具后把之前在存储层规划好的数据盘划分到ASM磁盘组里。

这一步有几个地方需要特别注意。第一个是磁盘组容量的规划。DMDSC里数据文件和联机日志都会放在ASM磁盘组上,容量要根据业务数据量、日志增长速度、以及未来两到三年的增长预期来定。磁盘组划小了后面扩容要动存储,动静很大;划大了又有资源浪费。我习惯按"现有数据量的三倍以上"来做初步估算,也给未来分区表、临时数据留出余地。

第二个是磁盘组设计要预留故障冗余空间。虽然DMDSC本身的节点可以互相接管,但共享存储层面如果一块物理盘坏了,影响的是所有节点。所以ASM磁盘组层面一定要考虑镜像或冗余策略,不能把宝全押在存储阵列的RAID上。磁盘组建立之后,用工具查看磁盘组状态,确认每个成员盘都是正常的,我觉得这一步最值得多花一分钟确认。

第三个注意事项是不要在同一块盘上既放数据又放ASM元数据。之前提到单独划一个小容量LUN给集群元数据,这个原则在这里依然适用。ASM元数据和数据文件混在一起,虽然不至于立刻出错,但出现问题之后定位难度会大很多。

我在创建磁盘组的时候习惯做一次全过程的记录——哪个LUN分给了哪个磁盘组、磁盘组名字是什么、容量多大、成员盘有哪些——这些信息整理成表格存档。等到后续排障、扩容的时候,这份记录可以省掉大量回忆和猜测的时间。

3.2 dmcss.ini与dmcssm.ini的核心配置项

DMASM磁盘组准备好之后,接下来就是配置DMCSS集群服务。这部分的配置文件主要是dmcss.ini,如果使用了DMCSSM监控组件,还涉及dmcssm.ini。对刚接触DMDSC的人来说,这一段的难点在于理解配置项的含义,而不是单纯的填写。

dmcss.ini里必须保证的关键信息包括:这个集群由哪几个节点组成、每个节点的CSS通信端口是什么、对应的ASM端口是什么、实例端口是什么、日志目录放在哪里。这些信息必须在每个节点上保持一致,节点自己的编号要填对。我见过的问题里,最常见的就是配置文件里节点编号和实际服务器对应关系填错,导致服务启动后DMCSS等待的节点一直不出现。

另一个重点是集群状态检查和故障处理的策略参数。比如节点心跳超时多久判定为故障、连续多少次失败才触发处理动作、故障节点如何处理——是尝试重启还是直接从集群中剔除。这些参数直接影响集群对真实故障和网络抖动的敏感度:参数太敏感,网络一抖动节点就被踢;参数太迟钝,真的故障半天反应不过来。我通常建议先在测试环境用业务低峰期的网络状况做参照,调到一个既能快速发现故障、又不会因为小抖动就误判的区间,然后再带到生产环境。不要直接照抄网上模板的参数值,每个环境的网络质量不一样,照抄容易出问题。

配置文件的权限也值得关注。dmcss.ini和dmcssm.ini里可能包含集群的敏感配置信息,文件属主要设置为dmdba,权限按常规数据库配置文件的规范设置,避免其他系统用户可读可写。

3.3 注册集群服务与启动顺序的控制

配置写好后,需要把相关组件注册成系统服务。达梦提供了服务注册脚本,在Linux环境下可以把DMCSS、DMASM和后续的数据库实例都注册为systemd服务,统一管理。注册服务的细节在大版本之间略有差异,但核心思路是一致的:指定好服务类型、实例名、配置文件路径,确认注册后服务能够开机自启或者手动启动。

服务注册完成之后,就到了集群启动的关键环节。启动顺序我建议按这个顺序来:DMCSS先启动,然后DMASM,最后数据库实例。第一次部署时不要偷懒用一条命令把三个服务一起拉起来,而是一个一个启动,每启动一个就去看日志确认状态正常,再启动下一个。这样即使出现问题,也能立刻定位到是哪个组件没起来,而不是三个服务同时失败后无从下手。

有一个常见的误解是:DMCSS启动之后会自动拉起所有后续组件,所以手动启动很简单。但第一次部署时恰恰不能依赖自动拉起机制。我见过有人直接用一条脚本启动所有服务,结果ASM还没就绪,实例就已经尝试连接共享磁盘组,反复报错,把问题搞得很难看。手动分步启动虽然慢一点,但每一步都看得清清楚楚,是第一次部署最稳妥的方式。

4. 实例初始化、服务拉起与可用性验证

4.1 实例参数与dminit初始化的注意点

集群服务和存储就绪后,就可以初始化数据库实例了。DMDSC环境下,各个节点要有自己的实例目录和参数文件,同时要告诉实例共享存储的位置。初始化操作的内容和时间点要仔细把握,因为这一步直接决定了数据文件在ASM磁盘组上的存放结构。

这里要特别说明一下,初始化实例时涉及的DMDSC相关配置项,不同版本之间会有差异,具体参数名和取值建议以手上版本号的官方安装手册为准。以我常用的部署流程为例,做完基础初始化之后,还要回到dm.ini里检查DMDSC相关的配置,确保实例以集群模式运行,并且DMCSS配置文件路径正确。漏掉这个环节的话,实例会按单机模式的预期去启动,找不到集群环境该有的依赖,启动大概率失败。

实例目录规划这块,我建议在每个节点本地留出足够的空间放参数文件和本地日志。共享存储放的是数据文件、联机日志这类全局数据,而每个节点的DM.ini、服务端日志、跟踪文件放在本地磁盘更合理。这么做的好处是,即使共享存储出现短暂问题,我们还能通过本地日志排查故障,不至于连日志都没得看。

初始化过程中还有几个容易忽略的小地方。比如初始化时选择的页大小、字符集、大小写敏感设置这类基础参数,在DMDSC集群环境下是先定好、后期很难改的,必须在初始化之前就和业务方达成一致。再比如归档日志路径的规划,DMDSC环境下归档一般要有独立存储位置,避免和数据文件抢空间。

4.2 用DMCSS拉起实例后的验证路径

所有配置就绪后,按照前面说的启动顺序拉起服务,接下来就是验证集群是否真正可用。很多部署工作到了这一步就觉得"系统起来了、任务完成",但"起来了"和"真正可用"之间还有很长一段距离。

第一层验证是集群成员状态。在任意一个节点上通过DMCSS相关管理入口或者集群管理工具查看当前集群的节点列表,确认所有节点都是正常状态,而不只是本机一个节点在线。我见过一种假象:节点A和节点B都各自认为自己是正常的,但因为配置不一致,两个节点其实各自为政,没有形成真正的集群。成员状态这一步就能把这种问题暴露出来。

第二层验证是实例连接与SQL执行。用达梦自带的数据库连接工具分别连接每个节点的实例,执行简单的建表、插入、查询操作,确认所有节点都能正常读写。另一个要测的动作是:在节点A上创建一张表,然后立即在节点B上查询这张表,验证集群的数据可见性是否正常。这个测试能暴露DMASM存储挂载或者缓存协调的问题,是集群场景特有的验证项。

第三层验证是日志检查。每个节点上去翻实例的运行日志和DMCSS日志,确认没有反复报错的记录。重点看DMCSS相关的成员状态日志,正常情况应该能看到节点间相互注册成功、周期心跳正常的记录。如果日志里有节点掉线又重连的记录,哪怕当前状态是正常的,也要认真对待——说明网络或者配置层面有不稳定的因素。

4.3 节点故障切换测试:别等上线后再第一次做演练

部署完成的最后一道工序,我认为也是最有价值的一道工序,就是做节点故障切换测试。有些人觉得生产系统刚装完,不敢动它、怕搞坏,但恰恰是这个时候做测试成本最低——还没有业务流量,测试出错也不会影响真实数据。如果等到上线后再第一次测试故障切换,真出问题时手忙脚乱的场景我见过太多了。

最基础的测试是杀实例进程。在一个节点上人为杀掉实例进程,模拟节点异常宕机,观察另一节点和DMCSS的反应。预期结果是:DMCSS检测到该节点状态异常,按照配置的策略进行处理,要么自动拉起该节点的服务,要么将该节点从可用列表剔除,但集群对外仍然可以由另一个节点提供服务。这个测试如果都过不了,那这集群只能在理论上"高可用"。

进阶一点的测试是模拟网络隔离。在两个节点之间断掉私网连接,观察DMCSS是否能正确识别"两个节点失联"的状态,并且不会出现脑裂——也就是两个节点都认为对方死了、都抢着接管数据的情况。脑裂是共享集群最危险的场景,DMCSS的设计就是通过在多数派和配置约定的机制上来规避这个风险。这个测试要谨慎进行,在测试环境做,不要一上来就拿生产环境练手。

每一轮故障测试都要记录:故障注入的时间点、DMCSS检测到故障需要多长时间、后续的处理动作是什么、恢复之后数据是否一致、集群成员是否都回归正常。这份记录既是交付文档的一部分,也是后续运维排障时的参照基准。我始终认为,一个没做过完整故障演练的DMDSC环境,和"半成品"没有区别。

5. 部署完成不等于结束:日志、巡检与常见故障处理

5.1 关键日志在哪儿、看什么

DMDSC环境跑起来之后,日常运维才刚开始。最重要的习惯是知道日志在哪里,以及每个日志文件里应该看什么。达梦的日志体系大致分成三块:DMCSS相关的日志记录集群成员状态和事件;DMASM相关的日志记录共享存储管理操作;实例日志记录SQL执行、错误、连接信息等。

我通常会在巡检时重点看DMCSS日志里有没有成员状态变化的记录,比如节点重启、节点掉线、重新加入集群这些事件。对这些事件要保持敏感度——如果一周内出现过两次无故掉线,说明环境里某个环节不稳,需要排查网络或存储,而不是等下次故障再处理。DMASM日志主要关注磁盘组状态变化和I/O异常,比如某个成员盘的读写出错。实例日志就按照单机环境一样的思路去查错误记录和慢SQL线索。

日志量大了之后,人工翻日志很不现实。建议做一个简单脚本,每天定时把各节点日志里级别较高、包含错误类关键字的记录抽取出来,汇总成一份每日巡检报告。不用做得太复杂,能让我每天花两分钟扫一眼有没有新增的可疑项就够了。这个习惯帮我提前发现过多次潜在问题,比等着告警来的更从容。

5.2 高频故障场景与排查思路

第一个高频故障是ASM磁盘不可用。现象通常是实例报错说找不到数据文件,或者DMASM服务异常。排查思路从存储层开始:确认共享盘在操作系统层面是否可见、权限是否正确、多路径状态是否正常,然后检查ASM磁盘组状态。这块我把命令顺序固定下来,每次都按这个顺序查,快速又不容易漏。

第二个高频故障是节点被DMCSS反复重启。现象是实例或节点刚启动没多久就被判断为故障,然后重启,循环往复。排查重点通常是心跳网络质量、节点负载、系统参数是否够用。我会先看DMCSS日志里记录的重启原因,再查看节点当时的资源和网络状况,不要凭感觉去改配置参数。

第三个高频故障是集群状态不一致,比如一个节点认为自己是主、另一个节点也认为自己是主,或者两个节点的视图对不上。这种问题多半是配置不一致导致的,比如节点清单、端口、节点编号在不同节点上填写不同。此时要做的不是急着重启服务,而是逐节点比对配置文件,找出差异,统一之后再按正确顺序重启。配置比对是共享集群排障的日常功课。

我在团队里习惯留一份"故障排查记录本",每次处理完一个集群故障就把现象、排查路径、根因、修复动作记录下来。几次之后你会发现自己处理同类问题的速度大幅提升,因为这些记录已经把最耗时的排查过程预演了一遍。

5.3 备份策略与升级窗口的基本思路

最后说一个容易被DMDSC"误导"的点:共享集群不等于数据绝对安全。DMDSC解决的是节点故障时的可用性问题,但如果是存储层面整体损坏、物理自然灾害、人为误操作删数据,集群照样会丢数据。所以备份策略不仅不能省,还要比单机环境更谨慎。

备份的基本思路是,在集群中指定一个节点作为备份执行节点,统一用达梦的备份工具把数据备份到独立于共享存储的位置,最好异地存放。联机备份的时间窗口选择在业务低峰期,备份完成后在备份日志里确认备份文件有效。恢复演练也要定期做,否则备份有没有用只有天知道。

升级维护方面,DMDSC的滚动升级思路是逐节点进行:把一个节点先摘出集群,完成补丁或版本升级,再让它重新加入集群,然后处理下一个节点。这样可以保证升级过程中集群始终对外提供服务。每次升级开始前,务必备份配置文件和各节点的参数文件,升级完成后也要核对版本号、参数配置是否和预期一致。滚动升级看着操作不复杂,但对操作顺序和时间窗口控制要求都很高,建议先在测试环境完整走一遍再动生产。

我在实际项目里收获最大的一个习惯,是把DMDSC的部署文档、配置记录、故障演练结果、巡检脚本全部整理到一个项目目录里,并保持更新。环境跑的时间越久,这份资料的价值就越大。很多运维问题不是"不会修",而是"不知道当初是怎么装的、改过什么配置",有一份实时更新的文档,排查思路会清晰得多。

把DMDSC从安装到稳定运行完整走了一遍之后,我最深的体会是:这套系统能不能发挥作用,七成靠部署前的规划和验证时的认真程度。存储、网络、系统参数这些前置条件做得越扎实,后面出问题的概率就越低;故障演练做得越充分,生产环境的底气就越足。第一次部署时,宁可多花半天时间做测试和记录,也不要为了赶进度跳过验证环节。等到生产环境真正经历了一次节点故障、而业务毫无感知地继续运行的时候,你会觉得之前所有的谨慎都是值得的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询