马尼拉 - 共享文件系统服务

概述

目前,Kolla 可以部署以下 Manila 服务

  • manila-api

  • manila-data

  • manila-scheduler

  • manila-share

OpenStack 共享文件系统服务 (Manila) 为虚拟机提供文件存储。共享文件系统服务提供了一种用于管理和配置文件共享的基础架构。如果驱动程序支持,该服务还允许管理共享类型以及共享快照。

重要

为了简单起见,本指南描述了将共享文件系统服务配置为使用 generic 后端,并启用驱动程序处理共享服务器模式 (DHSS),该模式使用计算 (nova)、网络 (neutron) 和块存储 (cinder) 服务。网络服务配置需要网络能够连接到公共路由器,以便创建共享网络。

在继续操作之前,请确保计算、网络和块存储服务正常工作。

准备和部署

Cinder 是必需的,请在 /etc/kolla/globals.yml 中启用它

enable_cinder: "yes"

/etc/kolla/globals.yml 中启用 Manila 和 generic 后端

enable_manila: "yes"
enable_manila_backend_generic: "yes"

默认情况下,Manila 使用实例 flavor id 100 用于其文件系统。为了使 Manila 正常工作,您可以创建一个新的 nova flavor,id 为 100(使用 *nova flavor-create*),或者更改 *service_instance_flavor_id* 以使用其中一个默认 nova flavor id。例如:*service_instance_flavor_id = 2* 以使用 nova 默认 flavor m1.small

创建或修改文件 /etc/kolla/config/manila-share.conf 并添加内容

[generic]
service_instance_flavor_id = 2

验证操作

验证共享文件系统服务的运行情况。列出服务组件以验证每个进程是否成功启动

# manila service-list

+------------------+----------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |    Host        | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+----------------+------+---------+-------+----------------------------+-----------------+
| manila-scheduler | controller     | nova | enabled |   up  | 2014-10-18T01:30:54.000000 |       None      |
| manila-share     | share1@generic | nova | enabled |   up  | 2014-10-18T01:30:57.000000 |       None      |
+------------------+----------------+------+---------+-------+----------------------------+-----------------+

启动实例

在能够创建共享之前,使用 generic 驱动程序和启用 DHSS 模式的 Manila 需要定义至少一个镜像、一个网络和一个共享网络,用于创建共享服务器。对于后端配置,共享服务器是一个提供 NFS/CIFS 共享的实例。

确定共享服务器的配置

在运行 manila-share 服务之前创建默认共享类型

# manila type-create default_share_type True

+--------------------------------------+--------------------+------------+------------+-------------------------------------+-------------------------+
| ID                                   | Name               | Visibility | is_default | required_extra_specs                | optional_extra_specs    |
+--------------------------------------+--------------------+------------+------------+-------------------------------------+-------------------------+
| 8a35da28-0f74-490d-afff-23664ecd4f01 | default_share_type | public     | -          | driver_handles_share_servers : True | snapshot_support : True |
+--------------------------------------+--------------------+------------+------------+-------------------------------------+-------------------------+

将 Manila 共享服务器镜像创建到镜像服务

# wget https://tarballs.opendev.org/openstack/manila-image-elements/images/manila-service-image-master.qcow2
# glance image-create --name "manila-service-image" \
  --file manila-service-image-master.qcow2 \
  --disk-format qcow2 --container-format bare \
  --visibility public --progress

[=============================>] 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 和子网

+--------------------------------------+---------+----------------------------------------------------+
| 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 |
+--------------------------------------+---------+----------------------------------------------------+

创建一个共享网络

# 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                                 |
| nova_net_id       | None                                 |
| cidr              | None                                 |
| project_id        | e2c965830ecc4162a002bf16ddc91ab7     |
| id                | 58b2f0e6-5509-4830-af9c-97f525a31b14 |
| description       | None                                 |
+-------------------+--------------------------------------+

创建一个 flavor(必需,如果您未在 /etc/kolla/config/manila-share.conf 文件中定义 *manila_instance_flavor_id*)

# nova flavor-create manila-service-flavor 100 128 0 1

