---
title: github-fill
description: 部署 NFS 在选择备份介质时，建议使用 OSS 作为备份的目的端，OSS 作为无状态的对象存储，比有状态的 NFS4 有更高的稳定性。 如果需要使用 NFS 作为备份目的端，可参考本节内容部署 NFS。NFS 分软件和硬件两种，由于软件 NFS 不稳定，容易出现 NFS Hang 的情况，导致备份任务卡住或挂载 N…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.1.0

# 部署 NFS

更新时间：2025-01-16 10:47:30

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.1.0/zh-CN/600.manage/600.backup-and-recovery/200.deploy-nfs.md)  

在选择备份介质时，建议使用 OSS 作为备份的目的端，OSS 作为无状态的对象存储，比有状态的 NFS4 有更高的稳定性。

如果需要使用 NFS 作为备份目的端，可参考本节内容部署 NFS。NFS 分软件和硬件两种，由于软件 NFS 不稳定，容易出现 NFS Hang 的情况，导致备份任务卡住或挂载 NFS 的机器无法正常工作，建议使用专用的 NFS 硬件设备。

## 注意事项

- 使用 NFS 环境时，需要保证先挂载 NFS，再开启备份。如果备份期间 NFS 出现问题，需要先停止数据备份和日志归档，再解决 NFS 的问题。
 - 由于 OceanBase 数据库备份的并发控制需依赖 NFS4 的文件锁功能，故在挂载 NFS 时，需使用 NFS 4.1 及以上版本。
 - 建议使用 SSD 的 NFS 服务，避免出现 NFS 性能不足导致的 NFS 不稳定问题。
 - 在使用 NFS 作为备份介质时，必须保证所有 OBServer 节点都挂载了同一个服务器的 NFS。同时，为保证备份的顺利进行，务必使用本文档中建议的参数挂载 NFS。挂载 NFS 具体操作请参见本节 **部署 NFS 客户端**。
 - 在重启 OBServer 节点时，需要先启动 NFS，再启动 OBServer 节点。
 - 添加新的机器后，在启动 OBServer 节点前，需要保证新的机器挂载 NFS 成功或者可以备份到其他介质。

## 部署 NFS 软件的服务器端

#### 注意

如果您使用的是 NFS 硬件设备，则可跳过本操作，直接部署 NFS 客户端。

1. 登录 NFS 服务器。
 2. 执行以下命令，通过 YUM 包管理器安装 NFS。

   ```shell
   sudo yum install nfs-utils

   ```
 3. 设置 Exports。

      1. 选择一个合适的目录作为共享目录，在选择时需要考虑备份所需的空间和性能。

        例如，本文档中选择的共享目录为 `/data/nfs_server/`。
      2. 使用 `sudo vim /etc/exports` 命令打开配置文件，设置以下信息。

        ```shell
        /data/nfs_server/ xx.xx.xx.xx/16(rw,sync,all_squash)

        ```

        其中，`xx.xx.xx.xx` 表示允许访问的网段。
      3. 执行以下命令，为 `nfsnobody` 赋权，确保 `nfsnobody` 有权限访问 `exports` 中指定的目录。

        ```shell
        sudo chown nfsnobody:nfsnobody -R /data/nfs_server

        ```
 4. 配置 NFS 参数。

      1. 执行 `sudo vim /etc/sysconfig/nfs` 命令，打开配置文件。
      2. 调整如下所示参数：

        ```shell
        RPCNFSDCOUNT=8
        RPCNFSDARGS="-N 2 -N 3 -U"
        NFSD_V4_GRACE=90
        NFSD_V4_LEASE=90

        ```
      3. 执行以下命令，重新启动 NFS。

        ```shell
        sudo systemctl restart nfs-config

        sudo systemctl restart nfs-server

        ```
 5. 设置 Slot Table。

      1. 执行 `sudo vim /etc/sysctl.conf` 命令，打开 `sysctl.conf`配置文件，在文件中添加一行如下信息：

        ```xml
        sunrpc.tcp_max_slot_table_entries=128

        ```
      2. 执行以下命令，将同时发起的 NFS 请求数量修改为 128。

        ```sql
        sudo sysctl -w sunrpc.tcp_max_slot_table_entries=128

        ```

        命令执行成功后，可以通过 `cat /proc/sys/sunrpc/tcp_max_slot_table_entries` 命令查看设置是否生效，如果返回值为 128，则说明修改成功。
      3. （可选）重启机器。

