openstack的使用——7. 共享文件系统manila服务

OpenStack Manila 共享文件系统实战:从部署到 NFS 挂载全指南

在云环境中,除了块存储(Cinder)和对象存储(Swift),共享文件系统(Shared File System)同样是关键基础设施。多个虚拟机需要同时读写同一份数据的场景(如 Web 集群、日志聚合、开发协作)中,传统块设备无法满足需求。

为此,OpenStack 提供了 Manila ------ 一个支持多协议、多后端的共享文件系统服务。它抽象了底层存储细节,通过统一 API 提供 NFS、CIFS/SMB、GlusterFS、CephFS 等协议的共享目录。

本文将手把手带你完成:

  • Manila 控制节点与计算节点的完整部署
  • 基于 LVM 的 NFS 后端配置
  • 创建共享目录并授权访问
  • 在控制节点挂载验证

实验环境说明

  • 控制节点:controller (192.168.200.150)
  • 计算节点:compute (192.168.200.151)
  • 存储设备:/dev/sda6(用于 LVM 卷组)
  • OpenStack 版本:Train 或以上
  • 安全假设:所有节点互通,防火墙已放行相关端口(如 2049/NFS)

一、Manila 核心概念

1. 什么是 Manila?

Manila 是 OpenStack 的共享文件系统即服务(FaaS)组件,具有以下特点:

  • 多协议支持:NFS v3/v4、CIFS/SMB、HDFS、GlusterFS、CephFS 等
  • 多后端驱动:可对接 NetApp、EMC、华为、LVM、Generic 等
  • 租户隔离:每个 Project 可独立管理自己的共享目录
  • 灵活授权:基于 IP、用户、AD 域等控制访问权限

💡 典型应用场景

  • 多台 Web 服务器共享静态资源
  • CI/CD 流水线中的构建缓存
  • 数据分析集群的输入/输出目录

2. 架构组件

组件 作用
manila-api 接收 REST 请求,处理认证与路由
manila-scheduler 调度共享请求到合适的后端
manila-share 实际创建/管理共享目录(运行在存储节点)
Driver 与具体存储系统交互(如 LVM + NFS)

📌 在本实验中:

  • manila-apimanila-scheduler 运行在 controller
  • manila-share 运行在 compute(兼作存储节点)

二、Manila 服务部署

1. 控制节点安装与配置

(1)创建数据库与用户
bash 复制代码
source /etc/keystone/admin-openrc.sh

# 创建数据库
mysql -uroot -p000000 -e "
CREATE DATABASE IF NOT EXISTS manila;
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'localhost' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'%' IDENTIFIED BY '000000';
"

# 创建服务用户
openstack user create --domain default --password 000000 manila
openstack role add --project service --user manila admin

# 注册服务与端点
openstack service create --name manila --description "OpenStack Shared File Systems" share
openstack service create --name manilav2 --description "OpenStack Shared File Systems V2" sharev2

openstack endpoint create --region RegionOne share public http://controller:8786/v1/%$tenant_id$s
openstack endpoint create --region RegionOne share internal http://controller:8786/v1/%$tenant_id$s
openstack endpoint create --region RegionOne share admin http://controller:8786/v1/%$tenant_id$s

openstack endpoint create --region RegionOne sharev2 public http://controller:8786/v2/%$tenant_id$s
openstack endpoint create --region RegionOne sharev2 internal http://controller:8786/v2/%$tenant_id$s
openstack endpoint create --region RegionOne sharev2 admin http://controller:8786/v2/%$tenant_id$s
(2)安装软件包
bash 复制代码
yum install -y openstack-manila python-manilaclient
(3)配置 /etc/manila/manila.conf
ini 复制代码
[database]
connection = mysql+pymysql://manila:000000@controller/manila

[DEFAULT]
transport_url = rabbit://openstack:000000@controller
state_path = /var/lib/manila
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
my_ip = 192.168.200.150
auth_strategy = keystone

