Manila 配置

驱动配置

Generic 驱动配置

网络配置

可以使用以下两种可能的配置之一进行共享配置

  • 服务 VM 具有来自连接到公共路由器的网络的一个网络接口。为了成功创建共享,用户网络也应该连接到公共路由器。
  • 服务 VM 有两个网络接口,第一个连接到服务网络,第二个直接连接到用户的网络。

服务镜像要求

  • 基于 Linux 的发行版
  • NFS 服务器
  • Samba 服务器> = 3.2.0,可以通过存储在注册表中的数据进行配置
  • SSH 服务器
  • 配置为 DHCP 的两个网络接口(请参阅网络配置)
  • exportfs和用于共享操作的库net conf
  • 以下文件会被使用,因此如果它们的路径不同,则至少需要为它们创建软链接:
    • /etc/exports:NFS 导出的永久文件
    • /var/lib/nfs/etab:使用 NFS 导出的临时文件 exportfs
    • /etc/fstab:已挂载文件系统的永久文件
    • /etc/mtab:临时文件,其中包含已安装的文件系统 mount

支持的操作

该驱动程序支持 CIFS 和 NFS 共享

支持以下操作:

  • 创建一个共享

  • 删除共享

  • 允许共享访问

请注意以下限制:

  • NFS 和 CIFS 仅支持 IP 访问类型

  • 拒绝共享访问权限

  • 创建快照

  • 删除快照

  • 从快照创建共享

  • 扩大共享

  • 缩小共享

已知限制

  • nova 的配置之一只允许每台服务器 26 个共享。此限制来自用于块设备附加的最大虚拟 PCI 接口数。有 28 个虚拟 PCI 接口,在此配置中,其中两个用于服务器需求,另外 26 个用于附加用于共享的块设备
  • 在扩大共享操作期间,共享访问将被短暂中断
  • 缩小共享功能实质上并无实效,因为 generic 驱动程序仅缩小文件系统大小,并且不会缩小 Cinder 卷的大小

具体配置

配置共享后端
  • manila.conf 配置文件中加入 CEPHFS 协议
1
  enabled_share_protocols = NFS,CIFS
  • 在配置文件最后创建一个 section 来定义 generic 后端
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  [generic1]
  driver_handles_share_servers = True
  service_instance_flavor_id = 100
  service_instance_user = manila
  service_instance_password = manila
  service_image_name = manila-service-image-master
  #path_to_private_key = /opt/stack/.ssh/id_rsa
  #path_to_public_key = /opt/stack/.ssh/id_rsa.pub
  manila_service_keypair_name = manila-service
  share_backend_name = GENERIC1
  share_driver = manila.share.drivers.generic.GenericShareDriver

可以使用 SSH 密钥而不是密码身份验证来获取服务实例凭据,如果要使用 SSH 密钥可以向下面这样取消注释

path_to_private_key = /opt/stack/.ssh/id_rsa path_to_public_key = /opt/stack/.ssh/id_rsa.pub

另外 service_image_name, service_instance_flavor_id, service_instance_userservice_instance_password 等选项是设定的启动 share server 的相关参数,可根据情况做修改

service_image_name 的值为 glance 中有的满足驱动要求的服务器镜像名

  • enabled_share_backends 配置项中加入定义的 generic1 后端
1
  enabled_share_backends = generic1

每次修改配置后都需要重启 manila-share 服务才能生效