## 部署 NFS 客户端

部署 NFS 客户端时，需要在所有 OBServer 节点上进行操作。

以下以在某一台 OBServer 节点上的操作为例，提供操作指导。

1. 登录 OBServer 节点。
 2. 执行以下命令，通过 YUM 包管理器安装 NFS。

   ```
 3. 设置 Slot Table。

      1. 执行 `sudo vim /etc/sysctl.conf` 命令，打开`sysctl.conf` 配置文件，在文件中添加一行如下信息：

        ```

        命令执行成功后，可以通过 `cat /proc/sys/sunrpc/tcp_max_slot_table_entries` 命令查看设置是否生效，如果返回值为 128，则说明修改成功。
      3. （可选）重启机器。
 4. 选择一个合适的目录作为 Mount 点， 执行以下命令，挂载 NFS。

   例如，本文档中假设 Mount 到 `/data/nfs` 目录，如果没有合适的目录可以新建一个目录。

   ```shell
   sudo mount -tnfs4 -o rw,nfsvers=4.1,sync,lookupcache=positive,hard,timeo=600,wsize=1048576,rsize=1048576,namlen=255 10.10.10.1:/data/nfs_server /data/nfs

   ```

   语句中：

      - `nfsvers=4.1`：由于备份依赖 nfs 4 原生的文件锁，建议使用 nfs 4.1 及以上版本。nfs 4.0 有一个已知 Bug，在重命名文件以后可能会读到旧文件。
      - `sync`：使用同步写保证数据能及时刷到服务端，从而保证数据的一致性。
      - `lookupcache=positive`：用于避免并发访问目录或者文件时误报目录或文件不存在的问题，保证数据的一致性。
      - `hard`：在 NFS 不可用的情况下，系统会卡住应用的读写请求，以保证数据的一致性。不能使用 `soft` 选项，会有数据错误的风险。
      - `timeo`：用于指定重试的等待时间，单位为 0.1s。在设置时，建议不要设置得过大，建议值为 `600`。
      - `wsize`：表示写的数据块大小，建议设置为 `1048576`。
      - `rsize`：表示读的数据块大小，建议设置为 `1048576`。
      - `namlen`：建议设置为 `255`。
      - `10.10.10.1`：表示 NFS 服务器的 IP 地址。  

   #### 注意

      - 在挂载 NFS 时，必须保证备份挂载环境的参数中包含 `nfsvers=4.1`、`sync`、`lookupcache=positive` 及 `hard`。
      - Docker 环境需要在宿主机上挂载 NFS，然后映射到 Docker 里面。如果 Docker 内部直接挂载 NFS，可能会出现客户端 Hung 住的场景。
 5. 挂载完成后，可执行以下命令，验证 NFS 的性能。

   ```shell
   fio -filename=/data/nfs/fio_test -direct=1  -rw=randwrite -bs=2048K -size=100G  -runtime=300 -group_reporting -name=mytest  -ioengine=libaio -numjobs=1 -iodepth=64 -iodepth_batch=8 -iodepth_low=8 -iodepth_batch_complete=8

   ```

   例如，执行结果如下：

   ```shell
   Run status group 0 (all jobs):
   WRITE: io=322240MB, aggrb=1074.2MB/s, minb=1074.2MB/s, maxb=1074.2MB/s, mint=300006msec, maxt=300006msec

   ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
