GlusterFS中的RAID

一直不了解RAID是什么概念,这两天简单看了一下,RAID是“Redundant Array of Independent Disks”的缩写,中文意思是独立冗余磁盘阵列,磁盘阵列中针对不同的应用使用的不同技术,称为RAID level,而每一level都代表着不同技术,目前业界公认的标准是RAID 0~RAID 5。 百度百科里有详细解释

这里结合glusterfs的应用,说一下RAID0和RAID1

RAID0和RAID1最通俗的理解是
RAID0速度是最快的,因为数据是分开存放在每个组成阵列的硬盘,所以一旦其中一块硬盘有问题就会导致所有数据损坏。优点:速度快、成本低 缺点数据容易丢失,一旦损坏无法恢复。
RAID1的原理是有两块硬盘组成的阵列,其中一块拿来正常使用,另外一块是专门备份存放的,相当于你两块硬盘只能用一块硬盘,另外那块是保存这块硬盘里面的数据,这样的话即使你有一块硬盘坏了数据也不会丢失,但速度慢,而且两块硬盘只能用一块硬盘的容量。

GlusterFS集群存储的核心是Cluster Translators,它包括AFR(Automatic File Replication)、DHT(Distributed Hash Table)和Stripe三种类型。

AFR相当于RAID1,同一文件在多个存储节点上保留多份,主要用于实现高可用性以及数据自动修复。AFR所有子卷上具有相同的名字空间,查找文件时从第一个节点开始,直到搜索成功或最后节点搜索完毕。读数据时,AFR会把所有请求调度到所有存储节点,进行负载均衡以提高系统性能。写数据时,首先需要在所有锁服务器上对文件加锁,默认第一个节点为锁服务器,可以指定多个。然后,AFR以日志事件方式对所有服务器进行写数据操作,成功后删除日志并解锁。AFR会自动检测并修复同一文件的数据不一致性,它使用更改日志来确定好的数据副本。自动修复在文件目录首次访问时触发,如果是目录将在所有子卷上复制正确数据,如果文件不存则创建,文件信息不匹配则修复,日志指示更新则进行更新。

DHT即上面所介绍的弹性哈希算法,它采用hash方式进行数据分布,名字空间分布在所有节点上。查找文件时,通过弹性哈希算法进行,不依赖名字空间。但遍历文件目录时,则实现较为复杂和低效,需要搜索所有的存储节点。单一文件只会调度到唯一的存储节点,一旦文件被定位后,读写模式相对简单。DHT不具备容错能力,需要借助AFR实现高可用性。

Stripe相当于RAID0,即分片存储,文件被划分成固定长度的数据分片以Round-Robin轮转方式存储在所有存储节点。Stripe所有存储节点组成完整的名字空间,查找文件时需要询问所有节点,这点非常低效。读写数据时,Stripe涉及全部分片存储节点,操作可以在多个节点之间并发执行,性能非常高。Stripe通常与AFR组合使用,构成RAID10/RAID01,同时获得高性能和高可用性,当然存储利用率会低于50%。

好了,概念就copy这么多了,主要是glusterfs如何实现RAID0+RAID1呢?

刚开始认为,通过gluster volume的一些命令就可以实现,可是后来碰到了问题,一直不知道该怎么解决?具体如下:

在前面glusterfs安装和集群搭建的基础上,再详细看一下gluster volume命令

创建分布式volume

sudo gluster peer probe 192.168.30.8
sudo gluster peer probe 192.168.30.9

sudo gluster volume create test-volume1 transport tcp 192.168.30.8:/home/dir1 192.168.30.9:/home/dir1
查看信息:sudo gluster volume info 
启用卷:gluster volume start test-volume1

创建分布式复制(镜像)卷
gluster volume create test-volume2 replica 2 transport tcp 192.168.30.8:/home/dir2 192.168.30.9:/home/dir2

配置分布式条带卷
gluster volume create test-volume3 stripe 2 transport tcp 192.168.30.8:/home/dir3 192.168.30.9:/home/dir3

