CephFS高可用的NFS-Ganesha网关

delegation机制 由于多个客户端可以挂载同一个文件系统,如何在多个客户端之间保持数据一致性是个非常麻烦的问题,NFSv2和NFSv3没有规定具体的方法,一般的做法是客户端不定期检查文件是否发生了冲突,比如读操作中在发起READ请求前可能要发起GETATTR请求,判断本地缓存是否有效。在大规模系统中以及当客户端和服务器分布比较遥远时就会影响系统性能,因为GETATTR操作需要一定的执行时间。     NFSv4引入 阅读详情
AI摘要

本文详细介绍了如何为CephFS部署基于NFS-Ganesha的高可用集群,包括NFS-Ganesha的配置、gracedb的管理、HAProxy和Keepalived的设置。在测试中,当服务端断网超过五分钟,客户端被Ceph超时驱逐,通过调整Ceph配置避免了客户端加入黑名单,确保了服务的快速恢复和稳定性。

涉及系统较多,概念介绍内容稍多,使用的话可以直接看部署实践,通过实践来理解各种系统和概念

1. 概述

NFS是linux操作系统共享文件系统使用广泛的协议,也是各种共享文件产品的标准功能,客户端安装简单、使用简单。CephFS相对来说要安装CephFS客户端,添加客户端配置等,对于用户来说NFS更方便使用。

本文旨在说明如何为CEPHFS部署一个高可用的NFS网关集群

  • 为什么要给NFS做集群
    • nfs是个有状态服务,有状态服务高可用必须要保持状态的一致性,状态为
      • Open files
      • File locks
      • …
  • 当前有什么比较成熟的技术方案
    • rook是当前唯一可以找到的资料比较齐全的CephFS导出NFS的实现
      • 通过K8S的 ing svc deployment来保证服务的高可用
      • 通过ceph集群来存储文件系统的状态
  • 已有的技术方案有什么技术优缺点
    • 优点: 社区支持
    • 缺点: 只能通过容器化方式ROOK来部署,生产Ceph上容器是一件极具挑战的事。不过nfs集群使用容器,ceph集群使用进程也是一种方式,但是这样增加了一些交付难度。

