news 2026/8/24 14:05:33

MooseFS 分布式存储系统实战笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MooseFS 分布式存储系统实战笔记

MooseFS 分布式存储系统实战笔记

面向人群:存储系统初学者,已掌握 Linux 基础命令,希望从零搭建 MooseFS 分布式存储集群。

实验环境:Rocky Linux 9,多台服务器(server1 ~ server4),IP 段 192.168.88.x


零、前置知识

0.1 什么是分布式文件系统

分布式文件系统(Distributed File System,DFS)是一种将物理存储资源分散在多台独立服务器上,通过网络连接为用户提供统一文件访问接口的存储系统。简单来说,用户看到的是一个完整的文件目录树,而背后的文件数据实际上分布存储在多台物理机器上。

0.2 为什么需要分布式文件系统

传统的单机文件系统受限于单台服务器的存储容量、I/O吞吐量和可靠性。当数据量达到TB甚至PB级别时,单机方案面临以下瓶颈:

  • 容量瓶颈:单台服务器能挂载的磁盘数量有限
  • 性能瓶颈:单台服务器的网络带宽和磁盘I/O有限
  • 单点故障:服务器宕机将导致所有数据不可用
  • 扩展困难:更换更大容量的服务器需要数据迁移

分布式文件系统通过将数据分散到多台服务器上,同时解决了上述问题。

0.3 核心设计思路:元数据与数据分离

分布式文件系统普遍采用元数据与数据分离的架构:

  • 元数据(Metadata):描述文件是什么——包括文件名、目录结构、权限、大小、以及文件数据块存储在哪些服务器上等信息
  • 数据(Data):文件的实际内容

这种分离设计使得元数据服务器可以高效地处理大量文件的寻址请求,而数据服务器专注于高吞吐量的数据读写。


一、MooseFS 简介

1.1 什么是 MooseFS

MooseFS 是一款软件定义的分布式存储系统。它的核心思想是将多台普通 x86-64 服务器的存储资源聚合成一个统一的、巨大的存储池,对使用者来说就像一个单一的、容量近乎无限的文件系统。

它最早于2008年发布,经过多年发展,已从最初的分布式文件系统,演变为支持块设备、API等多种数据访问方式的综合存储平台。

1.2 核心功能与特性

MooseFS 具备一系列强大功能,使其适用于从开发测试到关键任务生产的多种场景:

  • 兼容POSIX,应用无缝迁移:它完全兼容POSIX标准,支持层级目录结构、文件权限、ACL、软/硬链接以及跨客户端的文件锁。这意味着现有应用无需修改代码,就能像操作本地文件系统一样直接使用。

  • 高可靠与容错:这是其核心优势之一。文件数据会自动在多个物理服务器上保存多个副本。当某个服务器或磁盘出现故障时,系统能自动检测并修复,确保数据不丢失、服务不中断。在MooseFS 4.x版本中,还引入了**纠删码(Erasure Coding)**功能,提供了比多副本更高效的冗余方式。

  • 近无限扩展能力:其扩展性极强。单个MooseFS集群就可以扩展到1600万TB(16 Exabytes)的容量,并能管理超过20亿个文件。扩容方式非常简单,只需动态添加新的服务器或磁盘即可,且扩容过程无需停机。

  • 并行高性能:数据的读写操作可以并行地在多个存储节点上进行,避免了单点性能瓶颈。随着集群节点的增加,整体性能也能获得线性提升。

数据安全与保护

  • 回收站机制:删除的文件会在一段可配置的时间内保留在系统级的"回收站"中,方便误删后恢复。
  • 快照功能:支持创建文件的一致性快照,即使在文件被写入时也能进行。
  • 多形态访问方式:除了作为标准的POSIX文件系统挂载使用,它还能作为块设备提供给虚拟机或数据库使用,或通过C语言API直接访问。

灵活的部署与管理

  • 支持异构硬件:可以混合使用不同厂商、不同性能(如SATA/SAS, SSD/HDD)的服务器。
  • 滚动升级:支持在不中断服务的情况下,对集群的各个组件进行升级。
  • 提供监控工具内置了Web图形界面(GUI)和命令行工具(CLI)用于监控和管理集群

