1
2
3
4
5
6
7
作者:李晓辉

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

在OpenStack云环境中,块存储和文件存储是两种主要的存储服务类型。继Cinder块存储服务之后,接下来我们将聚焦于Manila文件共享服务的部署与配置。Manila服务为OpenStack云平台提供了共享文件系统的能力,使得多个虚拟机实例能够同时访问和修改同一文件系统,从而实现高效的数据共享与协作。

本文将详细介绍如何在OpenStack环境中安装和配置Manila文件共享服务。我们将逐步介绍Manila服务的安装、配置以及启动过程,以确保其能够正常运行并为虚拟机实例提供文件共享功能。通过本文的指导,你将能够成功部署并运行Manila服务,满足不同业务场景下的文件共享需求。

Manila服务概述

Manila的作用

Manila是OpenStack中的共享文件系统服务组件,其主要功能包括:

  1. 共享文件系统管理:提供共享文件系统的创建、删除、挂载和配置管理功能,支持多种文件系统类型。

  2. 多租户支持:支持多租户环境中的文件系统资源隔离和配额管理,确保不同租户的文件系统资源独立。

  3. 与计算服务集成:与Nova服务紧密集成,为虚拟机实例提供文件共享功能,确保虚拟机能够正常访问共享文件系统。

  4. 文件系统类型管理:支持多种文件系统类型,如NFS、CIFS等,允许用户根据需求选择合适的文件系统类型。

  5. 备份与恢复:提供文件系统的备份和恢复功能,确保数据的安全性和可靠性。

Manila的架构

Manila服务由以下几个主要组件构成:

  1. manila-api:提供RESTful API接口,供用户和管理员管理共享文件系统资源。

  2. manila-scheduler:根据预定义的策略选择合适的存储节点来创建共享文件系统。

  3. manila-share:负责实际的共享文件系统创建、管理和与后端存储设备的交互。

  4. 数据库:Manila使用关系型数据库(如MariaDB)存储共享文件系统的配置信息。

工作原理

Manila的工作原理可以概括为以下几个步骤:

  1. API请求处理:用户通过Manila API发送请求,如创建共享文件系统、挂载共享文件系统等。manila-api组件接收这些请求,并将其转发给相应的服务组件。

  2. 资源分配与配置:根据用户的请求,manila-scheduler选择合适的存储节点,并将配置信息传递给manila-share

  3. 共享文件系统管理manila-share根据配置信息,与后端存储设备进行交互,完成共享文件系统的创建、挂载等操作。

  4. 备份与恢复:提供共享文件系统的备份和恢复功能,确保数据的安全性和可靠性。

通过以上机制,Manila服务确保了共享文件系统资源的高效管理和灵活配置,为OpenStack环境中的虚拟机实例提供强大的文件共享功能。

我把manila服务并置在controller这台机器上

准备manila数据库

在控制节点上,为Manila服务创建数据库和用户,并分配相应的权限。

1
mysql -u root -pLiXiaohui
1
2
3
4
CREATE DATABASE manila;
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'localhost' IDENTIFIED BY 'LiXiaohui';
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'%' IDENTIFIED BY 'LiXiaohui';
exit

创建manila服务用户

加载管理员环境变量文件,创建Manila服务用户并添加到service项目中,为其分配admin角色。

1
source adminrc.sh
1
2
3
4
5
6
7
8
9
10
11
12
[root@controller ~]# openstack user create --domain default --password LiXiaohui manila
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 4427fcb6f82d412cac8da44118c2d1b1 |
| name | manila |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@controller ~]# openstack role add --project service --user manila admin

创建manila服务以及endpoint

创建manila服务

注册Manila服务到Keystone服务目录中,分别为Manila v1和v2版本创建服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@controller ~]# openstack service create --name manila --description "OpenStack Shared File Systems" share
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Shared File Systems |
| enabled | True |
| id | 3fc0e0b3f5404a8b8fe2e22e31c1fb97 |
| name | manila |
| type | share |
+-------------+----------------------------------+
[root@controller ~]# openstack service create --name manilav2 --description "OpenStack Shared File Systems V2" sharev2
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Shared File Systems V2 |
| enabled | True |
| id | e41e8c69b86e4e74bba6b2c931f7d673 |
| name | manilav2 |
| type | sharev2 |
+-------------+----------------------------------+

创建manila endpoint

