NFS 驱动

网络文件系统 (NFS) 是一种分布式文件系统协议,最初由 Sun Microsystems 于 1984 年开发。NFS 服务器 exports 一个或多个文件系统,称为 shares。NFS 客户端可以将这些导出的共享挂载到自己的文件系统上。您可以对这个挂载的远程文件系统执行文件操作,就像该文件系统是本地的。

NFS 驱动的工作原理

NFS 驱动以及基于它的其他驱动程序的工作方式与传统的块存储驱动程序有很大不同。

NFS 驱动实际上并不允许实例在块级别访问存储设备。相反,文件是在 NFS 共享上创建的,并映射到实例,从而模拟了一个块设备。这与 QEMU 的工作方式类似,QEMU 将实例存储在 /var/lib/nova/instances 目录中。

如何使用 NFS 驱动程序

创建 NFS 服务器不在本文档的范围内。

使用单个 NFS 服务器配置

此示例假定可以访问以下 NFS 服务器和挂载点

  • 192.168.1.200:/storage

此示例演示了使用单个 NFS 服务器使用此驱动程序。

nas_host 选项设置为 NFS 服务器的 IP 地址或主机名,并将 nas_share_path 选项设置为 NFS 导出路径

nas_host = 192.168.1.200
nas_share_path = /storage

使用多个 NFS 服务器配置

注意

您可以使用 cinder 多后端 功能使用多个 NFS 服务器。使用多个值配置 enabled_backends 选项,并按照上述说明为每个后端使用 nas_hostnas_share 选项。

以下示例是使用多个 NFS 服务器的另一种方法,并演示了使用多个 NFS 服务器使用此驱动程序。不需要多个服务器。通常一个就足够了。

此示例假定可以访问以下 NFS 服务器和挂载点

  • 192.168.1.200:/storage

  • 192.168.1.201:/storage

  • 192.168.1.202:/storage

  1. 将您的 NFS 服务器列表添加到您使用 nfs_shares_config 选项指定的文件中。例如,如果此选项的值设置为 /etc/cinder/shares.txt 文件,则

    # cat /etc/cinder/shares.txt
    192.168.1.200:/storage
    192.168.1.201:/storage
    192.168.1.202:/storage
    

    允许在此文件中添加注释。它们以 # 开头。

  2. 配置 nfs_mount_point_base 选项。这是 cinder-volume 挂载 shares.txt 文件中存储的所有 NFS 共享的目录。在此示例中,使用 /var/lib/cinder/nfs。当然,您可以使用默认值 $state_path/mnt

  3. 启动 cinder-volume 服务。/var/lib/cinder/nfs 现在应该包含一个目录,用于 shares.txt 文件中指定的每个 NFS 共享。每个目录的名称都是哈希名称

    # ls /var/lib/cinder/nfs/
    ...
    46c5db75dc3a3a50a10bfd1a456a9f3f
    ...
    
  4. 现在您可以像往常一样创建卷

    $ openstack volume create --size 5
    # ls /var/lib/cinder/nfs/46c5db75dc3a3a50a10bfd1a456a9f3f
    volume-a8862558-e6d6-4648-b5df-bb84f31c8935
    

此卷也可以像其他卷一样附加和删除。

NFS 驱动程序说明

  • cinder-volume 管理 NFS 共享的挂载以及共享上的卷创建。在规划您的 OpenStack 架构时请记住这一点。如果您有一个主 NFS 服务器,那么只使用一个 cinder-volume 服务来处理所有对该 NFS 服务器的请求可能是有意义的。但是,如果该单个服务器无法处理所有请求,则需要多个 cinder-volume 服务以及可能多个 NFS 服务器。

  • 由于数据存储在文件中而不是实际的块存储设备上,因此您可能看不到与传统块存储驱动程序相同的 IO 性能。请相应地进行测试。

  • 尽管可能存在 IO 性能损失,但将卷数据存储在文件中可能是有益的。例如,备份卷可以像复制卷文件一样简单。

注意

常规 IO 刷新和同步仍然有效。