二、MooseFS 核心架构与四大组件

MooseFS 集群由四个核心角色(进程)组成,它们相互协作,共同呈现一个统一的 POSIX 文件系统。每个角色都是一个独立的进程,可以根据部署规模选择部署在同一台物理机上,或分散到不同的专用节点上。

2.1 Master Server(元数据服务器)

Master Server 是 MooseFS 系统的中央大脑。

职责

  • 管理文件系统的全部元数据:目录树、文件名、权限、所有权、以及每个文件的数据块(chunk)分布在哪些 Chunkserver 上
  • 处理客户端的元数据请求:打开、关闭、创建、删除文件/目录、修改属性等
  • 协调 chunk 的复制和负载均衡
  • Master Server本身不存储任何文件内容(chunk),它只存储"文件在哪里"的信息

⚠️关键理解:Master Server 是集群的单点依赖。如果 Master 宕机,整个文件系统将无法访问(尽管数据本身还在 Chunkserver 上)。因此,生产环境必须为 Master 配置高可用方案(如本文档中的 Pacemaker 集群),或使用 MooseFS PRO 版本的多 Master 冗余方案。

2.2 Chunkserver(数据存储服务器)

Chunkserver 是 MooseFS 中真正存储文件数据的节点。

职责

  • 存储、读取和写入文件 chunk
  • 管理本地磁盘空间,并向 Master Server 报告容量状态
  • 在 Chunkserver 之间复制 chunk,以满足配置的副本数要求
  • 当硬件或网络故障发生时,参与 chunk 的恢复过程

💡关键理解:客户端读取/写入数据时,直接与 Chunkserver 通信,不经过 Master,这大大提高了数据吞吐量并避免了 Master 成为瓶颈。

2.3 Metalogger(元数据日志服务器)

Metalogger 是一个轻量级的元数据备份服务

职责

  • 定期从 Master Server下载并存储元数据的副本(快照)
  • 持续记录元数据的变更日志(changelog)
  • 在 Master Server 故障时,可以手动将 Metalogger 提升为新的 Master

2.4 Client(客户端)

客户端通过mfsmount命令将MooseFS 文件系统挂载到本地目录

工作原理

  • mfsmount利用 FUSE(Filesystem in Userspace)技术,拦截操作系统内核发起的文件操作请求
  • 元数据操作(如打开文件、读取目录)由客户端与 Master Server 通信完成
  • 实际数据读写由客户端直接与 Chunkserver 通信完成

💡关键理解:客户端看到的只是一个普通的挂载点,所有分布式复杂性对用户和应用完全透明。


三、关键概念解析

3.1 Chunk(数据块)

Chunk是 MooseFS 中数据存储和复制的最小单位

  • 大文件会被按照 64MB(默认)的大小切分成多个 chunk
  • 每个 chunk 有一个 64 位的唯一标识符(chunkID)
  • 每个 chunk 独立地存储在一个或多个 Chunkserver 上
  • 小文件(小于 64MB)则直接作为一个独立的 chunk 存储

💡关键理解:因为文件被切分成 chunk 并分散存储,所以 MooseFS 可以实现:

  • 并行读写:大文件的不同 chunk 可以同时从多个 Chunkserver 读取
  • 灵活冗余:可以为不同目录/文件设置不同的副本数
  • 动态扩容:新加入的 Chunkserver 可以立即接收新的 chunk

3.2 元数据(Metadata)

元数据是 Master Server 管理的核心信息,包括:

  • 从文件名到 chunk 列表的映射关系
  • 每个 chunk 的存储位置(在哪些 Chunkserver 上)
  • 文件的属性(大小、权限、时间戳等)
  • 目录结构

3.3 副本(Copy/Replica)

副本是 MooseFS 实现数据冗余的基本手段。

  • 每个 chunk 可以拥有 1 个或多个副本,存储在不同的 Chunkserver 上
  • 副本数由文件的 Storage Class(存储类)决定
  • Master Server 持续监控副本状态,自动修复缺失或过期的副本

