Chapter 4 分布式(网络)存储系统
4.1 GlusterFS介绍
这里不对GlusterFS的工作原理进行详述,如果有兴趣可以到官方网站去了解更多原理和部署。
对于本次测试环境来说,底层分布式存储系统主要为有存储要求的OpenStack服务提供服务,包括镜像服务、计算服务的共享存储(用于实现动态迁移)、块存储以及对象存储(先不涉及)。
使用者已经对NFS、MFS、GlusterFS进行了部署实现,但是讨论到性能、环境因素,最终选用了GlusterFS作为存储系统,考虑的方式有:
性能比较:NFS是传统的网络文件系统,存在的缺点也是显而易见的,例如单点故障、元数据与数据传输未分离所造成的性能瓶颈,在较新版本中pNFS(即NFSv4.1)已经实现分离,允许客户端直接与数据服务器进行交互。这种机制解决了传统NFS的性能瓶颈问题,从而使得系统获得高性能和高扩展性的特性;MFS提供了强大的针对小文件读写功能,并将元数据服务器进行单独部署而不影响文件数据的传输,同样MFS也面临的单点故障的问题;GlusterFS不存在单点故障。靠运行在各个节点上的动态算法来代替MDS,不需同步元数据,无硬盘I/O瓶颈,但只适用于大文件,对于小文件传输无优势
操作比较:NFS部署很简单,但是需注意发布共享路径时的权限问题,另外,最重要的是单点故障的隐患,所以不考虑使用NFS;MFS架构非常健全,同样单点故障的问题可以通过部署Master/Slave模式进行解决,但由于整体架构所需节点较多这里也不进行考虑;GlusterFS在于无S/C概念,多个节点通过配置也实现复制功能从而解决了点单问题,扩展性也极佳
其实使用哪种分布式存储系统来作为底层共享存储都因考虑实际环境需要,在考虑到资源问题和无二次开发需求的前提下,使用GlusterFS最为简单。
红帽官网给出的架构拓扑图:
注意,计算节点也是使用到共享存储,上图并为给出。
4.2 GlusterFS安装部署
根据之前的服务器拓扑,两个计算机点也同时提供发布共享存储的功能,这里在每个节点上挂载一块600G硬盘,将为镜像服务、计算服务以及块存储服务提供共享存储。
4.2.1 格式化挂载存储
下面的步骤需要在两台计算节点进行操作,以compute1(10.0.0.31)为例:
[root@compute1 ~]# fdisk /dev/sdb
# 创建主分区sdb1,并将文件系统标识符设置为8e,即LVM,以便以后的扩展需要,这里具体的操作不进行描述
[root@compute1 ~]# pvcreate /dev/sdb1
[root@compute1 ~]# vgcreate vg_sharing_disk /dev/sdb1
[root@compute1 ~]# lvcreate -l 100%FREE -n lv_sharing_disk vg_sharing_disk
[root@compute1 ~]# mkfs.xfs /dev/vg_sharing_disk/lv_sharing_disk
[root@compute1 ~]# mkdir /rhs
[root@compute1 ~]# vi /etc/fstab
/dev/vg_sharing_disk/lv_sharing_disk /rhs xfs defaults 1 1
[root@compute1 ~]# mount /rhs
4.2.2配置启动GlusterFS共享存储
1. 安装GlusterFS服务并设置为开机自启动:
下面的步骤需要在两台计算节点进行操作:
[root@compute1 ~]# yum -y install glusterfs-server
[root@compute1 ~]# systemctl start glusterd
[root@compute1 ~]# systemctl enable glusterd
2. 设置信任关系并发布共享存储服务:
在一台计算节点上操作即可:
[root@compute1 ~]# gluster peer probe compute2
peer probe: success.
[root@compute1 ~]# gluster peer status
Number of Peers: 1
Hostname: compute2
Uuid: a882ef3c-cbdf-45ed-897c-1fbb942d0b5e
State: Peer in Cluster (Connected)
注意,这里一定要确保两个节点可进主机名称解析,在之前的测试中单独部署存储服务器时由于没将主机名加入到解析范围中而导致其他节点挂载GlusterFS文件系统时出现报错。
为OpenStack中需要使用到共享存储服务创建相应的目录以及指定用户和组:
[root@compute1 ~]# mkdir /rhs/glance-vol /rhs/nova-vol /rhs/cinder-vol
[root@compute1 ~]# gluster volume create glance-volume replica 2 compute1:/rhs/glance-vol/ compute2:/rhs/glance-vol/
[root@compute1 ~]# gluster volume create nova-volume replica 2 compute1:/rhs/nova-vol/ compute2:/rhs/nova-vol/
[root@compute1 ~]# gluster volume create cinder-volume replica 2 compute1:/rhs/cinder-vol/ compute2:/rhs/cinder-vol/
[root@compute1 ~]# gluster volume set glance-volume storage.owner-uid 161
[root@compute1 ~]# gluster volume set glance-volume storage.owner-gid 161
[root@compute1 ~]# gluster volume set nova-volume storage.owner-uid 162
[root@compute1 ~]# gluster volume set nova-volume storage.owner-gid 162
[root@compute1 ~]# gluster volume set cinder-volume storage.owner-uid 165
[root@compute1 ~]# gluster volume set cinder-volume storage.owner-gid 165
[root@compute1 ~]# gluster volume start glance-volume
[root@compute1 ~]# gluster volume start nova-volume
[root@compute1 ~]# gluster volume start cinder-volume
注意,卷的用户名和组请参考OpenStack服务的默认设置:
http://docs.openstack.org/kilo/install-guide/install/yum/content/reserved_user_ids.html
至此,共享存储服务已经配置完成,后面的章节涉及到共享存储的部分将按照实际需要会进行强调。