为Manila服务创建相应的API端点,确保其他服务能够通过Keystone发现和访问Manila服务。

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[root@controller ~]# openstack endpoint create --region RegionOne share public http://controller:8786/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field | Value |
+--------------+-----------------------------------------+
| enabled | True |
| id | 22a3ac8a89874f94a8c9a53a120ac165 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 3fc0e0b3f5404a8b8fe2e22e31c1fb97 |
| service_name | manila |
| service_type | share |
| url | http://controller:8786/v1/%(tenant_id)s |
+--------------+-----------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne share internal http://controller:8786/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field | Value |
+--------------+-----------------------------------------+
| enabled | True |
| id | 385626d50d324d39873a503e6a81423c |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 3fc0e0b3f5404a8b8fe2e22e31c1fb97 |
| service_name | manila |
| service_type | share |
| url | http://controller:8786/v1/%(tenant_id)s |
+--------------+-----------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne share admin http://controller:8786/v1/%\(tenant_id\)s
+--------------+-----------------------------------------+
| Field | Value |
+--------------+-----------------------------------------+
| enabled | True |
| id | 28568224c35e4c5b8d533888decfbe5f |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 3fc0e0b3f5404a8b8fe2e22e31c1fb97 |
| service_name | manila |
| service_type | share |
| url | http://controller:8786/v1/%(tenant_id)s |
+--------------+-----------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne sharev2 public http://controller:8786/v2
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 7fdf805093a24aa09a4eee27681b38c2 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e41e8c69b86e4e74bba6b2c931f7d673 |
| service_name | manilav2 |
| service_type | sharev2 |
| url | http://controller:8786/v2 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne sharev2 internal http://controller:8786/v2
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 47b4ce4125294061a945e595c22770c4 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e41e8c69b86e4e74bba6b2c931f7d673 |
| service_name | manilav2 |
| service_type | sharev2 |
| url | http://controller:8786/v2 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne sharev2 admin http://controller:8786/v2
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | a88c310beef743fda7d8f93cd7f44b27 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e41e8c69b86e4e74bba6b2c931f7d673 |
| service_name | manilav2 |
| service_type | sharev2 |
| url | http://controller:8786/v2 |
+--------------+----------------------------------+

安装配置minila组件

安装manila软件

在控制节点上安装Manila服务和客户端软件。

1
yum install openstack-manila python3-manilaclient -y

准备配置文件

编辑Manila配置文件/etc/manila/manila.conf,设置消息队列、身份认证、数据库连接以及Manila服务的相关参数。

/etc/manila/manila.conf 是manila配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
crudini --set /etc/manila/manila.conf DEFAULT my_ip 192.168.8.10
crudini --set /etc/manila/manila.conf DEFAULT auth_strategy keystone
crudini --set /etc/manila/manila.conf DEFAULT default_share_type default_share_type
crudini --set /etc/manila/manila.conf DEFAULT share_name_template share-%s
crudini --set /etc/manila/manila.conf DEFAULT rootwrap_config /etc/manila/rootwrap.conf
crudini --set /etc/manila/manila.conf DEFAULT api_paste_config /etc/manila/api-paste.ini
crudini --set /etc/manila/manila.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller
crudini --set /etc/manila/manila.conf database connection mysql+pymysql://manila:LiXiaohui@controller/manila
crudini --set /etc/manila/manila.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/manila/manila.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/manila/manila.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/manila/manila.conf keystone_authtoken auth_type password
crudini --set /etc/manila/manila.conf keystone_authtoken project_domain_name Default
crudini --set /etc/manila/manila.conf keystone_authtoken user_domain_name Default
crudini --set /etc/manila/manila.conf keystone_authtoken project_name service
crudini --set /etc/manila/manila.conf keystone_authtoken username manila
crudini --set /etc/manila/manila.conf keystone_authtoken password LiXiaohui
crudini --set /etc/manila/manila.conf oslo_concurrency lock_path /var/lib/manila/tmp

或者

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
[DEFAULT]
my_ip = 192.168.8.10
auth_strategy = keystone
default_share_type = default_share_type
share_name_template = share-%s
rootwrap_config = /etc/manila/rootwrap.conf
api_paste_config = /etc/manila/api-paste.ini
transport_url = rabbit://openstack:LiXiaohui@controller

[database]
connection = mysql+pymysql://manila:LiXiaohui@controller/manila

[keystone_authtoken]
...
memcached_servers = controller:11211
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = manila
password = LiXiaohui

[oslo_concurrency]
lock_path = /var/lib/manila/tmp

填充manila数据库

运行manila-manage db sync命令,初始化或更新Manila服务使用的数据库。

1
su -s /bin/sh -c "manila-manage db sync" manila

启动manila服务

1
systemctl enable openstack-manila-api.service openstack-manila-scheduler.service --now
  • openstack-manila-api 该服务提供RESTful API接口,供用户和管理员管理共享文件系统资源。
  • openstack-manila-scheduler 该服务根据预定义的策略选择合适的存储节点来创建共享文件系统。