创建共享

使用共享网络创建一个 NFS 共享

# manila create NFS 1 --name demo-share1 --share-network demo-share-network1

+-----------------------------+--------------------------------------+
| Property                    | Value                                |
+-----------------------------+--------------------------------------+
| status                      | None                                 |
| share_type_name             | None                                 |
| description                 | None                                 |
| availability_zone           | None                                 |
| share_network_id            | None                                 |
| export_locations            | []                                   |
| 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                  | None                                 |
| created_at                  | 2016-01-26T20:08:50.502877           |
| export_location             | None                                 |
| share_proto                 | NFS                                  |
| consistency_group_id        | None                                 |
| source_cgsnapshot_member_id | None                                 |
| project_id                  | 48e8c35b2ac6495d86d4be61658975e7     |
| metadata                    | {}                                   |
+-----------------------------+--------------------------------------+

一段时间后,共享状态应从 creating 更改为 available

# manila list

+--------------------------------------+-------------+------+-------------+-----------+-----------+--------------------------------------+-----------------------------+-------------------+
| ID                                   | Name        | Size | Share Proto | Status    | Is Public | Share Type Name                      | Host                        | Availability Zone |
+--------------------------------------+-------------+------+-------------+-----------+-----------+--------------------------------------+-----------------------------+-------------------+
| e1e06b14-ba17-48d4-9e0b-ca4d59823166 | demo-share1 | 1    | NFS         | available | False     | default_share_type                   | share1@generic#GENERIC      | nova              |
+--------------------------------------+-------------+------+-------------+-----------+-----------+--------------------------------------+-----------------------------+-------------------+

在尝试通过网络挂载它之前,配置用户对新共享的访问权限

# manila access-allow demo-share1 ip INSTANCE_PRIVATE_NETWORK_IP

从实例挂载共享

从共享获取导出位置

# manila show demo-share1

+-----------------------------+----------------------------------------------------------------------+
| Property                    | Value                                                                |
+-----------------------------+----------------------------------------------------------------------+
| status                      | available                                                            |
| share_type_name             | default_share_type                                                   |
| description                 | None                                                                 |
| availability_zone           | nova                                                                 |
| share_network_id            | fa07a8c3-598d-47b5-8ae2-120248ec837f                                 |
| export_locations            |                                                                      |
|                             | path = 10.254.0.3:/shares/share-422dc546-8f37-472b-ac3c-d23fe410d1b6 |
|                             | preferred = False                                                    |
|                             | is_admin_only = False                                                |
|                             | id = 5894734d-8d9a-49e4-b53e-7154c9ce0882                            |
|                             | share_instance_id = 422dc546-8f37-472b-ac3c-d23fe410d1b6             |
| share_server_id             | 4782feef-61c8-4ffb-8d95-69fbcc380a52                                 |
| host                        | share1@generic#GENERIC                                               |
| access_rules_status         | active                                                               |
| snapshot_id                 | None                                                                 |
| is_public                   | False                                                                |
| task_state                  | None                                                                 |
| snapshot_support            | True                                                                 |
| id                          | e1e06b14-ba17-48d4-9e0b-ca4d59823166                                 |
| size                        | 1                                                                    |
| name                        | demo-share1                                                          |
| share_type                  | 6e1e803f-1c37-4660-a65a-c1f2b54b6e17                                 |
| has_replicas                | False                                                                |
| replication_type            | None                                                                 |
| created_at                  | 2016-03-15T18:59:12.000000                                           |
| share_proto                 | NFS                                                                  |
| consistency_group_id        | None                                                                 |
| source_cgsnapshot_member_id | None                                                                 |
| project_id                  | 9dc02df0f2494286ba0252b3c81c01d0                                     |
| metadata                    | {}                                                                   |
+-----------------------------+----------------------------------------------------------------------+

创建一个文件夹,挂载将放置在此处

# mkdir ~/test_folder

使用共享的导出位置在实例中挂载 NFS 共享

# mount -v 10.254.0.3:/shares/share-422dc546-8f37-472b-ac3c-d23fe410d1b6 ~/test_folder

