OpenStack的Cinder后端存储技术——GlusterFS
2017-12-02 16:00
417 查看
原理
提起分布式存储,简单的说,就是我可以建立一个多节点的分布式存储集群,对用户来说我可能只存储到某一个路径下,但是系统会自动往其他节点进行复制,也就是其实你的数据复制了N份(按照你的节点来说),这样即使有一个节点出现问题,也不影响其他节点的数据,这样就达到了存储高可用性的目的,当然这种方式最大的优点就是不需要花费额外费用,使用廉价的硬件资源就可以满足需求。GlusterFS采用模块化、堆栈式的架构,可通过灵活的配置支持高度定制化的应用环境,比如大文件存储、海量小文件存储、云存储、多传输协议应用等。每个功能以模块形式实现,然后以积木方式进行简单的组合,即可实现复杂的功能。比如,Replicate模块可实现RAID1,Stripe模块可实现RAID0,通过两者的组合可实现RAID10和RAID01,同时获得高性能和高可靠性。如下图所示:
特点
扩展性和高性能 GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。Gluster弹性哈希(Elastic Hash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。
高可用性
GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。
全局统一命名空间
全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源可以根据需要在虚拟存储池中进行弹性扩展,比如扩容或收缩。当存储虚拟机映像时,存储的虚拟映像文件没有数量限制,成千虚拟机均通过单一挂载点进行数据共享。虚拟机I/O可在命名空间内的所有服务器上自动进行负载均衡,消除了SAN环境中经常发生的访问热点和性能瓶颈问题。
弹性哈希算法
GlusterFS采用弹性哈希算法在存储池中定位数据,而不是采用集中式或分布式元数据服务器索引。在其他的Scale-Out存储系统中,元数据服务器通常会导致I/O性能瓶颈和单点故障问题。GlusterFS中,所有在Scale-Out存储配置中的存储系统都可以智能地定位任意数据分片,不需要查看索引或者向其他服务器查询。这种设计机制完全并行化了数据访问,实现了真正的线性性能扩展。
弹性卷管理
数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。逻辑卷可以在所有配置服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可以适应工作负载条件变化或在线性能调优。
基于标准协议
Gluster存储服务支持NFS, CIFS, HTTP, FTP以及Gluster原生协议,完全与POSIX标准兼容。现有应用程序不需要作任何修改或使用专用API,就可以对Gluster中的数据进行访问。这在公有云环境中部署Gluster时非常有用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。
--------------------------------------------------------------------------------------------------------------------------------
集群部署
1、分别在fs1和fs2安装glusterfs-server软件root@fs1:~# apt-get install glusterfs-server1
2、分别在fs1和fs2机器的/etc/hosts里面添加IP和机器名的映射关系
root@fs1:~# cat /etc/hosts 127.0.0.1 localhost 192.168.3.10 fs1 192.168.3.11 fs21
2
3
4
3、启动GlusterFS服务(Ubuntu安装之后会自动启动)
root@fs1:~# service glusterfs-server restart glusterfs-server stop/waiting glusterfs-server start/running, process 17081
2
3
4、分别在fs1和fs2创建分布式存储
root@fs1:~# mkdir -p /data/fs11
5、添加集群节点
由于GlusterFS是一种无中心的模式,任何节点都是对等的,支持横向扩展,我们可以从任意一台节点操作,添加其他节点集群。例如我在fs2操作,添加fs1为glusterfs集群。建议使用机器名。
root@fs2:~# gluster peer probe fs11
6、查看集群状态
root@fs2:~# gluster peer status Number of Peers: 1 Hostname: 192.168.3.10 Uuid: 9bc2b23c-4e7f-4da9-9a24-c570f753066c State: Peer in Cluster (connected)1
2
3
4
5
6
7、创建分布式卷
五种类型的volume可以被创建:
Distributed:分布式卷,文件通过hash算法随机的分布到由bricks组成的卷上。
Replicated:复制式卷,类似raid1,replica数必须等于volume中brick所包含的存储服务器数,可用性高。
Striped:条带式卷,类似与raid0,stripe数必须等于volume中brick所包含的存储服务器数,文件被分成数据块,以Round
Robin的方式存储在bricks中,并发粒度是数据块,大文件性能好。
Distributed Striped:分布式的条带卷,volume中brick所包含的存储服务器数必须是stripe的倍数(>=2倍),兼顾分布式和条带式的功能。
Distributed Replicated:分布式的复制卷,volume中brick所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。
创建命令参考
gluster volume create demo replica 2 fs1:/data/fs1 f2:/data/fs21
查看卷信息
root@fs2:~# gluster volume info demo Volume Name: demo Type: Replicate Volume ID: 68c6b6b1-80cc-4c60-af45-68279e4ad2f5 Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: 192.168.3.10:/data/fs1 Brick2: 192.168.3.11:/data/fs2
---------------------------------------------------------------------------------------------------------------------------------
1 nova与glusterfs结合
在所有计算节点上,把创建成功的,glusterfs共享出来的volume,挂在到/var/lib/nova/instances目录:[html] view
plain copy
mount -t glusterfs <本机IP>:/instances /var/lib/nova/instances
chown -R nova:nova /var/lib/nova/instances
2 glance与glusterfs结合
在控制节点上,把创建成功的,glusterfs共享出来的volume,挂在到/var/lib/glance/images目录:[html] view
plain copy
mount -t glusterfs <本机IP>:/images /var/lib/glance/images
chown -R glance:glance /var/lib/glance/images
添加images、instances到fstab自动挂载
[python] view
plain copy
192.168.4.131:/images /var/lib/glance/images glusterfs defaults,_netdev,backupvolfile-server=controller2,backupvolfile-server=compute01 0 0
192.168.4.131:/instances /var/lib/nova/instances glusterfs defaults,_netdev,backupvolfile-server=controller2,backupvolfile-server=compute01 0 0
使用backupvolfile起到了高可用性,避免单点故障
3 cinder与glusterfs结合
3.1 cinder常用的三种后端
(1)本地创建逻辑卷lvm后端(2)glusterfs后端
(3)使用openstack中第三方驱动的IP-SAN,型号为IBM Storwize系列
cinder.conf配置如下:
[html] view
plain copy
[DEFAULT]
enabled_backends = lvm,glusterfs,ibm
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name=LVM
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm
[glusterfs]
volume_driver=cinder.volume.drivers.glusterfs.GlusterfsDriver
volume_backend_name=GlusterFS
glusterfs_shares_config=/etc/cinder/shares.conf
glusterfs_mount_point_base=/var/lib/cinder/glusterfs
[ibm]
volume_driver = cinder.volume.drivers.ibm.storwize_svc.StorwizeSVCDriver
san_ip = 172.28.21.10
san_login = superuser
san_password = 123456
storwize_svc_volpool_name = vtt1
storwize_svc_connection_protocol = iSCSI
volume_backend_name=IBM
3.2 GlusterFS
块存储服务中,GlusterFS Driver官方文档:https://docs.openstack.org/liberty/config-reference/content/GlusterFS-driver.html
https://docs.openstack.org/ocata/config-reference/block-storage/drivers/glusterfs-driver.html
0 安装glusterfs服务器
在cinder节点192.168.4.130上,安装glusterfs客户端软件[html] view
plain copy
# apt-get install glusterfs-client
在存储节点network:192.168.4.131和存储节点compute:192.168.4.132上,创建volume:
[python] view
plain copy
<pre code_snippet_id="2400625" snippet_file_name="blog_20170523_6_165233" name="code" class="python"><span style="font-family: Arial, Helvetica, sans-serif;">root@network:~# gluster peer status
Number of Peers: 1
Hostname: compute
Uuid: 007468f2-9bb8-4b92-aff4-57bbc87dad57
State: Peer in Cluster (Connected)
root@network:~# gluster volume create volumes replica 2 network:/glusterfs/volumes1 compute:/glusterfs/volumes1 network:/glusterfs/volumes2 compute:/glusterfs/volumes2
root@network:~# gluster volume info volumes
Volume Name: volumes
Type: Distributed-Replicate
Volume ID: 54e699ca-6e46-4648-8548-d7d843adc1aa
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: network:/glusterfs/volumes1
Brick2: compute:/glusterfs/volumes1
Brick3: network:/glusterfs/volumes2
Brick4: compute:/glusterfs/volumes2
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on
</span></pre>
<pre></pre>
1 在cinder节点,cinder-volume端配置内容如下
[html] viewplain copy
[DEFAULT]
enabled_backends = glusterfs
[glusterfs] #最后添加
volume_driver = cinder.volume.drivers.glusterfs.GlusterfsDriver #驱动
glusterfs_shares_config = /etc/cinder/shares.conf #glusterfs存储
glusterfs_mount_point_base = /var/lib/cinder/volumes #挂载点
Configuration option = Default value | Description |
---|---|
[DEFAULT] | |
glusterfs_backup_mount_point= $state_path/backup_mount | (StrOpt) Base dir containing mount point for gluster share. |
glusterfs_backup_share= None | (StrOpt) GlusterFS share in <hostname|ipv4addr|ipv6addr>:<gluster_vol_name> format. Eg: 1.2.3.4:backup_vol |
glusterfs_mount_point_base= $state_path/mnt | (StrOpt) Base dir containing mount points for gluster shares. |
glusterfs_shares_config= /etc/cinder/glusterfs_shares | (StrOpt) File with the list of available gluster shares |
nas_volume_prov_type= thin | (StrOpt) Provisioning type that will be used when creating volumes. |
2. 配置glusterfs存储配置
在/etc/cinder/shares.conf文件中配置上卷信息:[html] view
plain copy
# cat /etc/cinder/shares.conf
192.168.4.131:/openstack_cinder
文件中添加glusterfs卷信息,注意该文件的权限,所属组
[html] view
plain copy
root@controller:~# chown -R cinder:cinder /etc/cinder/shares.conf
root@controller:~# ll /etc/cinder/shares.conf
-rw-r--r-- 1 cinder cinder 34 May 17 16:49 /etc/cinder/shares.conf
root@controller:~# chown -R cinder:cinder /var/lib/cinder/*
root@controller:~# ll /var/lib/cinder/volumes/
3. 重启cinder-volume服务
[html] viewplain copy
# service cinder-volume restart
检查日志信息,看是否有错误/var/log/cinder/volume.log
重启服务后,使用mount查看信息:
[python] view
plain copy
192.168.4.131:/openstack_cinder on /var/lib/cinder/volumes/16b81d8d542fdbf4d70330bb672e9714 type fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072)
4. controller节点检查服务状态
controller节点的/etc/cinder/cinder.conf文件中添加内容[python] view
plain copy
[glusterfs]
volume_driver=cinder.volume.drivers.glusterfs.GlusterfsDriver
查看服务状态:
# cinder service-list
+------------------+----------------------+------+---------+-------+----------------------------+-----------------+
| Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+------------------+----------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | controller | nova | enabled | up | 2017-05-17T09:35:38.000000 | - |
| cinder-volume | controller@glusterfs | nova | enabled | up | 2017-05-17T09:35:43.000000 | - |
+------------------+----------------------+------+---------+-------+----------------------------+-----------------+
5. controller建立type
[html] viewplain copy
root@controller:~# cinder type-create glusterfs
+--------------------------------------+-----------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+-----------+-------------+-----------+
| ffd4caf8-2b0f-48d8-aaea-488339922914 | glusterfs | - | True |
+--------------------------------------+-----------+-------------+-----------+
6. controller配置cinder-type和volume_backend_name联动
[html] viewplain copy
root@controller:~# cinder type-key glusterfs set volume_backend_name=glusterfs
#查看type的设置情况
[html] view
plain copy
root@controller:~# cinder extra-specs-list
+--------------------------------------+-----------+----------------------------------------+
| ID | Name | extra_specs |
+--------------------------------------+-----------+----------------------------------------+
| ffd4caf8-2b0f-48d8-aaea-488339922914 | glusterfs | {u'volume_backend_name': u'glusterfs'} |
+--------------------------------------+-----------+----------------------------------------+
7. 重启controller的cinder服务
[html] viewplain copy
root@controller:~# service cinder-scheduler restart
cinder-scheduler stop/waiting
cinder-scheduler start/running, process 27121
root@controller:~# service cinder-api restart
cinder-api stop/waiting
cinder-api start/running, process 27157
8 创建cinder volume
[html] viewplain copy
root@controller:~# cinder create --display-name "test1" --volume-type glusterfs 10 #执行cinder type的类型
root@controller:~# cinder show 59e2e560-6633-45f4-9d73-6f7ea62c06ef
+---------------------------------------+--------------------------------------+
| Property | Value |
+---------------------------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2017-05-17T09:19:47.000000 |
| description | None |
| encrypted | False |
| id | 59e2e560-6633-45f4-9d73-6f7ea62c06ef |
| metadata | {} |
| migration_status | None |
| multiattach | False |
| name | test1 |
| os-vol-host-attr:host | controller@glusterfs#GlusterFS |
| os-vol-mig-status-attr:migstat | None |
| os-vol-mig-status-attr:name_id | None |
| os-vol-tenant-attr:tenant_id | 27a967778eb84f5296258809de65f15e |
| os-volume-replication:driver_data | None |
| os-volume-replication:extended_status | None |
| replication_status | disabled |
| size | 10 |
| snapshot_id | None |
| source_volid | None |
| status | available |
| user_id | 73b742285a6049d5a806d34c2020a1e1 |
| volume_type | glusterfs |
+---------------------------------------+--------------------------------------+
9 查看两个集群节点的存储内容
[html] viewplain copy
root@network:~# ls /glusterfs/*
/glusterfs/brick1:
volume-59e2e560-6633-45f4-9d73-6f7ea62c06ef
/glusterfs/brick2:
相关文章推荐
- [优化篇]OpenStack的Cinder后端存储技术——GlusterFS(1)
- [优化篇]OpenStack的Cinder后端存储技术——GlusterFS(2)
- OpenStackCinder与各种后端存储技术的集成叙述与实践
- [优化篇]OpenStack的Cinder后端存储技术——NFS
- openstack-pike安装cinder使用cinder做后端存储
- GlusterFS作为OpenStack后端存储
- openstack的glance、nova、cinder使用ceph做后端存储
- Openstack 多后端配置--详解NFS作为Cinder的后端存储
- Openstack存储总结之:详解如何使用NFS作为Cinder的后端存储
- GlusterFS作为OpenStack后端存储
- OpenStack入门修炼之Cinder服务-->使用NFS作为后端存储(19)
- 存储那些事儿(三):OpenStack的块存储Cinder与商业存储的融合
- openstack havana块存储Cinder磁盘加密方法研究
- openstack cinder+drbd+nfs实现高可用存储【kilo版】
- 配置Ceph集群为OpenStack后端存储
- 关于Openstack的cinder插件与传统存储的对接
- OpenStack 存储服务 Cinder存储节点部署NFS(十七)
- 【转载】ceph作为OpenStack的后端存储解决方案
- KVM使用glusterfs作为后端存储
- openstack-12:安装cinder存储服务