[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 = 000000

[oslo_concurrency]
lock_path = /var/lib/manila/manila
(4)同步数据库并启动服务
bash 复制代码
su -s /bin/sh -c "manila-manage db sync" manila

systemctl enable openstack-manila-api.service openstack-manila-scheduler.service
systemctl restart openstack-manila-api.service openstack-manila-scheduler.service

2. 计算节点安装与配置(作为存储后端)

(1)安装依赖
bash 复制代码
yum install -y openstack-manila-share python2-PyMySQL libtalloc python-manilaclient MySQL-python
yum install -y lvm2 nfs-utils nfs4-acl-tools targetcli
(2)配置 Manila
ini 复制代码
[database]
connection = mysql+pymysql://manila:000000@controller/manila

[DEFAULT]
transport_url = rabbit://openstack:000000@controller
my_ip = 192.168.200.151
api_paste_config = /etc/manila/api-paste.ini
rootwrap_config = /etc/manila/rootwrap.conf
state_path = /var/lib/manila
auth_strategy = keystone
default_share_type = default_share_type
enabled_share_protocols = NFS,CIFS

[keystone_authtoken]
# ...(同控制节点,略)

[oslo_concurrency]
lock_path = /var/lib/manila/tmp
(3)初始化 LVM 存储
bash 复制代码
mkdir -p /var/lib/manila
chown manila: /var/lib/manila

# 使用 /dev/sda6 创建卷组
pvcreate /dev/sda6
vgcreate manila-volumes /dev/sda6
(4)配置 LVM 后端

manila.conf 末尾添加:

ini 复制代码
[DEFAULT]
enabled_share_backends = lvm

[lvm]
share_backend_name = LVM
share_driver = manila.share.drivers.lvm.LVMShareDriver
driver_handles_share_servers = False
lvm_share_volume_group = manila-volumes
lvm_share_export_ips = 192.168.200.151

🔑 关键参数解释

  • driver_handles_share_servers = False:表示不创建隔离的 Share Server(简化模式,适合测试)
  • lvm_share_export_ips:NFS 导出的 IP 地址(即 compute 节点 IP)
(5)启动服务
bash 复制代码
systemctl enable lvm2-lvmetad.target target.service nfs-server
systemctl restart lvm2-lvmetad.service target.service openstack-manila-share

三、使用 Manila 共享服务

1. 创建共享类型(Share Type)

bash 复制代码
source /etc/keystone/admin-openrc.sh

# 创建默认共享类型(不使用 share network)
manila type-create default_share_type False

输出:

复制代码
+----------------------+--------------------------------------+
| Property             | Value                                |
+----------------------+--------------------------------------+
| required_extra_specs | driver_handles_share_servers : False |
| Name                 | default_share_type                   |
| Visibility           | public                               |
| is_default           | YES                                  |
| ID                   | 0b12fc7b-3745-4683-ae5c-4ac8ab86c3be |
+----------------------+--------------------------------------+

查看类型列表:

bash 复制代码
manila type-list

2. 创建共享目录

bash 复制代码
# 创建 2GB 的 NFS 共享目录
manila create NFS 2 --name share-test

等待状态变为 available

bash 复制代码
manila list

输出示例:

复制代码
+--------------------------------------+------------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+
| ID                                   | Name       | Size | Share Proto | Status    | Is Public | Share Type Name    | Host                        | Availability Zone |
+--------------------------------------+------------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+
| 7abe166b-ea00-4a5e-b54d-0db4adda2cdc | share-test | 2    | NFS         | available | False     | default_share_type | compute@lvm#lvm-single-pool | nova              |
+--------------------------------------+------------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+

3. 授权访问

允许 192.168.200.0/24 网段读写访问:

bash 复制代码
manila access-allow share-test ip 192.168.200.0/24 --access-level rw

查看授权列表:

bash 复制代码
manila access-list share-test

输出:

复制代码
+--------------------------------------+-------------+------------------+--------------+--------+------------+----------------------------+------------+
| id                                   | access_type | access_to        | access_level | state  | access_key | created_at                 | updated_at |
+--------------------------------------+-------------+------------------+--------------+--------+------------+----------------------------+------------+
| 5dc2d4de-9085-43f0-859b-d68ce2ad8f36 | ip          | 192.168.200.0/24 | rw           | active | None       | 2023-04-10T13:29:11.000000 | None       |
+--------------------------------------+-------------+------------------+--------------+--------+------------+----------------------------+------------+

🗑️ 删除授权

bash 复制代码
manila access-deny share-test 

4. 挂载共享目录

(1)获取挂载路径
bash 复制代码
manila show share-test | grep path
# 输出:path = 192.168.200.151:/var/lib/manila/mnt/share-67952ac5-8a18-4710-a324-8c2ed8254c6e
(2)在控制节点挂载
bash 复制代码
mkdir -p /mnt/share-test
mount -t nfs 192.168.200.151:/var/lib/manila/mnt/share-67952ac5-8a18-4710-a324-8c2ed8254c6e /mnt/share-test
(3)验证挂载
bash 复制代码
df -Th | grep nfs

输出:

复制代码
192.168.200.151:/var/lib/manila/mnt/share-...  nfs4  2.0G  6.0M  1.8G   1% /mnt/share-test

✅ 此时可在 /mnt/share-test 中读写文件,多台虚拟机可同时挂载实现共享!


四、总结与对比

服务 类型 协议 多挂载 典型用途
Cinder 块存储 iSCSI, RBD ❌(通常单挂载) 数据库盘、系统盘
Swift 对象存储 HTTP/REST ✅(只读) 镜像、备份、静态资源
Manila 文件存储 NFS, CIFS ✅(读写) Web 共享、日志、协作

生产建议

  • 使用专用存储节点运行 manila-share
  • 为不同性能需求创建多个 Share Type(如 SSD-NFS、HDD-CIFS)
  • 结合安全组/NFS export 限制访问源
  • 监控 LVM 卷组剩余空间

Manila 填补了 OpenStack 在共享文件存储领域的空白,使云平台真正具备企业级存储能力。掌握它,你的私有云将更贴近真实业务需求!

欢迎在评论区分享你的 Manila 实践经验!

相关推荐
Omics Pro6 小时前
上海AI Lab+复旦大学:双轨协同实现自动化虚拟细胞建模
运维·人工智能·语言模型·自然语言处理·数据挖掘·数据分析·自动化
南境十里·墨染春水6 小时前
linux学习进展 进程的内存管理
linux·服务器·学习
Bert.Cai6 小时前
Linux cp命令详解
linux·运维
一个人旅程~6 小时前
macOS装进移动硬盘成为双系统的操作方法
linux·经验分享·macos·电脑
哇蛙蛙6 小时前
H3CNE--23.ACL
服务器·网络·经验分享·网络协议·tcp/ip·h3cne
一个人旅程~6 小时前
在M系列的macbook上如何使用VMware安装ARM版的Win11以及注意哪些问题?
linux·windows·经验分享·macos·电脑
Mapleay6 小时前
创建 Linux SDK包源码阅读环境
linux·运维·服务器
hong78176 小时前
阿里coding plan qwen3.6-plus 不支持图片上下文长度只有200K,问题出在哪?
linux·运维·数据库
rebekk6 小时前
claude工作区与git仓库的关系
linux·git·python