共享迁移

作为管理员,您可以以对用户和工作负载透明的方式将共享及其数据从一个位置迁移到另一个位置。您可以使用 manila 客户端命令来完成共享迁移。

对于共享迁移,需要修改 manila.conf 并为相同提供商网络中的 data_node_access_ip 设置一个 ip。

修改文件 /etc/kolla/config/manila.conf 并添加内容

[DEFAULT]
data_node_access_ip = 10.10.10.199

注意

共享迁移需要配置多个后端。有关详细信息,请参阅 配置多个后端

使用 manila 迁移命令,如下例所示

# manila migration-start --preserve-metadata True|False \
  --writable True|False --force_host_assisted_migration True|False \
  --new_share_type share_type --new_share_network share_network \
  shareID destinationHost
  • --force-host-copy:强制使用基于通用主机的迁移机制,并绕过任何驱动程序优化。

  • destinationHost:格式为 host#pool,包括目标主机和池。

  • --writable--preserve-metadata:仅用于驱动程序辅助。

  • --new_share_network:仅当驱动程序支持共享网络时。

  • --new_share_type:选择与 destinationHost 兼容的共享类型。

检查共享迁移进度

使用 manila migration-get-progress shareID 命令检查进度。

# manila migration-get-progress demo-share1

+----------------+-----------------------+
| Property       | Value                 |
+----------------+-----------------------+
| task_state     | data_copying_starting |
| total_progress | 0                     |
+----------------+-----------------------+

# manila migration-get-progress demo-share1
+----------------+-------------------------+
| Property       | Value                   |
+----------------+-------------------------+
| task_state     | data_copying_completing |
| total_progress | 100                     |
+----------------+-------------------------+

使用 manila migration-complete shareID 命令完成共享迁移过程。

有关如何管理共享的更多信息,请参阅 管理共享

GlusterFS

我们支持启用 Manila 以向用户提供对外部 GlusterFS 卷的访问权限。有关 GlusterfsShareDriver 的更多详细信息,请参阅:https://docs.openstack.org/manila/2025.2/admin/glusterfs_driver.html

Kolla-ansible 支持使用 NFS 的 GlusterFS 共享。要启用此后端,请将以下内容添加到 /etc/kolla/globals.yml

enable_manila_backend_glusterfs_nfs: "yes"

布局

布局是一种从 GlusterFS 后端为共享分配存储的策略。目前已实现两种布局

卷映射布局

您还需要添加以下配置选项,以确保驱动程序可以连接到 GlusterFS 并暴露系统中正确的现有卷子集,方法是在 /etc/kolla/globals.yml 中添加以下内容

manila_glusterfs_servers:
  - glusterfs1.example.com
  - glusterfs2.example.com
manila_glusterfs_ssh_user: "root"
manila_glusterfs_ssh_password: "<glusterfs ssh password>"
manila_glusterfs_volume_pattern: "manila-share-volume-\\d+$"

当 GlusterFS 服务器不在运行 Manila 共享服务的系统上时,才需要 manila_glusterfs_ssh_passwordmanila_glusterfs_ssh_user 配置选项。

目录映射布局

您还需要添加以下配置选项,以确保驱动程序可以连接到 GlusterFS 并暴露系统中正确的现有卷子集,方法是在 /etc/kolla/globals.yml 中添加以下内容

manila_glusterfs_share_layout: "layout_directory.GlusterfsDirectoryMappedLayout"
manila_glusterfs_target: "root@10.0.0.1:/volume"
manila_glusterfs_ssh_password: "<glusterfs ssh password>"
manila_glusterfs_mount_point_base: "$state_path/mnt"
  • manila_glusterfs_target:如果格式为 <username>@<glustervolserver>:/<glustervolid>,则我们将 ssh 到 <username>@<glustervolserver> 以执行 gluster(<username> 应该在 <glustervolserver> 上具有管理权限)。

  • manila_glusterfs_ssh_password:配置选项仅在 GlusterFS 服务器不在运行 Manila 共享服务的系统上时才需要。