创建共享
  • 首先创建一个 generic 共享类型
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  $ manila type-create default_share_type True
  +----------------------+--------------------------------------+
  | Property             | Value                                |
  +----------------------+--------------------------------------+
  | required_extra_specs | driver_handles_share_servers : True  |
  | Name                 | default_share_type                   |
  | Visibility           | public                               |
  | is_default           | -                                    |
  | ID                   | 8a35da28-0f74-490d-afff-23664ecd4f01 |
  | optional_extra_specs | snapshot_support : True              |
  +----------------------+--------------------------------------+
  • 如果没有 service image,可使用下面的命令进行创建
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  $ glance image-create \
  --name "manila-service-image" \
  --disk-format qcow2 \
  --container-format bare \
  --visibility public --progress < manila-service-image-master.qcow2
  [=============================>] 100%
  +------------------+--------------------------------------+
  | Property         | Value                                |
  +------------------+--------------------------------------+
  | checksum         | 48a08e746cf0986e2bc32040a9183445     |
  | container_format | bare                                 |
  | created_at       | 2016-01-26T19:52:24Z                 |
  | disk_format      | qcow2                                |
  | id               | 1fc7f29e-8fe6-44ef-9c3c-15217e83997c |
  | min_disk         | 0                                    |
  | min_ram          | 0                                    |
  | name             | manila-service-image                 |
  | owner            | e2c965830ecc4162a002bf16ddc91ab7     |
  | protected        | False                                |
  | size             | 306577408                            |
  | status           | active                               |
  | tags             | []                                   |
  | updated_at       | 2016-01-26T19:52:28Z                 |
  | virtual_size     | None                                 |
  | visibility       | public                               |
  +------------------+--------------------------------------+
  • 列出可用网络以获取专用网络的 ID 和子网
1
2
3
4
5
6
7
  $ neutron net-list
  +--------------------------------------+---------+----------------------------------------------------+
  | id                                   | name    | subnets                                            |
  +--------------------------------------+---------+----------------------------------------------------+
  | 0e62efcd-8cee-46c7-b163-d8df05c3c5ad | public  | 5cc70da8-4ee7-4565-be53-b9c011fca011 10.3.31.0/24  |
  | 7c6f9b37-76b4-463e-98d8-27e5686ed083 | private | 3482f524-8bff-4871-80d4-5774c2730728 172.16.1.0/24 |
  +--------------------------------------+---------+----------------------------------------------------+
  • 创建共享网络
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
  $ manila share-network-create --name demo-share-network1 \
  --neutron-net-id PRIVATE_NETWORK_ID \
  --neutron-subnet-id PRIVATE_NETWORK_SUBNET_ID
  +-------------------+--------------------------------------+
  | Property          | Value                                |
  +-------------------+--------------------------------------+
  | name              | demo-share-network1                  |
  | segmentation_id   | None                                 |
  | created_at        | 2016-01-26T20:03:41.877838           |
  | neutron_subnet_id | 3482f524-8bff-4871-80d4-5774c2730728 |
  | updated_at        | None                                 |
  | network_type      | None                                 |
  | neutron_net_id    | 7c6f9b37-76b4-463e-98d8-27e5686ed083 |
  | ip_version        | None                                 |
  | cidr              | None                                 |
  | project_id        | e2c965830ecc4162a002bf16ddc91ab7     |
  | id                | 58b2f0e6-5509-4830-af9c-97f525a31b14 |
  | description       | None                                 |
  +-------------------+--------------------------------------+
  • 使用共享网络创建 NFS 共享。由于已创建并配置了默认共享类型,因此无需在请求中指定。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  $ manila create NFS 1 --name demo-share1 --share-network demo-share-network1
  +-----------------------------+--------------------------------------+
  | Property                    | Value                                |
  +-----------------------------+--------------------------------------+
  | status                      | None                                 |
  | share_type_name             | default_share_type                   |
  | description                 | None                                 |
  | availability_zone           | None                                 |
  | share_network_id            | 58b2f0e6-5509-4830-af9c-97f525a31b14 |
  | share_group_id              | None                                 |
  | host                        | None                                 |
  | snapshot_id                 | None                                 |
  | is_public                   | False                                |
  | task_state                  | None                                 |
  | snapshot_support            | True                                 |
  | id                          | 016ca18f-bdd5-48e1-88c0-782e4c1aa28c |
  | size                        | 1                                    |
  | name                        | demo-share1                          |
  | share_type                  | 8a35da28-0f74-490d-afff-23664ecd4f01 |
  | created_at                  | 2016-01-26T20:08:50.502877           |
  | export_location             | None                                 |
  | share_proto                 | NFS                                  |
  | project_id                  | 48e8c35b2ac6495d86d4be61658975e7     |
  | metadata                    | {}                                   |
  +-----------------------------+--------------------------------------+
  • 一段时间后,共享状态应更改 creatingavailable