副本数与容错能力

  • 2 个副本:可容忍 1 台 Chunkserver 故障(冗余级别为 1)
  • 3 个副本:可容忍 2 台 Chunkserver 故障(冗余级别为 2)

四、存储策略(Storage Class)原理

Storage Class 是 MooseFS 中定义数据冗余策略的核心机制。

4.1 标签(Label)

标签是管理员为每个 Chunkserver 赋予的标识符,用于分类和区分不同的存储节点。

常见标签用途

  • 按存储介质区分:S(SSD 固态硬盘)、H(HDD 机械硬盘)
  • 按地理位置区分:A(机房 A)、B(机房 B)
  • 按机架区分:R1(机架 1)、R2(机架 2)

💡关键理解:标签让管理员可以精确控制数据存放的位置——例如,确保关键数据同时存放在 SSD 和 HDD 上,或确保副本分布在不同的机架/机房以应对区域性故障。

4.2 Storage Class 的定义

一个 Storage Class 通过标签表达式来指定:

  • 需要创建多少个副本
  • 这些副本应该存储在带有哪些标签的 Chunkserver 上

示例

  • 2A:在带有标签 A 的服务器上存储 2 个副本
  • A,B:分别在带有标签 A 和 B 的服务器上各存储 1 个副本
  • S,H:分别在 SSD(标签 S)和 HDD(标签 H)上各存储 1 个副本

4.3 标签匹配模式(Label Mode)

Storage Class 支持三种标签匹配模式,控制当带标签的服务器不可用时的行为:

模式行为
STRICT(严格)必须使用指定标签的服务器,否则写入失败
STANDARD(标准)优先使用指定标签的服务器,不可用时使用其他服务器(默认)
LOOSE(宽松)优先使用指定标签,但允许在其他服务器上创建副本

4.4 存储类在实际中的应用

在本文档的实践部分:

  • 为 server2、server3 标记标签 S(SSD)
  • 为 server5 标记标签 H(HDD)
  • 创建 Storage Class2CP_SH:要求在标签 S 和 H 的服务器上各存一份副本
  • 将目录dir2/应用该策略——实现数据同时存储在 SSD 和 HDD 上

这种策略既保证了性能(SSD 上的副本提供快速访问),又兼顾了成本(HDD 上的副本提供低成本备份)。


五、数据保护机制

5.1 副本机制(Replication)

副本是 MooseFS 最基础的数据保护方式。每次写入数据时,MooseFS 会根据文件的 Storage Class 自动在多个 Chunkserver 上创建指定数量的副本。

副本机制的优势

  • 快速恢复:副本是完整的数据拷贝,故障时可直接使用,无需计算
  • 低延迟:客户端可以从最近的或负载最低的副本读取数据
  • 实现简单:CPU 和内存开销较低,适合频繁访问的热数据

5.2 回收站机制(Trash)

MooseFS 的回收站是一个文件系统级别的回收站。

工作原理

  • 当文件被删除(unlink)时,MooseFS 不会立即从磁盘上擦除数据
  • 文件被移动到特殊的 trash(回收站)区域
  • 文件在 trash 中保留可配置的时间(称为 trashtime,以小时为单位)
  • 超过保留时间后,文件才会被真正删除,释放磁盘空间

恢复方法

  • 通过挂载 MFSMETA 文件系统(mfsmount -m)访问 trash 目录
  • 在 trash 目录中找到被删除的文件
  • 将文件移动到trash/undel子目录即可恢复

💡关键理解:回收站机制提供了误删除的后悔药,但需要注意:

  • 回收站中的文件仍然占用磁盘空间
  • 需要合理设置 trashtime,平衡数据安全和存储空间
  • 可以通过mfstrashtime命令为不同目录设置不同的保留时间

六、MooseFS 部署实践

实验环境:基于 4 台 Rocky Linux 9 服务器,后续扩展至 6 台

6.1 导入 GPG 密钥和添加软件仓库

在终端中执行以下命令,下载并将 MooseFS 的 GPG 密钥保存到系统指定目录:

