一、DM 数据库集群共享存储集群:架构与原理
1.1 DSC 集群:概念与价值
DM 数据库集群共享存储集群 (简称 DSC) 是达梦数据库提供的一种高可用、高性能的集群方案。与主备架构不同, DSC 允许多个数据库实例同时访问同一份磁盘数据, 从而实现了计算节点的冗余与负载均衡。其核心价值在于:
- 高可用性: 当某个节点发生故障时, 其他节点可以无缝接管业务, 避免单点故障。
- 高性能: 多节点并行处理请求, 提升系统整体吞吐量。
- 资源利用率高: 共享一份存储, 降低了存储成本和数据同步开销。
1.2 共享存储:底层机制与 ASM
在 DM 数据库集群共享存储集群中, 所有节点共享底层存储。为了保证文件的一致性, DSC 引入了达梦自动存储管理器 (ASM)。ASM 负责管理共享磁盘, 提供条带化、镜像等功能, 屏蔽了底层裸设备的复杂性。其架构如下:
通过 ASM, DSC 集群能够统一管理数据文件、控制文件和日志文件, 确保各节点读取到的数据是一致的。
1.3 网络与锁:集群通信与并发控制
DSC 集群依赖于两种网络:
- 业务网络: 用于客户端连接和业务数据传输。
- 心跳网络: 用于节点间的通信、心跳检测以及锁信息的交互。
为了保证多个节点并发访问同一数据块时的数据一致性, DSC 采用了分布式锁管理器 (DLM)。当节点需要修改数据时, 必须先向 DLM 申请锁。通过内部高速网络交互锁信息, DLM 确保了在高并发下的数据正确性。
二、集群规划与部署:环境准备与配置
2.1 环境准备:网络与磁盘规划
部署 DM 数据库集群共享存储集群前, 需要进行严格的环境规划。以两节点 DSC 为例:
- 节点 1 (DSC01): 业务 IP 192.168.1.11, 心跳 IP 10.0.0.11。
- 节点 2 (DSC02): 业务 IP 192.168.1.12, 心跳 IP 10.0.0.12。
- 共享存储: 划分至少 3 个裸磁盘, 分别用于 DCRCFG (集群配置)、VOTE (表决磁盘)、DATA (数据存储)。
2.2 存储配置:ASM 磁盘组划分
在两个节点上配置 UDEV 规则, 绑定裸设备。假设绑定后的裸设备为 /dev/raw/raw1, /dev/raw/raw2, /dev/raw/raw3。
接着, 使用 dmasmcmd 工具初始化磁盘:
# 初始化 DCRCFG 磁盘 dmasmcmd create dcrdisk '/dev/raw/raw1' 'DCR' create votedisk '/dev/raw/raw2' 'VOTE' create asmdisk '/dev/raw/raw3' 'DATA' 0 0初始化完成后, 需要配置 dmdcr.ini 文件, 该文件包含了 ASM 集群和 DB 集群的配置信息。
2.3 参数配置:dmdcr 与 dmasvrmal 设置
在两个节点上分别创建 dmdcr.ini 配置文件。节点 1 的配置如下:
DCR_N_GRP = 3 DCR_VTD_PATH = /dev/raw/raw2 DCR_OGUID = 63635 [GRP_ASM] DCR_GRP_TYPE = ASM DCR_GRP_NAME = GRP_ASM DCR_GRP_N_EP = 2 DCR_GRP_DSK_CHK_CNT = 60 [GRP_ASM_EP0] DCR_EP_NAME = ASM0 DCR_EP_SEQNO = 0 DCR_EP_IP = 10.0.0.11 DCR_EP_PORT = 9345 DCR_EP_ASM_LOAD_PATH = /dev/raw [GRP_ASM_EP1] DCR_EP_NAME = ASM1 DCR_EP_SEQNO = 1 DCR_EP_IP = 10.0.0.12 DCR_EP_PORT = 9345 DCR_EP_ASM_LOAD_PATH = /dev/raw同时, 配置 dmasvrmal.ini 文件用于 ASM 节点间通信:
[MAL_INST0] MAL_INST_NAME = ASM0 MAL_HOST = 10.0.0.11 MAL_PORT = 9346 [MAL_INST1] MAL_INST_NAME = ASM1 MAL_HOST = 10.0.0.12 MAL_PORT = 9346节点 2 的配置类似, 只需将对应节点的 IP 和 SEQNO 进行调整。
三、集群启动与运维:管理实战指南
3.1 集群启停:服务顺序与命令
启动 DM 数据库集群共享存储集群需要严格按照顺序执行:
- 启动 ASM 集群: 在两个节点分别执行 dmasmsvr 命令。
- 启动 DMCSS 服务: 在两个节点分别执行 dmcss 命令。
- 启动数据库实例: 在两个节点分别执行 dmserver 命令。
启动 ASM 的示例命令:
./dmasmsvr dcr_ini=/dm/data/dmdcr.ini启动数据库实例的示例命令:
./dmserver /dm/data/dsc/dm.ini dcr_ini=/dm/data/dmdcr.ini停止集群时, 顺序相反, 先停数据库, 再停 CSS, 最后停 ASM。
3.2 日常运维:监控与故障处理
对于 DM 数据库集群共享存储集群, 日常运维主要关注节点状态和网络心跳。可以使用 dmcssm 工具监控集群状态:
./dmcssm ini_path=/dm/data/dmcssm.ini在监控界面中, 可以查看各节点 (ASM 和 DB) 的运行状态。如果发现节点被踢出, 需检查:
- 心跳网络是否正常。
- 磁盘 I/O 是否存在瓶颈。
- 节点系统资源是否耗尽。
3.3 测试验证:故障切换与负载均衡
部署完成后, 需进行高可用测试。通过 kill 掉节点 1 的 dmserver 进程, 观察节点 2 是否能正常接管。同时, 配置客户端的 JDBC 连接串, 启用负载均衡:
jdbc:dm://192.168.1.11:5236,192.168.1.12:5236?epSelector=1&loginMode=2通过此连接串, 客户端请求将均匀分布到两个节点, 实现了真正意义上的负载分担与高可用。