1
2
3
4
5
6
  $ manila list
  +--------------------------------------+-------------+------+-------------+-----------+-----------+------------------------+-----------------------------+-------------------+
  | ID                                   | Name        | Size | Share Proto | Status    | Is Public | Share Type Name        | Host                        | Availability Zone |
  +--------------------------------------+-------------+------+-------------+-----------+-----------+------------------------+-----------------------------+-------------------+
  | 5f8a0574-a95e-40ff-b898-09fd8d6a1fac | demo-share1 | 1    | NFS         | available | False     |   default_share_type   | storagenode@generic#GENERIC | nova              |
  +--------------------------------------+-------------+------+-------------+-----------+-----------+------------------------+-----------------------------+-------------------+
  • 查看共享的导出 IP 地址
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  $ manila show demo-share1
  +-----------------------------+------------------------------------------------------------------------------------+
  | Property                    | Value                                                                              |
  +-----------------------------+------------------------------------------------------------------------------------+
  | status                      | available                                                                          |
  | share_type_name             | default_share_type                                                                 |
  | description                 | None                                                                               |
  | availability_zone           | nova                                                                               |
  | share_network_id            | 58b2f0e6-5509-4830-af9c-97f525a31b14                                               |
  | share_group_id              | None                                                                               |
  | export_locations            |                                                                                    |
  |                             | path = 10.254.0.6:/shares/share-0bfd69a1-27f0-4ef5-af17-7cd50bce6550               |
  |                             | id = e525cbca-b3cc-4adf-a1cb-b1bf48fa2422                                          |
  |                             | preferred = False                                                                  |
  | host                        | storagenode@generic#GENERIC                                                        |
  | access_rules_status         | active                                                                             |
  | snapshot_id                 | None                                                                               |
  | is_public                   | False                                                                              |
  | task_state                  | None                                                                               |
  | snapshot_support            | True                                                                               |
  | id                          | 5f8a0574-a95e-40ff-b898-09fd8d6a1fac                                               |
  | size                        | 1                                                                                  |
  | name                        | demo-share1                                                                        |
  | share_type                  | 8a35da28-0f74-490d-afff-23664ecd4f01                                               |
  | has_replicas                | False                                                                              |
  | replication_type            | None                                                                               |
  | created_at                  | 2016-03-30T19:10:33.000000                                                         |
  | share_proto                 | NFS                                                                                |
  | project_id                  | 48e8c35b2ac6495d86d4be61658975e7                                                   |
  | metadata                    | {}                                                                                 |
  +-----------------------------+------------------------------------------------------------------------------------+
访问许可
  • 在尝试通过网络挂载之前配置对新共享的访问许可。计算实例(其 IP 地址由下面的 INSTANCE_IP 引用)必须具有到共享网络中指定的网络的网络连接
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  $ manila access-allow demo-share1 ip INSTANCE_IP
  +--------------+--------------------------------------+
  | Property     | Value                                |
  +--------------+--------------------------------------+
  | share_id     | 5f8a0574-a95e-40ff-b898-09fd8d6a1fac |
  | access_type  | ip                                   |
  | access_to    | 10.0.0.46                            |
  | access_level | rw                                   |
  | state        | new                                  |
  | id           | aefeab01-7197-44bf-ad0f-d6ca6f99fc96 |
  +--------------+--------------------------------------+
  • 查看可访问列表
1
  manila access-list demo-share1
在计算实例上挂载共享
  • 登录到计算实例并创建一个放置挂载的文件夹,如下
1
  $ mkdir ~/test_folder
  • 使用共享的导出位置在计算实例中挂载 NFS 共享,如下