curl"https://repository.moosefs.com/RPM-GPG-KEY-MooseFS">/etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

执行以下命令,为 Rocky Linux 9 添加 MooseFS 的软件源配置文件:

curl"http://repository.moosefs.com/MooseFS-4-el9.repo">/etc/yum.repos.d/MooseFS.repo

完成上述配置后,你就可以使用 yum 或 dnf 命令来安装 MooseFS 了。例如,安装 Master Server 组件:

yuminstallmoosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli

6.2 功能概述

本节完成 MooseFS 软件仓库的配置和 Master Server 的安装。GPG 密钥用于验证软件包签名,防止下载到被篡改的安装包。软件源配置文件告诉 yum/dnf 去哪里下载 MooseFS 的软件包。


6.3 Chunkserver 配置

chunk(server3, server4):

curl"http://repository.moosefs.com/MooseFS-4-el9.repo">/etc/yum.repos.d/MooseFS.repocurl"https://repository.moosefs.com/RPM-GPG-KEY-MooseFS">/etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS yuminstallmoosefs-chunkserver

配置主机名解析:

vim/etc/hosts
192.168.88.161 server1 mfsmaster 192.168.88.162 server2 192.168.88.163 server3 192.168.88.164 server4 192.168.88.165 server5 192.168.88.166 server6

6.4 功能概述

Chunkserver 是 MooseFS 中实际存储数据的节点。本节在 server3 和 server4 上安装 Chunkserver 软件,并配置主机名解析。注意mfsmaster别名指向 server1,这是 MooseFS 客户端和 Chunkserver 默认用来发现 Master Server 的主机名。


6.5 数据管理磁盘分区

关机情况下,给 server2、server3 分别新加一块磁盘。以 server3 为例,server2 执行相同操作。磁盘类型:NVMe。

格式化磁盘:

mkfs.xfs-Lssd02 /dev/nvme0n2

设置挂载点:

mkdir-p/mnt/ssd01chownmfs.mfs /mnt/ssd01

查看 UUID:

lsblk-oNAME,UUID,LABEL,MOUNTPOINTvim/etc/fstab

mount-a

6.6 功能概述

Chunkserver 需要专用的磁盘空间来存储 chunk 数据。本节为 Chunkserver 节点添加新磁盘,格式化为 XFS 文件系统,设置mfs用户权限(MooseFS 进程以 mfs 用户运行),并通过/etc/fstab配置开机自动挂载。


6.7 启用 GUI(Master 节点)

systemctl start moosefs-gui.service systemctlenablemoosefs-gui.service

6.8 功能概述

MooseFS 内置了 Web 图形界面用于监控集群状态。在 Master 节点启动moosefs-gui服务后,可通过浏览器访问管理界面,查看 Chunkserver 状态、存储容量、文件分布等信息。


6.9 启动 Chunkserver

server2、server3:

systemctlenable--nowmoosefs-chunkserver

配置数据目录:

cd/etc/mfsvimmfshdd.cfg

systemctl reload moosefs-chunkserver.service

6.10 功能概述

mfshdd.cfg文件用于告诉 Chunkserver 哪些目录可以用来存储 chunk 数据。将之前挂载的/mnt/ssd01加入该配置后,Chunkserver 就会向 Master 报告该目录的可用空间,并开始接收 chunk 存储任务。


6.11 Client 配置

cd/etc/mfsvimmfsmount.cfg

mkdir/mnt/mfs mfsmount

6.12 功能概述

客户端通过mfsmount将 MooseFS 文件系统挂载到本地/mnt/mfs目录。mfsmount.cfg中配置了 Master Server 的地址。挂载成功后,用户操作/mnt/mfs就像操作本地目录一样,但实际上所有数据都存储在 MooseFS 集群中。


七、MooseFS 应用实践

7.1 挂载点下创建目录

设置 Storage Class:

mfssclassset2CP-rdir1/

查看目录 Storage Class:

mfssclass get dir1

列出所有 Storage Class:

mfslistsclass-l

复制文件并查看信息:

cp/etc/passwd.mfsfileinfopasswd

创建自定义 Storage Class:

mfsscadmin create-K1* hot_1cp

查看文件信息:

mfsfileinfo fstab

7.2 功能概述

本节演示 MooseFS 的核心操作:

  • mfssclass set:为目录设置 Storage Class,控制该目录下文件的副本策略
  • mfssclass get:查看目录当前应用的 Storage Class
  • mfslistsclass:列出系统中所有可用的 Storage Class
  • mfsfileinfo:查看文件在集群中的分布情况,包括 chunk 数量、副本位置等
  • mfsscadmin create:创建自定义 Storage Class,-K 1*表示 1 个副本

7.3 设置标签

vim/etc/mfs/mfschunkserver.cfg systemctl reload moosefs-chunkserver.service

创建带标签的 Storage Class 并应用:

mfsscadmin create-KA 1CP_A mfssclassset-r1CP_A dir1/

7.4 功能概述

标签(Label)是 MooseFS 实现精细化存储策略的基础。通过在mfschunkserver.cfg中为 Chunkserver 设置标签,可以将不同性能的存储介质(SSD/HDD)或不同位置的节点分组。然后创建 Storage Class 指定副本存放在哪些标签的节点上,实现冷热数据分离、跨机房容灾等高级策略。


7.5 添加一个 Chunkserver

curl"https://repository.moosefs.com/RPM-GPG-KEY-MooseFS">/etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFScurl"http://repository.moosefs.com/MooseFS-4-el9.repo">/etc/yum.repos.d/MooseFS.repo yuminstallmoosefs-chunkservermkdir/mnt/hdd01vimmfshdd.cfg

systemctlenable--nowmoosefs-chunkservervimmfschunkserver.cfg systemctl reload moosefs-chunkserver

server4 查看文件分布:

cd/mnt/mfs/dir1 mfsfileinfo fstab

修改 Storage Class:

mfssclassset-r2CP_AC.

再次查看文件分布:

mfsfileinfo fstab

7.6 功能概述

MooseFS 支持动态扩容——新 Chunkserver 加入集群后,Master 会自动发现并将其纳入存储池。本节演示添加一台新的 Chunkserver(server5),并修改 Storage Class 让现有数据重新分布到新节点上,实现负载均衡。


7.7 多标签存储策略实践

server2 配置 SSD 标签:

vim/etc/mfs/mfschunkserver.cfg# S 表示固态

server3 配置 SSD 标签:

vim/etc/mfs/mfschunkserver.cfg systemctl reload moosefs-chunkserver

server5 配置 HDD 标签:

vim/etc/mfs/mfschunkserver.cfg systemctl reload moosefs-chunkserver# H 表示机械

server4 客户端操作:

mkdirdir3/ mfsgetsclass dir3 mfssclassset-r3CP dir3

cp/etc/hosts dir3/ mfsfileinfo dir3/hosts

设置跨介质存储策略:

mfssetsclass-r2CP_SH dir2/

创建自定义 Storage Class:

mfscreatesclass-KS,H hosts 2CP_SH

移动文件并应用策略:

mvdir1/fstab dir2/ mfssetsclass-r2CP_SH dir2/

7.8 功能概述

本节实现异构存储策略——让数据同时存储在 SSD(标签 S)和 HDD(标签 H)上:

  • 2CP_SH:2 个副本,分别存放在标签 S 和标签 H 的节点上
  • 这样既保证了 SSD 提供的高性能读取,又利用 HDD 提供了低成本的备份
  • mfscreatesclass -K S,H中的-K参数指定标签组合
  • 文件移动后,MooseFS 会自动在后台重新平衡 chunk 分布

八、回收站机制

mkdirmeta mfsmount-m/mnt/metacd/mnt/meta

查看回收站保留时间:

mfsgettrashretention /mnt/mfs/dir1

恢复文件:

find-name*passwd*

mv./004/00000004\|dir1\|passwdundel

8.1 功能概述

MooseFS 的回收站通过 MFSMETA 文件系统访问。挂载-m参数后,可以在trash目录中找到被删除的文件。文件在回收站中的路径包含原始位置信息,移动到undel目录即可完成恢复。mfsgettrashretention查看保留时间,mfstrashtime可以修改保留时长。