2. 术语

  • nfs1: 是一个有状态服务,客户端服务端之间维护如下信息

    • Open files
    • File locks
  • nfs服务属性2:

    • Minimum supported version(支持的最低版本)
    • Grace period(宽限期) 定义从计划外中断重新引导设备(从 15 秒到 600 秒)后所有客户机必须在多少秒内恢复锁定状态。该属性只影响 NFSv4.0 和 NFSv4.1 客户机(NFSv3 是无状态协议,因此没有要恢复的状态)。在此期间内,NFS 服务只处理旧锁定状态的回收。在宽限期结束之前,不会处理对服务的其他请求。默认宽限期为 90 秒。减小宽限期将使得 NFS 客户机在服务器重新引导之后能够更快地恢复操作,但也会增加客户机无法恢复其所有锁定状态的可能性。
    • Enable NFSv4 delegation(启用 NFSv4 委托) 选择此属性将允许客户机在本地缓存文件且无需联系服务器即可进行修改。此选项默认情况下启用且通常可提高性能,但在极少的情况下可能会引起问题。如果要禁用此设置,只能在对特定工作负荷进行仔细的性能测量并验证了这样设置具有相当的性能优势后进行。此选项只影响 NFSv4.0 和 NFSv4.1 挂载。
    • Mount visibility(挂载可见性 此属性允许您限制有关 NFS 客户机共享资源访问列表和远程挂载等信息的可用性。完全允许完全访问。受限的限制访问,比如客户机仅能查看允许其访问的共享资源。客户机看不到在服务器上定义的共享资源或服务器中其他客户机完成的远程挂载的访问列表。默认情况下,此属性设置为 “Full”(完全)。
    • Maximum supported version(支持的最高版本)
    • Maximum # of server threads(最大服务器线程数) 定义并发 NFS 请求的最大数目(从 20 到 1000)。这至少应当涵盖您预期的并发 NFS 客户机的数目。默认值是 500。

3. nfs-ganesha

3.1. 介绍

nfs-ganesha3: 是一个nfs服务器,支持将不同的文件系统导通过 FSAL(File System Abstraction Layer) 导出为nfs , 支持以下文件系统导出为NFS。

  • cephfs
  • Gluster
  • GPFS
  • VFS
  • XFS LUSTER
  • RadosGW

3.2. 架构

3.2.1. 总体架构图

  • 社区的架构图
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-26YBcvXc-1634473847273)(https://raw.githubusercontent.com/wiki/nfs-ganesha/nfs-ganesha/images/nfs-arch.png)]
  • 更加详细的IBM的架构图4

3.2.2. 架构说明

要使用nfs-ganesha重点关注以下几点

nfs-ganesha作为各种分布式文件系统的客户端,客户端使用文件系统时需要将目录结构(Dentry)和本地文件系统跟后端存储介质/远程文件系统的映射(inode)做缓存5

  • 需要导出为nfs的各种分布式文件系统
  • MDCACHE: 后端文件系统的元数据缓存(Dentry Innode)
  • FSAL: 需要到处的文件系统抽象层,统一了后端不同文件系统的api
  • NFS: 用户使用各种分布式存储导出的nfs服务
  • LOG: nfs-ganesha服务日志
    • 默认日志路径: /var/log/ganesha/ganesha.log
    • 其他log配置

3.2.3. genesha-rados-cluster设计

这里是Ceph的专场,设计文档源自官方文档的翻译6

3.2.3.1. 客户端恢复(单体情况)

NFSv4是基于租期的协议, 客户端与服务端建立连接之后,必须定期更新足月以维持文件系统状态(open files, locks, delegations or layouts)
当一个nfs服务重启后所有的状态丢失。当服务重新上线,客户端会检测到服务已启动,从服务端获取到上一次的连接状态恢复连接。

3.2.3.2. 宽限期(单体情况)

grace period, 简言之,客户端和服务端在连接中断后恢复上一次的连接状态时,如果超时了则恢复超时(宽限期)则重新建立连接,在恢复过程中,客户端被禁获取新的状态,只允许回收状态。

3.2.3.3. Reboot Epochs

服务版本

  • R Recovery
  • N Normal

版本状态

  • C 当前版本,体现在grace db dump输出上为 cur
  • R 非0值表示宽限期的有效时间,0表示结束,体现在grace db dump输出上为 rec
3.2.3.4. gracedb

有状态的数据记录在数据库,rados-cluster的recovery信息存储在rados omap,通过 ganesha-rados-grace7命令行可以操作数据,例如将节点加入集群,将节点踢出集群,加入集群之后节点有两个状态

  • N(NEED) 该节点是否有需要recovery的的客户端
  • E(ENFORCING) 强制执行宽限期
3.2.3.5. 集群

上面的客户端恢复、宽限期、gracedb说明了单体服务的恢复原理和状态存储,对于集群只是将单体服务部署多个,状态保持一致

ganesha集群场景: 部署多个ganesha服务,服务端通过VIP或者DNS等方式访问其中一个,如果正在访问的ganesha服务挂了,客户端换到另一个ganesha服务进行访问(需要注意的是上次访问的状态数据也同步到了集群的其他节点的数据库中),新的访问连接恢复了原来的状态,如果恢复不了则数据库删除原来的状态进行重建连接。

3.3. 高可用集群实现

  • 无状态部分: 部署多个ganesha服务,通过keepalive+haproxy进行高可用负载
  • 有状态部分: 状态数据通过gracedb管理,存储在ceph rados对象的omap中

以上,架构确定了,开始部署

4. 部署

4.1. 环境说明

组件 版本 备注
操作系统 CentOS Linux release 7.8.2003 (Cor
nfs-ganesha(用户态NFS)编译、安装和使用 前面的文章介绍了基于社区或自己项目编译rpm包搭建Ceph分布式存储集群的方法。本篇介绍使用nfs-ganesha源码编译、安装,客户端使用用户态nfs协议挂载使用Ceph文件存储和对象存储的方法。 <一> 编译与安装nfs-ganesha 一、 获取源码 源码可直接从github上git clone,也可以使用自己库维护的代码: github: git clone git@github.com:nfs-ganesha/nfs-ganesha.git git checkout V3.4 自. 阅读详情

相关推荐

构建高可用CephFS NFS网关:NFS-Ganesha与RADOS集群的深度整合

本文详细介绍了如何构建高可用的CephFS NFS网关,通过NFS-Ganesha与RADOS集群的深度整合,实现高效文件共享。文章涵盖核心架构、部署实战、性能调优及避坑指南,帮助用户解决Ceph客户端兼容性问题,提升存储访问效率。特别强调高可用设计,确保服务稳定性,适用于金融、电商等高要求场景。

weixin_26976635的博客 254

CephFS NFS网关高可用实战:基于NFS-Ganesha与RADOS的架构详解

NFS协议作为传统IT基础设施中应用最广泛的网络文件协议,其高可用设计常因有状态特性被低估。分布式存储场景下,CephFS虽提供原生POSIX语义,但老旧系统与中间件往往只认NFS协议,如何构建可靠的NFS出口成为运维痛点。NFSv4的锁与客户端状态依赖服务端持久化,仅靠VIP漂移无法解决故障切换后的状态恢复问题。借助RADOS集群作为配置与恢复记录的共享底座,NFS-Ganesha网关可真正实现无状态化:导出配置、客户端锁记录、认证信息全部收敛到分布式存储池中,使任意节点接管后都能快速恢复服务。该方案适用

weixin_42523792的博客 229

CephFS与NFS-Ganesha高可用网关:架构、部署与权限实践

NFS作为传统存储互通的“普通话”,始终是备份软件、AIX老库和视频非编站点接入分布式存储的首选协议。CephFS虽具备横向扩展与自动恢复能力,却并不原生提供NFS服务端,因此NFS-Ganesha这一用户态协议转换层成为关键桥梁。其FSAL_CEPH模块绕过内核VFS,直接通过libcephfs与RADOS集群通信,在保持NFS客户端兼容性的同时降低性能损耗。面对高可用需求,双网关通过keepalived漂移虚拟IP,并借助Ganesha CLUSTER模式在RADOS对象中共享配置与锁恢复状态,实现Gr

weixin_28338005的博客 221

构建高可用CephFS NFS网关:NFS-Ganesha与RADOS集群深度整合实践

本文详细介绍了如何构建高可用的CephFS NFS网关,通过将NFS-Ganesha与Ceph RADOS集群深度整合,利用GraceDB机制在RADOS中持久化NFS会话状态,解决了NFSv4协议在高可用场景下的状态同步难题。文章提供了从架构解析、手把手部署到故障演练与生产调优的完整实践指南,帮助用户搭建无单点故障、对客户端透明的企业级NFS网关服务。

weixin_29211309的博客 127

NFS-Ganesha实战:如何在Ceph集群中快速搭建高性能NFS网关(附避坑指南)

本文详细介绍了如何在Ceph集群中快速部署和优化NFS-Ganesha网关,以实现高性能的NFS服务。内容涵盖架构选型、通过Cephadm或手动部署的实战步骤、关键性能参数调优,并针对生产环境中常见的性能瓶颈、高可用及权限问题提供了具体的解决方案与避坑指南。

ss78901的博客 714

深入解析NFS-Ganesha架构:如何为CephFS构建稳定高效的NFS网关

本文深入解析了NFS-Ganesha架构及其与CephFS的高效集成方案,详细介绍了如何构建稳定、高可用的NFS网关。通过模块化设计、FSAL适配层和集群化部署,NFS-Ganesha为CephFS提供了强大的协议转换能力,适用于企业级存储环境。文章还涵盖了性能优化、故障恢复机制及容器化部署等关键实践,帮助用户实现最佳性能与可靠性。

weixin_30275415的博客 549

nfs-ganesha:NFS-Ganesha是一个NFSv3,v4,v4.1文件服务器,在大多数UNIXLinux系统上以用户模式运行

nfs-ganesha NFS-Ganesha是NFSv3,v4,v4.1文件服务器,在大多数UNIX / Linux系统上以用户模式运行。 它还支持9p.2000L协议。 有关更多信息,请参阅 。

SVG绘制圆环进度条

在我们的大屏可视化项目中,经常会用到各种各样的图表。与传统的表格展示、枯燥的文字阐述相比,图表展示则使用户看起来更加直观、数据的展示则更加一目了然。本文基于svg绘图技术结合前端技术栈vue,以工作中常用的环形进度条为例,简单阐述一下绘制进度条的一些思路。............

qq_40289557的博客 8360

基于Simulink的永磁同步电机(PMSM)无位置传感器矢量控制与龙伯格观测器设计​

本文介绍了基于Simulink的永磁同步电机(PMSM)无位置传感器矢量控制方法,重点讲解了龙伯格观测器的设计与实现。主要内容包括:1)系统架构与数学推导,通过静止坐标系状态方程和极点配置构建观测器;2)Simulink建模步骤,从电机模型搭建到观测器核心代码实现;3)仿真结果对比分析,显示龙伯格观测器相比滑模观测器具有更好的平滑性和抗噪能力;4)工程部署建议,包括参数在线辨识、低速补偿策略和代码生成优化。该方法实现了全速域无感运行,稳态转速误差小于1%,为低成本高可靠性电机控制提供了有效解决方案。

