长期支持版本

    社区创新版本

      eNFS 使用指南

      简介

      非结构化数据高速增长,用户在数据共享访问、数据频繁改写、数据本地/异地灾备保护,以及数据权限/资源管控等场景,NAS 成为海量非结构化生产业务的最佳选择。在 NAS 生产业务中 NFS 协议使用广泛, 但是原生 NFS 客户端在性能和可靠性方面存在一些不足, 主要体现在以下3个方面:

      1. 一个挂载点仅绑定一个 IP,IO 路径软硬件故障,业务 IO 挂死。
      2. 云内云外跨三层网络双活的链路无法自动切换。
      3. 一个挂载点仅绑定一个 IP,高负载业务场景下 NFS 客户端性能存在瓶颈。

      eNFS 特性, 对原生 NFS 进行增强, 通过多链路等技术很好的解决这些问题, 极大提升业务的性能与稳定性。eNFS 特性通过 mount 命令进行挂载 NFS 共享时,使用 -o 参数指定本机与 NFS serve 的 IP 列表, eNFS 特性会根据这些 IP 列表创建多条链路, 在进行文件操作时 eNFS 将 IO 通过 RoundRobin 方式负载均衡到多条链路上以提升性能(当前版本负载均衡只支持 NFS V3)。并且在 IO 过程中如果出现部分链路故障,eNFS 也会将超时的 IO 快速分发到可用链路上,以解决业务挂死问题。

      软硬件要求

      使用 eNFS 特性 所使用的机器需要满足如下软硬件要求:

      • CPU 架构为 AArch64 或者 x86_64
      • 操作系统为 openEuler 20.03 LTS SP4

      eNFS 配置

      eNFS 是对原生NFS 进行增强,配置需要在 NFS 客户端进行操作, 无需在 NFS server 侧配置。

      通过配置文件 /etc/enfs/config.ini 进行参数设置:

      1. 配置路径连通探测周期。

        path_detect_interval=10
        

        说明: 取值范围是 5 ~ 300, 默认值为 10,单位 : 秒。

      2. 配置路径连通探测消息超过阈值未返回,将认为链路状态异常。

        path_detect_timeout=10
        

        说明: 取值范围是 1 ~ 60, 默认值为 10,单位 : 秒。

      3. 配置 NFS 的文件操作的超时阈值, 当 NFS server 超时未响应时,将 IO 选其他可用链接进行。

        multipath_timeout=0
        

        说明: 取值范围是 0 ~ 30, 默认值为 0(0:使用 mount 命令指定的 timeo 参数, 不使用 eNFS 模块的配置),单位 : 秒。

      4. 配置路径连通探测周期。

        multipath_disable=0
        

        说明: 取值为 0 或者 1, 默认值为 0 (0 :启用 eNFS 特性)。

      eNFS使用

      eNFS 是对原生 NFS 客户端的增强, 访问 NFS server 仍然是使用 mount 命令进行挂载。 如果需要使用 eNFS 功能, 则使用 - o 可选参数 localaddrs 和 remoteaddrs 进行指定 IP 列表。

      当不输入这 2 个可选参数时, 则是不使用 eNFS 特性, 此时功能与原来 NFS 客户端一致。

      命令格式

      命令的使用格式为:

      mount -t nfs -o [localaddrs=127.17.0.1-127.17.0.4],[remoteaddrs=127.17.0.20-127.17.0.24] 127.17.0.20:/test /mnt/test
      

      参数说明

      参数是否必选参数含义
      localaddrs当 NFS 客户端本机有多个 IP 可以与 NFS server 连通时, 可以输入此参数指定用于 NFS 挂载的本机 IP 列表,如果不指定则由操作系统进行自动选择 。
      IP 地址段使用‘-’标识,多个 IP 用‘~’隔开,最多8个 IP。
      remoteaddrs当 NFS server 有多个 ip 可以与 NFS 客户端连通时, 可以输入此参数指定用于 NFS 挂载的 NFS server IP 列表。
      如果不指定则使用mount参数中 NFS server挂载点的 IP, 如上图示例中的127.17.0.20。
      IP 地址段使用‘-’标识,多个 IP 用‘~’隔开,最多8个 IP。
      注意: remoteaddrs 指定的 IP 列表 必须都归属为 同一个 NFS server 或者 NFS server 集群系统。

      后续也可使用 mount -o remount,[localaddrs=127.17.0.1-127.17.0.4],[remoteaddrs=127.17.0.20-127.17.0.24] 进行 IP 列表的修改。

      eNFS链路状态查看

      使用 mount 挂载 NFS 共享后,可以查看多条链路的状态。具体操作如下。

      查看步骤

      1. 先使用 mount 命令查看各个挂载点的 enfs_info 信息。

         [root@localhost ~]# mount
         8.47.219.120:/fszhn1 on /mnt/fszhn1 type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=8.47.219.120,mountvers=3,mountport=2050,mountproto=udp,local_lock=none,addr=8.47.219.120,remoteaddrs=8.47.219.121~8.47.219.122~8.47.219.123~8.47.219.124,enfs_info=8.47.219.120_1)
        

        其中enfs_info 为 8.47.219.120_1。

      2. 获取到 enfs_info 后,使用 eNFS 命令查看路径状态和 IO 统计。

        1) 查看链路状态, 命令格式:

        cat /proc/enfs/8.47.219.120_1/path
        

        其中 8.47.219.120_1 是第一步获取到的 enfs_info 信息。

        [root@localhost ~]# cat /proc/enfs/8.47.219.120_1/path
        id    local_addr      remote_addr     path_state  xprt_state  
        0     8.47.210.220    8.47.219.120    Normal      CONNECTED|BOUND
        1     8.47.210.220    8.47.219.121    Normal      CONNECTED|BOUND
        2     8.47.210.220    8.47.219.122    Normal      CONNECTED|BOUND
        3     8.47.210.220    8.47.219.123    Normal      CONNECTED|BOUND
        4     8.47.210.220    8.47.219.124    Normal      CONNECTED|BOUND
        

        字段含义

        字段含义
        id链路的序号
        local_addr此链路的本机 IP
        remote_addr此链路的 NFS server IP
        path_state此链路当前健康状态
        Init     -- 初始状态
        Normal  -- 链路正常
        Fault      -- 链路异常
        xprt_state此链路当前运行状态
        CONNECTED   -- 已连接
        CONNECTING    -- 正在建立链路
        BOUND    -- 此链路已经可以接收、发送 IO 

        2) 查看链路 IO 统计, 命令格式:

        cat /proc/enfs/8.47.219.120_1/stat
        

        其中 8.47.219.120_1 是 enfs_info 信息。

         [root@localhost ~]# cat /proc/enfs/8.47.219.120_1/stat
         id    local_addr      remote_addr     r_count               r_rtt                 r_exec                w_count               w_rtt                 w_exec  
         0     8.47.210.220    8.47.219.120    0                     0                     0                     0                     0                     0   
         1     8.47.210.220    8.47.219.121    0                     0                     0                     6                     5                     23  
         2     8.47.210.220    8.47.219.122    0                     0                     0                     7                     6                     17  
         3     8.47.210.220    8.47.219.123    0                     0                     0                     0                     0                     0   
         4     8.47.210.220    8.47.219.124    0                     0                     0                     0                     0                     0  
        

        字段含义

        字段含义
        id链路的序号
        local_addr此链路的本机 IP
        remote_addr此链路的 NFS server IP
        r_count此链路上发送的读 IO 次数
        r_rtt此链路上发送的读 IO RPC层处理的平均时延, 单位:毫秒
        r_exec此链路上发送的读 IO NFS server 处理的平均时延, 单位:毫秒
        w_count此链路上发送的写 IO 次数
        w_rtt此链路上发送的写 IO RPC层处理的平均时延, 单位:毫秒
        w_exec此链路上发送的写 IO NFS server 处理的平均时延, 单位:毫秒

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份