九、Master Server 高可用(Pacemaker 集群)

目标:消除 Master Server 单点故障,使用 Pacemaker 实现双节点高可用

9.1 安装 Pacemaker 集群软件

双节点同时配置:

dnf config-manager --set-enabled highavailability dnfinstall-ypacemaker pcs corosync fence-agents-all systemctlenable--nowpcsd.service

设置集群用户密码:

# 将系统用户 hacluster 密码设置为 westosechowestos|passwd--stdinhacluster

给所有节点设置密码:

pcshostauth server1 server5-uhacluster

创建集群:

pcs cluster setup mycluster server1 server5

启动并启用集群:

pcs cluster start--allpcs clusterenable--all

配置集群属性:

pcs propertysetstonith-enabled=false pcs propertysetno-quorum-policy=ignore

9.2 功能概述

Pacemaker 是 Linux 高可用集群的标准解决方案。本节在 server1 和 server5 上部署双节点集群:

  • pcsd:Pacemaker 的守护进程,提供 Web 管理和节点通信
  • corosync:集群消息层,负责节点间心跳检测
  • stonith-enabled=false:暂时关闭 fencing(后续通过 SBD 启用)
  • no-quorum-policy=ignore:双节点场景下忽略 quorum(票数)检查,避免脑裂

9.3 配置虚拟 IP

pcs resource create vip ocf:heartbeat:IPaddr2ip=192.168.88.100cidr_netmask=24opmonitorinterval=30s

更新 hosts 配置:

vim/etc/hosts

同步到所有节点:

9.4 功能概述

虚拟 IP(VIP)是高可用集群的核心组件。192.168.88.100作为浮动 IP,平时绑定在主节点 server1 上。当 server1 故障时,Pacemaker 会自动将 VIP 漂移到 server5。客户端始终通过mfsmaster(解析到 VIP)连接 Master,无需感知后端节点的切换。


9.5 配置 iSCSI 共享存储

server4(iSCSI Target 端):

yuminstall-ytargetcli systemctlenabletarget targetcli

在 targetcli 中执行:

/backstores/block> create my_disk /dev/nvme0n2 Created block storage object my_disk using /dev/nvme0n2. /iscsi> create iqn.2026-08.com.example:mfsdata Created target iqn.2026-08.com.example:mfsdata. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260. /iscsi/iqn.20...ata/tpg1/acls> create iqn.2026-08.com.example:client Created Node ACL for iqn.2026-08.com.example:client Created mapped LUN 0. /iscsi/iqn.20...ata/tpg1/acls> exit Global pref auto_save_on_exit=true Configuration saved to /etc/target/saveconfig.json

server1 和 server5(iSCSI Initiator 端):

yuminstall-yiscsi-initiator-utilsviminitiatorname.iscsi# 设置为:InitiatorName=iqn.2026-08.com.example:clientsystemctl restart iscsid iscsiadm-mdiscovery-tst-p192.168.88.164 iscsiadm-mnode-l

给 server1、server5 添加 iSCSI 硬盘:





9.6 功能概述

Pacemaker 双节点集群需要共享存储来存放 MooseFS 的元数据,确保主备节点看到的是同一份数据。iSCSI 提供了一种基于 IP 网络的块级存储共享方案:

  • Target(server4):提供共享磁盘
  • Initiator(server1、server5):连接并使用共享磁盘
  • 共享磁盘格式化后可用于存放 MooseFS 元数据,实现主备切换时数据一致性

9.7 配置 SBD Fencing

VMware 虚拟机配置:

打开记事本编辑,添加以下内容:

scsi1:0.mode = "independent-persistent" disk.locking = "FALSE" disk.EnableUUID = "TRUE" scsi1.sharedBus = "virtual"

开机后狂按 ESC:

"shift+"将 NVME 调整到 SCSI 上方:

exit save changes -> save

查看磁盘 ID:

cd/dev/disk/by-id

安装 SBD 和 fencing 代理:

dnfinstall-ysbd fence-agents-all