amy_mhd的博客 161

基于STM32F103与AD8232的便携式心电监测系统设计与实现

本文详细介绍基于STM32F103微控制器与AD8232心电传感器模块的便携式心电监测系统设计与实现。系统通过ADC采集心电信号,结合软件滤波算法处理基线漂移和工频干扰,并利用OLED屏幕实时显示波形,具有低成本、高实用性的特点,适用于健康监测与嵌入式学习。

m5n6o7的博客 737

N32串口DMA接收不定长数据:空闲中断与DMA通道的协同处理

本文详细解析了在N32系列MCU中,利用串口空闲中断与DMA通道协同处理不定长数据的核心机制与实战方法。通过剖析空闲中断的触发时机、DMA的配置要点以及两者协同工作的关键时序,提供了避免数据错乱的避坑指南和完整的代码实现,旨在帮助开发者构建高效、可靠的嵌入式串口通信子系统。

weixin_29191669的博客 123

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8367

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

开发Flink Gauss CDC是为了适配华为自研GaussDB的特殊日志格式和逻辑复制机制,解决Flink CDC无法直接支持的问题,同时优化存量与增量同步的效率和一体化读取能力,满足GaussDB复合主键处理、数据落库等定制化需求,以实现高效、准确的数据同步。

数据与算法架构提升之路专栏 1985

SPMI总线协议(一)

系统电源管理接口( System Power Management Interface简称SPMI)是一种双线串行接口,用于连接片上系统(SoC)处理器系统的集成电源控制器(PC)与一个或多个电源管理集成电路(PMIC)电压调节系统。SPMI 使系统能够使用单个 SPMI 总线动态调整 SoC 内部电压域的电源和衬底偏置电压。移动设备和其他便携式设计正日益采用系SPMI)协议,实现多主多从系统,根据实时系统需求监测和动态控制供电电压。设计人员可以在系统级实现更低的功率。

qflook的博客 886

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 使用Rook安装Ceph
下一篇: Ceph编译
gfengwong
博客等级 码龄12年 103粉丝 67原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值