GlusterFS driver

GlusterFS driver uses GlusterFS, an open source distributed file system, as the storage back end for serving file shares to the Shared File Systems clients.

Supported shared filesystems and operations

The driver supports NFS shares.

The following operations are supported:

  • Create a share.

  • Delete a share.

  • Allow share access.

    Note the following limitations:

    • Only IP access type is supported

    • Only read-write access is supported.

  • Deny share access.

Requirements

  • Install glusterfs-server package, version >= 3.5.x, on the storage back end.

  • Install NFS-Ganesha, version >=2.1, if using NFS-Ganesha as the NFS server for the GlusterFS back end.

  • Install glusterfs and glusterfs-fuse package, version >=3.5.x, on the Shared File Systems service host.

  • Establish network connection between the Shared File Systems service host and the storage back end.

Shared File Systems service driver configuration setting

The following parameters in the Shared File Systems service’s configuration file manila.conf need to be set:

share_driver = manila.share.drivers.glusterfs.GlusterfsShareDriver

If the back-end GlusterFS server runs on the Shared File Systems service host machine:

glusterfs_target = <glustervolserver>:/<glustervolid>

If the back-end GlusterFS server runs remotely:

glusterfs_target = <username>@<glustervolserver>:/<glustervolid>

Known restrictions

  • The driver does not support network segmented multi-tenancy model, but instead works over a flat network, where the tenants share a network.

  • If NFS Ganesha is the NFS server used by the GlusterFS back end, then the shares can be accessed by NFSv3 and v4 protocols. However, if Gluster NFS is used by the GlusterFS back end, then the shares can only be accessed by NFSv3 protocol.

  • All Shared File Systems service shares, which map to subdirectories within a GlusterFS volume, are currently created within a single GlusterFS volume of a GlusterFS storage pool.

  • The driver does not provide read-only access level for shares.

Driver options

The following table contains the configuration options specific to the share driver.

Description of GlusterFS share driver configuration options

Configuration option = Default value

Description

[DEFAULT]

glusterfs_ganesha_server_ip = None

(String) Remote Ganesha server node’s IP address.

glusterfs_ganesha_server_password = None

(String) Remote Ganesha server node’s login password. This is not required if ‘glusterfs_path_to_private_key’ is configured.

glusterfs_ganesha_server_username = root

(String) Remote Ganesha server node’s username.

glusterfs_mount_point_base = $state_path/mnt

(String) Base directory containing mount points for Gluster volumes.

glusterfs_nfs_server_type = Gluster

(String) Type of NFS server that mediate access to the Gluster volumes (Gluster or Ganesha).

glusterfs_path_to_private_key = None

(String) Path of Manila host’s private SSH key file.

glusterfs_server_password = None

(String) Remote GlusterFS server node’s login password. This is not required if ‘glusterfs_path_to_private_key’ is configured.

glusterfs_servers =

(List) List of GlusterFS servers that can be used to create shares. Each GlusterFS server should be of the form [remoteuser@]<volserver>, and they are assumed to belong to distinct Gluster clusters.

glusterfs_share_layout = None

(String) Specifies GlusterFS share layout, that is, the method of associating backing GlusterFS resources to shares.

glusterfs_target = None

(String) Specifies the GlusterFS volume to be mounted on the Manila host. It is of the form [remoteuser@]<volserver>:<volid>.

glusterfs_volume_pattern = None

(String) Regular expression template used to filter GlusterFS volumes for share creation. The regex template can optionally (ie. with support of the GlusterFS backend) contain the #{size} parameter which matches an integer (sequence of digits) in which case the value shall be interpreted as size of the volume in GB. Examples: “manila-share-volume-d+$”, “manila-share-volume-#{size}G-d+$”; with matching volume names, respectively: “manila-share-volume-12”, “manila-share-volume-3G-13”. In latter example, the number that matches “#{size}”, that is, 3, is an indication that the size of volume is 3G.