创建 SBD 设备:

sbd-d/dev/disk/by-id/scsi-36000c298d3769e543b507df5981c1de1 create sbd-d/dev/disk/by-id/scsi-36000c298d3769e543b507df5981c1de1 dump

启用 SBD Stonith:

pcs cluster stop--allpcs stonith sbdenabledevice="/dev/disk/by-id/scsi-36000c298d3769e543b507df5981c1de1"watchdog=/dev/watchdog

pcs cluster start--all

测试 Fencing:

sbd-d/dev/disk/by-id/scsi-36000c298d3769e543b507df5981c1de1 message server1 reset pcs stonith fence server1

9.8 功能概述

Fencing(隔离)是高可用集群的"保险丝"——当集群检测到某个节点故障时,必须确保该节点真的被隔离,不会继续访问共享资源造成数据损坏。

SBD(Stonith Block Device)是一种基于共享存储的 fencing 机制:

  • 在共享磁盘上创建 SBD 分区
  • 每个节点持续向 SBD 写入心跳
  • 当某节点心跳停止,其他节点通过 SBD 命令强制重置该节点
  • pcs stonith fence server1手动测试 fencing 功能

VMware 虚拟机需要特殊配置(disk.locking = "FALSE"disk.EnableUUID = "TRUE")来支持共享磁盘和磁盘 UUID 识别。


附录:常见错误排查

错误现象可能原因解决方法
mfsmount: can't connect to masterMaster Server 未启动或网络不通检查moosefs-master服务状态和防火墙
chunkserver: no hdd spacemfshdd.cfg配置错误或权限不足检查路径是否正确,chown mfs.mfs设置权限
Storage Class 写入失败符合条件的 Chunkserver 不足检查标签配置和 Chunkserver 状态
Pacemaker 脑裂节点间网络中断,双方都认为自己是主配置 Fencing(SBD)强制隔离故障节点
iSCSI 连接失败Target 未启动或 ACL 配置错误检查targetcli配置和 initiatorname
VIP 无法漂移资源约束或监控超时检查pcs status和 resource 约束配置
SBD 创建失败磁盘被占用或 UUID 不正确确保磁盘未被挂载,VMware 开启disk.EnableUUID
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 14:05:15

【PySpark 学习笔记 一】 PySpark 是什么

从 Python 开发者视角,快速搞懂 PySpark 的本质和学习路径本文要点 读完本文,你将了解: Spark 是什么、解决什么问题、覆盖哪些应用场景Scala 与 Spark 的关系,以及学习 PySpark 是否需要掌握 ScalaPySpark 的架构原理&#xff1a…

作者头像 李华
网站建设 2026/8/24 14:04:50

SAP Gateway OData V4 的 NULL 语义,别再把空值、NULL 和字段缺失当成一回事

在 SAP Gateway Foundation 的 OData V4 开发里,有一类问题很容易在接口联调阶段被低估。ABAP 结构里的某个字段明明是 initial,序列化到 OData 响应以后,业务方却希望看到 null。另一个字段虽然在 ABAP 里也没有实际内容,但业务方要求它根本不要出现在 payload 里。再换到…

作者头像 李华
网站建设 2026/8/24 14:04:15

LaTeX的基本应用

一、认识Latex模板 1.注释:% Latex文件注释时使用“%”,在一行中“%”号后面的内容均会被注释掉,生成PDF文件时不会显示 2.命令或特殊符号:\ “\”符号出现,表示这是一个命令或者特殊符号 作为特殊符号时&#xf…

作者头像 李华
网站建设 2026/8/24 14:04:09

SAP Gateway OData V4 增量同步机制深度解析,从 odata.track-changes 到 @odata.deltaLink

一个运行中的 SAP Fiori 应用次乃至一天几十次刷新时,怎样避免把几乎没有变化的整份数据重新传输一遍。 以销售订单列表为例。上午 9 点,客户端从 SAP S/4HANA 读取了 5 万条订单。上午 9 点 10 分,真正发生变化的可能只有 37 条。如果客户端再次执行同样的完整查询,SAP G…

作者头像 李华