扩展volume
gluster peer probe 192.168.30.10
gluster volume add-brick test-volume1 192.168.30.10:/home/dir1
收缩volume
gluster volume remove-brick test-volume1 192.168.30.10:/home/dir1

 这些命令单独运行都是对的,可是如何将stripe和replica结合在一起呢?如果我先将192.168.30.8:/home/dir1 和192.168.30.9:/home/dir1组成的stripe卷,此时我想将192.168.30.8:/home/dir1 保留一份副本,此时用gluster volume create test-volume2 replica 2 transport tcp 192.168.30.8:/home/dir1 192.168.30.10:/home/dir1,此时会提示192.168.30.8:/home/dir1 已在使用,根本无法创建这个冗余卷,只能是没用到的目录才可以,可是我是要将用到的这个目录镜像一份,找了半天,也没找到相应的命令

在网上一查,全是通过配置服务端和客户端配置文件来构建RAID0+RAID1的,通过glusterfsd启动glusterfs服务端,通过glusterfs启动glusterfs客户端并挂载到一个实体目录下,参照网上的做法实践了一下,证明这种方法是可以行得通的,只不过要写配置文件,客户端配置文件如下:

  1. volume client1  
  2.   
  3.   type protocol/client  
  4.   
  5.   option transport-type tcp  
  6.   
  7.   option remote-host 192.168.30.7     # IP address of the remote brick  
  8.   
  9.   option remote-subvolume brick        # name of the remote volume  
  10.   
  11. end-volume  
  12.   
  13. volume client2  
  14.   
  15.   type protocol/client  
  16.   
  17.   option transport-type tcp  
  18.   
  19.   option remote-host 192.168.30.8    # IP address of the remote brick  
  20.   
  21.   option remote-subvolume brick        # name of the remote volume  
  22.   
  23. end-volume  
  24.   
  25. volume client3  
  26.   
  27.   type protocol/client  
  28.   
  29.   option transport-type tcp  
  30.   
  31.   option remote-host 192.168.30.9     # IP address of the remote brick  
  32.   
  33.   option remote-subvolume brick        # name of the remote volume  
  34.   
  35. end-volume  
  36.   
  37. volume client4  
  38.   
  39.   type protocol/client  
  40.   
  41.   option transport-type tcp  
  42.   
  43.   option remote-host 192.168.30.10    # IP address of the remote brick  
  44.   
  45.   option remote-subvolume brick        # name of the remote volume  
  46.   
  47. end-volume  
  48.   
  49. #服务器之间的关系  
  50.   
  51. volume brick1  
  52.   
  53.     type cluster/distribute #分布式卷  
  54.   
  55.     subvolumes client1 client2  
  56.   
  57. end-volume  
  58.   
  59. volume brick2  
  60.   
  61.     type cluster/replicate  #复制卷  
  62.   
  63.     subvolumes client3 client4  
  64.   
  65. end-volume  
  66.   
  67. volume brick3  
  68.   
  69.     type cluster/distribute  #分布式卷  
  70.   
  71.     subvolumes brick1 brick2  
  72.   
  73. end-volume  

其中每个volume client(1-4),对应一个服务端的实体目录,当然一个服务端可以启动多个实体目录的,若碰到启动报端口没有绑定的错误,将option remote-port 24016加到配置文件中,24016是默认端口,当然可以自己改的。

可以看出这种方式,也没有直接将一个实体目录两次用,它是先组成两组subvolume(子卷brick1和brick2),然后再将两组子卷组合在一起,想到通过gluster volume方式,是不是也可以呢?

当形成两组子卷时,如何将这两个卷合到一个卷中呢?发现create volume命令,无论是分布式的还是复制式的,它后面的参数必须是<HOSTNAME>:<export-dir-abs-path>,可以看到必须是主机名+导出目录的绝对路径,如何才能将创建的子volume合并到一个volume中去呢?

其实不用像配置文件那样做,gluster volume中直接提供命令做分布式复制,前面一直理解错了,可以看一下Creating Distributed Replicated Volumes这个命令,这个命令就可以简单实现RAID0+RAID1,我一直只是停留在Creating Distributed Volumes和Creating Replicated Volumes的用法上,可以仔细去对比一下五个命令的功能和用法

Creating Distributed Volumes
Creating Replicated Volumes
Creating Striped Volumes
Creating Distributed Striped Volumes
Creating Distributed Replicated Volumes
我想,只要是配置文件能实现的功能,通过gluster volume管理功能,应该也有相应实现的

参考资料:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值