[优化篇]OpenStack的Cinder后端存储技术——GlusterFS(1)
来源:互联网 发布:物联网网络视频服务器 编辑:程序博客网 时间:2024/06/08 00:38
题记
上一篇已经介绍了OpenStack的Cinder后端使用NFS存储技术,为什么要使用NFS呢?一般情况下,如果你的网络是千兆网络,在如果你考虑性能的要求,存储设置到宿主机本地硬盘效率会更好,例如我们可以在计算节点上安装cinder-volume服务,然后在本地硬盘创建NFS,这样效率会更好,但是对于存储来说,数据安全是用户最关心的,如果我本机的环境出现问题,那么数据就会有丢失的可能,所以,将数据独立存储到某一个环境中要比放在同一个环境中保险的多。但是数据独立存储,例如专门搞一个存储节点,用户又会觉得这个存储节点坏了,不是还是有问题么?所以我们可能需要一种分布式存储来解决这个问题,现在支持OpenStack的Cinder的分布式存储技术有很多,包括本篇介绍的GlusterFS和Ceph,前者实现也比较简单。
原理
提起分布式存储,简单的说,就是我可以建立一个多节点的分布式存储集群,对用户来说我可能只存储到某一个路径下,但是系统会自动往其他节点进行复制,也就是其实你的数据复制了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接口。
环境
操作系统:Ubuntu 14.04 LTS
两台机器搭建GlusterFS集群
192.168.3.180 Controller
192.168.3.181 Compute
192.168.3.182 Network
192.168.3.185 Cinder
192.168.3.10 fs1
192.168.3.11 fs2
集群部署
1、分别在fs1和fs2安装glusterfs-server软件
root@fs1:~# apt-get install glusterfs-server
2、分别在fs1和fs2机器的/etc/hosts里面添加IP和机器名的映射关系
root@fs1:~# cat /etc/hosts127.0.0.1 localhost192.168.3.10 fs1192.168.3.11 fs2
3、启动GlusterFS服务(Ubuntu安装之后会自动启动)
root@fs1:~# service glusterfs-server restartglusterfs-server stop/waitingglusterfs-server start/running, process 1708
4、分别在fs1和fs2创建分布式存储
root@fs1:~# mkdir -p /data/fs1
5、添加集群节点
由于GlusterFS是一种无中心的模式,任何节点都是对等的,支持横向扩展,我们可以从任意一台节点操作,添加其他节点集群。例如我在fs2操作,添加fs1为glusterfs集群。建议使用机器名。
root@fs2:~# gluster peer probe fs1
6、查看集群状态
root@fs2:~# gluster peer statusNumber of Peers: 1Hostname: 192.168.3.10Uuid: 9bc2b23c-4e7f-4da9-9a24-c570f753066cState: Peer in Cluster (connected)
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/fs2
查看卷信息
root@fs2:~# gluster volume info demoVolume Name: demoType: ReplicateVolume ID: 68c6b6b1-80cc-4c60-af45-68279e4ad2f5Status: StartedNumber of Bricks: 1 x 2 = 2Transport-type: tcpBricks:Brick1: 192.168.3.10:/data/fs1Brick2: 192.168.3.11:/data/fs2
常见故障解决方案
注意:以下问题并不是我遇到的,但是记录下来,仅供参考!部分环境可能是CentOS或者RedHat
问题1
[root@localhost ~]# gluster peer statusConnection failed. Please check if gluster daemon is operational.
原因:未开启glusterd服务
解决方法:开启glusterd服务
/etc/init.d/glustefs-server start
问题2
[root@localhost ~]# gluster peer probe 192.168.230.130peer probe: failed: Probe returned with unknown errno 107
原因:日志中打印[2014-05-15 15:55:25.929461] I [glusterd-handler.c:2836:glusterd_probe_begin] 0-glusterd:Unable to find peerinfo for host: 192.168.230.130 (24007)
防火墙没开启24007端口
解决方法:开启24007端口或者关掉防火墙
/sbin/iptables -I INPUT -p tcp –dport 24007 -j ACCEPT # 开启24007端口
/etc/init.d/iptables stop # 关掉防火墙
注:
也可以使用主机名来代替IP,修改/etc/hosts文件实现
gluster peer probe server-130
问题3
volume create volume1 192.168.230.135:/tmp/brick1
volume create: volume2: failed
不能只使用一个server上的brick创建volume,需要至少两个brick,或者在client主机(这里为192.168.230.134)上使用一个brick创建volume。
gluster> volume create volume1 192.168.230.134:/tmp/brick1 force volume create: volume1: success: please start the volume to access data gluster> volume info Volume Name: volume1 Type: Distribute Volume ID: b01a2c29-09a6-41fd-a94e-ea834173a6a3 Status: Created Number of Bricks: 1 Transport-type: tcp Bricks: Brick1: 192.168.230.134:/tmp/brick1 gluster> gluster> volume create volume2 192.168.230.134:/tmp/brick2 192.168.230.135:/tmp/brick2 force volume create: volume2: success: please start the volume to access data gluster> volume info Volume Name: volume1 Type: Distribute Volume ID: b01a2c29-09a6-41fd-a94e-ea834173a6a3 Status: Created Number of Bricks: 1 Transport-type: tcp Bricks: Brick1: 192.168.230.134:/tmp/brick1 Volume Name: volume2 Type: Distribute Volume ID: 4af2e260-70ce-49f5-9663-9c831c5cf831 Status: Created Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: 192.168.230.134:/tmp/brick2 Brick2: 192.168.230.135:/tmp/brick2
问题4
创建一个volume后删除,再使用同名的brick创建volume失败。
gluster> volume create test 192.168.230.134:/tmp/brick1 force volume create: test: success: please start the volume to access data gluster> volume info Volume Name: test Type: Distribute Volume ID: c29f75d2-c9f5-4d6f-90c5-c562139ab9cd Status: Created Number of Bricks: 1 Transport-type: tcp Bricks: Brick1: 192.168.230.134:/tmp/brick1 gluster> volume delete test force Usage: volume delete <VOLNAME> gluster> volume delete test Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y volume delete: test: success gluster> volume create test 192.168.230.134:/tmp/brick1 force volume create: test: failed: /tmp/brick1 or a prefix of it is already part of a volume
因为volume delete时并未删掉create时创建的目录,需要手动删除后再使用。
- [优化篇]OpenStack的Cinder后端存储技术——GlusterFS(1)
- [优化篇]OpenStack的Cinder后端存储技术——GlusterFS(2)
- OpenStack的Cinder后端存储技术——GlusterFS
- [优化篇]OpenStack的Cinder后端存储技术——NFS
- GlusterFS作为OpenStack后端存储
- OpenStack Cinder 与各种后端存储技术的集成叙述与实践
- Openstack 多后端配置--详解NFS作为Cinder的后端存储
- Openstack存储总结之:详解如何使用NFS作为Cinder的后端存储
- Openstack Cinder 多后端
- Cinder的多后端存储服务
- OpenStack存储:Cinder和Swift的解释
- openstack的临时存储后端
- cinder后端采用nfs存储
- [问题篇]VMWare搭建Openstack——Cinder创建扩展Volume的状态Error的问题
- [部署篇10]VMWare搭建Openstack——Cinder的安装与配置
- [管理篇]VMWare搭建Openstack——Cinder的使用以及相关操作
- [管理篇]VMWare搭建Openstack——Cinder的使用以及相关操作(2)
- [管理篇]VMWare搭建Openstack——Cinder完成对云硬盘的扩容
- POJ1852 Ants
- 笔记本一切正常却无法连接wifi
- Web学习之HTML
- 猜图游戏
- 不同VLAN之间通信的原理
- [优化篇]OpenStack的Cinder后端存储技术——GlusterFS(1)
- Android中实现版本更新(二)自定义更新
- Android中handler的使用及原理---学习笔记
- Hadoop伪分布式与集群式安装配置
- 消除Java 的冗余代码
- Hadoop—HDFS读写文件操作---练习4
- 移动开发构架漫谈——反劫持实战篇
- 每天一个小知识点6(bootstrap总结)
- c中sizeof()运算符的问题