1
  $ sudo mount -vt nfs 10.254.0.6:/shares/share-0bfd69a1-27f0-4ef5-af17-7cd50bce6550 ~/test_folder
卸载共享

可使用以下命令进行共享的卸载

1
sudo umount mountpoint

CephFS 驱动配置

CephFS 驱动程序使 manila 能够使用 Ceph 网络协议或 NFS 协议导出由 Ceph 的文件系统(CephFS)支持的共享文件系统。guest 虚拟机需要本机 Ceph 客户端或 NFS 客户端才能挂载文件系统。

当访客使用本机 Ceph 协议访问 CephFS 时,访问权限通过 Ceph 的 cephx 身份验证系统进行控制。如果用户请求对 ID 进行共享访问,Ceph 会创建相应的 Ceph 身份验证 ID 和密钥(如果它们尚不存在),并授权该 ID 访问该共享。然后,客户端可以使用 ID 和密钥安装共享。要了解有关配置 Ceph 客户端以访问使用此驱动程序创建的共享的更多信息,请参阅 Ceph 文档(http://docs.ceph.com/docs/master/cephfs/)。如果您选择使用内核客户端而不是 FUSE 客户端,则可能无法遵守 manila 中设置的共享大小限制。

当 guest 虚拟机通过 NFS 访问 CephFS 时,NFS-Ganesha 服务器会中转对 CephFS 的访问。该驱动程序通过管理 NFS-Ganesha 服务器的 exports 来启用访问控制。

支持的操作

CephFS 后端支持以下操作:

  • 创建/删除共享
  • 允许/拒绝 CephFS 本机协议访问共享

    • CephFS native 协议仅支持 cephx 访问类型
    • read-only 访问级别在 N 版及更高版本的 Manila 才支持
    • read-write 访问级别在 M 版及更高版本的 Manila 才支持
  • 允许/拒绝 NFS 访问共享

    • NFS 协议仅支持 ip 访问类型
    • read-onlyread-write 访问控制在 P 版本后及更高版本才支持
  • 扩大/缩小共享

  • 创建/删除快照

  • 创建/删除一致性组(CG)

  • 创建/删除 CG 快照

CephFS 目前支持快照仅作为实验性功能,因此使用 CephFS Native 驱动程序的快照支持也是实验性的,不应在生产环境中使用。有关更多信息,请参阅(http://docs.ceph.com/docs/master/cephfs/experimental-features/#snapshots

先决条件

对于 CephFS native 共享
  • M 版或更高版本的 manila
  • J 版或更高版本的 Ceph
  • 配置了文件系统的 Ceph 集群( http://docs.ceph.com/docs/master/cephfs/createfs/
  • 运行 manila-share 服务的服务器安装了 ceph-common 软件包
  • 客户虚拟机中安装了 Ceph 客户端,最好是 ceph-fuse
  • 确保 Ceph 集群的公共网络和运行 manila 共享服务的服务器之间的网络连接
  • 确保 Ceph 集群的公共网络和客户虚拟机之间的网络连接
对于 CephFS NFS 共享
  • P 版或更高版本的 manila
  • K 版或更高版本的 Ceph
  • 2.5 或更高版本的 NFS-Ganesha
  • 配置了文件系统的 Ceph 集群( http://docs.ceph.com/docs/master/cephfs/createfs/
  • 运行 manila-share 服务的服务器安装了 ceph-common 软件包
  • 客户虚拟机中安装了 NFS 客户端
  • 确保 Ceph 集群的公共网络和运行 manila 共享服务的服务器之间的网络连接
  • 确保 Ceph 集群的公共网络和 NFS-Ganesha 服务器之间的网络连接
  • NFS-Ganesha 服务器与 manila 之间的网络连接

授权驱动程序与 Ceph 通信

运行以下命令为要使用的驱动程序实例创建 Ceph 标识

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
read -d '' MON_CAPS << EOF
allow r,
allow command "auth del",
allow command "auth caps",
allow command "auth get",
allow command "auth get-or-create"
EOF

ceph auth get-or-create client.manila -o manila.keyring \
mds 'allow *' \
osd 'allow rw' \
mon "$MON_CAPS"

然后将 Ceph 集群服务器上生成的 manila.keyring 文件和 ceph.conf 文件(一般为 /etc/ceph/ceph.conf)复制到运行 manila-share 服务的服务器上的 /etc/ceph 文件夹下,同时为 manila-share 服务和 manila.keyring 文件设置相同的所有者,最后再在 ceph.conf 文件中加入以下内容

1
2
3
4
5
6
[client.manila]
client mount uid = 0
client mount gid = 0
log file = /opt/stack/logs/ceph-client.manila.log
admin socket = /opt/stack/status/stack/ceph-$name.$pid.asok
keyring = /etc/ceph/manila.keyring

为了与 Ceph 后端通信,CephFS 驱动程序实例(在 manila.conf 中表示为后端驱动程序部分)需要其自己的 Ceph 身份验证 ID,该 ID 不在同一控制器节点中运行的其他 CephFS 驱动程序实例中使用,说白了就是对于不同的驱动程序实例不要使用相同的认证标识

建议修改 Ceph 客户端的管理套接字文件和日志文件位置,以便它们分别与马尼拉服务的 pid 文件和日志文件位于同一位置

在 Ceph 后端启用快照支持

如果要在 manila 中使用快照,请在 Ceph 中启用快照,要启用快照需在 Ceph 服务器上执行以下命令

1
ceph mds set allow_new_snaps true --yes-i-really-mean-it

需要注意的是,CephFS 驱动程序的快照支持是实验性的,并且已知有几个注意事项可供使用。manila.conf如果您了解这些风险,请仅启用此选项和等效选项。有关更多详细信息,请参阅(http://docs.ceph.com/docs/master/cephfs/experimental-features/#snapshots

CephFS Native 驱动配置

配置共享后端
  • manila.conf 配置文件中加入 CEPHFS 协议
1
  enabled_share_protocols = NFS,CIFS,CEPHFS
  • 在配置文件最后创建一个 section 来定义 CephFS native 后端
1
2
3
4
5
6
7
8
9
  [cephfsnative1]
  driver_handles_share_servers = False
  share_backend_name = CEPHFSNATIVE1
  share_driver = manila.share.drivers.cephfs.driver.CephFSDriver
  cephfs_conf_path = /etc/ceph/ceph.conf
  cephfs_protocol_helper_type = CEPHFS
  cephfs_auth_id = manila
  cephfs_cluster_name = ceph
  cephfs_enable_snapshots = False

需要注意一下,对于 Mitaka, Newton, and Ocata 等版本,share_driver 的路径是 manila.share.drivers.cephfs.cephfs_native.CephFSNativeDriver

  • enabled_share_backends 配置项中加入定义的 cephfsnative1 后端
1
  enabled_share_backends = generic1,cephfsnative1

每次修改配置后都需要重启 manila-share 服务才能生效

创建共享
  • 首先创建一个 CephFS native 共享类型
1
2
  manila type-create cephfsnativetype false
  manila type-key cephfsnativetype set vendor_name=Ceph storage_protocol=CEPHFS
  • 然后创建一个共享
1
  manila create --share-type cephfsnativetype --name cephnativeshare1 cephfs 1
  • 查看共享的导出位置
1
  manila share-export-location-list cephnativeshare1

共享的导出位置包含 Ceph 监视器(mon)地址和端口以及要挂载的路径,形如 {mon ip addr:port}[,{mon ip addr:port}]:{path to be mounted}

访问许可
  • 允许 Ceph auth ID alice使用cephx访问类型访问共享
1
  manila access-allow cephnativeshare1 cephx alice
  • 查看可访问列表
1
  manila access-list cephnativeshare1
挂载共享
  • 使用授权 ID alice的密钥创建密钥环文件 alice.keyring,如下
1
2
  [client.alice]
          key = AQA8+ANW/4ZWNRAAOtWJMFPEihBA1unFImJczA==
  • 使用共享导出位置中的 mon IP 地址,创建配置文件 ceph.conf,如下
1
2
3
  [client]
          client quota = true
          mon host = 192.168.1.7:6789, 192.168.1.8:6789, 192.168.1.9:6789
  • 最后,挂载文件系统,使用刚刚创建的密钥环和配置文件替换对应的文件名,并用对应共享的导出位置替换要挂载的路径
1
2
3
4
5
  sudo ceph-fuse ~/mnt \
  --id=alice \
  --conf=./ceph.conf \
  --keyring=./alice.keyring \
  --client-mountpoint=/volumes/_nogroup/4c55ad20-9c55-4a5e-9233-8ac64566b98c
卸载共享

可使用以下命令进行共享的卸载

1
sudo fusermount -u mountpoint

CephFS NFS 驱动配置

配置共享后端
  • manila.conf 配置文件中加入 NFS 协议
1
  enabled_share_protocols = NFS,CIFS,CEPHFS
  • 在配置文件最后创建一个 section 来定义 CephFS native 后端
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  [cephfsnfs1]
  driver_handles_share_servers = False
  share_backend_name = CEPHFSNFS1
  share_driver = manila.share.drivers.cephfs.driver.CephFSDriver
  cephfs_protocol_helper_type = NFS
  cephfs_conf_path = /etc/ceph/ceph.conf
  cephfs_auth_id = manila
  cephfs_cluster_name = ceph
  cephfs_enable_snapshots = False
  cephfs_ganesha_server_is_remote= False
  cephfs_ganesha_server_ip = 172.24.4.3
  • 设置 driver_handles_share_servers 为 False,因为驱动程序不管理共享服务器的生命周期
  • 设置 cephfs_protocol_helper_type 为 NFS 允许 NFS 协议访问 CephFS 支持的共享
  • cephfs_auth_id 转换为授权驱动程序与 Ceph 通信时创建的 Ceph 身份
  • 如果 NFS-ganesha 服务器与 manila-share 服务位于同一位置,cephfs_ganesha_server_is_remote 的值则为 False,如果 NFS-ganesha 服务器是远程的,则为 True,并且要再添加cephfs_ganesha_server_ip, cephfs_ganesha_server_usernamecephfs_ganesha_server_password 选项(或者是 cephfs_ganesha_path_to_private_key 选项)
  • cephfs_ganesha_server_ip 是 NFS-ganesha 服务器的 ip 地址,即使 ganesha 服务器与 manila-share 服务位于同一位置,也建议设置此选项
  • enabled_share_backends 配置项中加入定义的 cephfsnative1 后端
1
  enabled_share_backends = generic1,cephfsnative1,cephfsnfs1

每次修改配置后都需要重启 manila-share 服务才能生效

创建共享
  • 首先创建一个 CephFS NFS 共享类型
1
2
  manila type-create cephfsnfstype false
  manila type-key cephfsnfstype set vendor_name=Ceph storage_protocol=NFS
  • 然后创建一个共享
1
  manila create --share-type cephfsnfstype --name cephnfsshare1 nfs 1
  • 查看共享的导出位置
1
  manila share-export-location-list cephnfsshare1

共享的导出位置包含 NFS-Ganesha 服务器的 IP 地址和要挂载的路径,形如 {NFS-Ganesha server address}:{path to be mounted}

访问许可
  • 允许访客使用 ip 访问类型访问共享
1
  manila access-allow cephnfsshare1 ip 172.24.4.225
  • 查看可访问列表
1
  manila access-list cephnfsshare1
挂载共享
  • 在 guest 虚拟机中,使用 NFS 客户端挂载共享
1
  sudo mount -t nfs 172.24.4.3:/volumes/_nogroup/6732900b-32c1-4816-a529-4d6d3f15811e /mnt/nfs/
卸载共享

可使用以下命令进行共享的卸载

1
sudo umount mountpoint

参考链接