题记
在OpenStack中经常会碰到使用共享存储的需求,我们经常使用的启动NFS服务进行共享,这种方式比较直观和配置简单,但是在实际生产环节中,性能可能不会令人满意,在云环境下如果有类似的需求,我们仍然采用这种方式,但是在最新的Mitaka版本中,该功能已经成为了一个组件正式发布出来了。
--------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/chinagissoft
QQ群:16403743
宗旨:专注于"GIS+"前沿技术的研究与交流,将云计算技术、大数据技术、容器技术、物联网与GIS进行深度融合,探讨"GIS+"技术和行业解决方案
转载说明:文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
--------------------------------------------------------------------------------------
对于OpenStack的共享存储组件,我们称之为Manila(马尼拉),其实这个项目在Juno版本已经提上了日程,经过J、K、L版本的不断发酵,在M版本终于瓜熟蒂落,我也是比较着急,赶紧安装了新版本,看看这组件能不能带给我们不一样的体验。
从Manila项目的介绍可以看出,其实就是实现一个共享服务,也就是说我可以创建共享目录,任意虚拟机可以对该目录进行读写操作,当然,我仅仅只是了解了最简单的功能,更加复杂的功能还需要时间去学习。
从OpenStack的官方文档,相关角色包括控制节点、计算节点、存储节点,共享节点与存储节点放在一起,不过我为了节省资源,我将计算、存储、共享都放在一个节点上,而且我们知道存储节点的块存储cinder默认使用lvm,所以添加了一块新硬盘sdb,共享存储包含两种模式,简单模式也是使用lvm,所以又添加了一块硬盘sdc。
安装步骤大家可以参考官方文档,熟悉了OpenStack的安装风格之后,也不难进行。
在前面也介绍了,M版本的网络分为两种模式,provider网络和self-service网络,那么共享服务针对这两种网络模式也分别对应两种模式:
Option1并不需要安装任何驱动,默认使用lvm和nfs服务方式,支持NFS和CIFS协议,通过在共享服务器创建共享卷,利用NFS为虚拟机提供共享服务。
1、在共享服务器创建共享目录
root@controller:~# manila create NFS 1 --name share1 +-----------------------------+--------------------------------------+ | Property | Value | +-----------------------------+--------------------------------------+ | status | creating | | share_type_name | default_share_type | | description | None | | availability_zone | None | | share_network_id | None | | host | | | access_rules_status | active | | snapshot_id | None | | is_public | False | | task_state | None | | snapshot_support | True | | id | 82cd50d1-0e6b-4888-ac79-b4d056a88154 | | size | 1 | | name | share1 | | share_type | fcc5e23a-4d94-4a51-8399-39576fca5416 | | has_replicas | False | | replication_type | None | | created_at | 2016-04-28T03:24:57.000000 | | share_proto | NFS | | consistency_group_id | None | | source_cgsnapshot_member_id | None | | project_id | 89cf202812654827ae74692bb94f5b60 | | metadata | {} | +-----------------------------+--------------------------------------+
2、查看创建的共享列表(状态为available可用)
root@controller:~# manila list +--------------------------------------+--------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+ | ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone | +--------------------------------------+--------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+ | 82cd50d1-0e6b-4888-ac79-b4d056a88154 | share1 | 1 | NFS | available | False | default_share_type | compute@lvm#lvm-single-pool | nova | +--------------------------------------+--------+------+-------------+-----------+-----------+--------------------+-----------------------------+-------------------+
3、查看具体的共享目录信息,其实就是在共享服务器的一个volume
root@controller:~# manila show share1 +-----------------------------+---------------------------------------------------------------------------------+ | Property | Value | +-----------------------------+---------------------------------------------------------------------------------+ | status | available | | share_type_name | default_share_type | | description | None | | availability_zone | nova | | share_network_id | None | | export_locations | | | | path = 10.0.0.31:/var/lib/manila/mnt/share-e88556b4-95bd-42e3-8e13-3f4b5ad7a246 | | | id = 1cf9b1f3-c30e-40d6-874c-f82eab20c9f0 | | | preferred = False | | host | compute@lvm#lvm-single-pool | | access_rules_status | active | | snapshot_id | None | | is_public | False | | task_state | None | | snapshot_support | True | | id | 82cd50d1-0e6b-4888-ac79-b4d056a88154 | | size | 1 | | name | share1 | | share_type | fcc5e23a-4d94-4a51-8399-39576fca5416 | | has_replicas | False | | replication_type | None | | created_at | 2016-04-28T03:24:57.000000 | | share_proto | NFS | | consistency_group_id | None | | source_cgsnapshot_member_id | None | | project_id | 89cf202812654827ae74692bb94f5b60 | | metadata | {} | +-----------------------------+---------------------------------------------------------------------------------+
4、为该共享目录设置可访问的虚拟机IP
注意:需要保证虚拟机Ip与共享节点的IP网络连通
root@controller:~# manila access-allow share1 ip 10.0.0.51 +--------------+--------------------------------------+ | Property | Value | +--------------+--------------------------------------+ | share_id | 82cd50d1-0e6b-4888-ac79-b4d056a88154 | | access_type | ip | | access_to | 10.0.0.51 | | access_level | rw | | state | new | | id | 23ade55d-0679-4442-a2c1-99687e082c53 | +--------------+--------------------------------------+
测试
在10.0.0.51机器上创建一个mount目录,通过mount命令进行挂载
# mount -t nfs 10.0.0.31:/var/lib/manila/mnt/share-e88556b4-95bd-42e3-8e13-3f4b5ad7a246 ~/test_folder
Option2是需要借助于OpenStack的neutron、nova、cinder组件进行,所以事先需要安装这些组件,提供一个Generic共享驱动,需要通过manila-service-image镜像创建的虚拟机提供支持,进一步说,相比较option1的无需任何设置,option2需要创建内置的共享网络,(网络必须支持self-service模式)
注意:由于我只选择了一种网络,所以该方式我并没有实际操作。
1、创建共享网络
$ manila share-network-create --name selfservice-net-share1 \ --neutron-net-id 4e963f5b-b5f3-4db1-a935-0d34c8629e7b \ --neutron-subnet-id 005bf8d1-798e-450f-9efe-72bc0c3be491 +-------------------+--------------------------------------+ | Property | Value | +-------------------+--------------------------------------+ | name | selfservice-net-share1 | | segmentation_id | None | | created_at | 2016-03-31T13:25:39.052439 | | neutron_subnet_id | 005bf8d1-798e-450f-9efe-72bc0c3be491 | | updated_at | None | | network_type | None | | neutron_net_id | 4e963f5b-b5f3-4db1-a935-0d34c8629e7b | | ip_version | None | | nova_net_id | None | | cidr | None | | project_id | 3a46a53a377642a284e1d12efabb3b5a | | id | 997a1a0a-4f4d-4aa3-b7ae-8ae6d9aaa828 | | description | None | +-------------------+--------------------------------------+
2、创建基于共享网络的共享目录
$ manila create NFS 1 --name share2 \ --share-network selfservice-net-share1 \ --share-type generic_share_type +-----------------------------+--------------------------------------+ | Property | Value | +-----------------------------+--------------------------------------+ | status | creating | | share_type_name | generic_share_type | | description | None | | availability_zone | None | | share_network_id | 997a1a0a-4f4d-4aa3-b7ae-8ae6d9aaa828 | | host | | | access_rules_status | active | | snapshot_id | None | | is_public | False | | task_state | None | | snapshot_support | True | | id | 6a711b95-9e03-4547-8769-74e34676cb3e | | size | 1 | | name | share2 | | share_type | 8698ed92-2a1c-4c9f-aab4-a35dccd88c8f | | has_replicas | False | | replication_type | None | | created_at | 2016-03-31T13:45:18.000000 | | share_proto | NFS | | consistency_group_id | None | | source_cgsnapshot_member_id | None | | project_id | 3a46a53a377642a284e1d12efabb3b5a | | metadata | {} | +-----------------------------+--------------------------------------+
其他方法比较类似。
问题
查看了OpenStack的官方帮助,感觉作为一个新组件还是有许多问题,我不是说bug,只是说这个帮助也让人看不太懂。
1、安装完manila组件之后,我并没有在horizon组件看到可视化操作入口
2、manila组件需要专门下载一个manila镜像,然后创建实例,但是帮助上并没有在说明在实际配置过程中该实例充当的角色,全部配置还是在控制节点和共享节点完成。
3、最简单的共享模式例子写的并不好,因为默认的管理IP段是10.0.0.1/24,而例子给的虚拟机的网络段是203.0.113.1/24,那么option1共享还要求虚拟机网络与共享服务器的IP联通,这个需要用户重新配置provider的subnet才行。
当然了,我也是第一次使用这个组件,可能会由自己的认识不足导致上述内容的不严谨和问题,也请各位多指点。
参考文献:
https://wiki.openstack.org/wiki/Manila#Design_.26_Use_Cases
https://www.ustack.com/blog/openstack-storage/
http://www.chinacloud.cn/show.aspx?id=21998&cid=14
http://www.snia.org/sites/default/files/RobertCallaway_OpenStack_Manilla.pdf
http://mytrix.me/2015/01/network-part-of-manila/