分布式文件系统由来
在介绍以前咱们先来看下文件系统及典型的NFS文件系统。html
计算机经过文件系统管理,存储数据的。而如今数据信息时代中人们可获取数据成指数倍的增加,单纯经过增长硬盘个数来拓展计算机系统的存储的方式,已经明显不能知足目前的需求。 分布式文件系统能够有效解决数据的存储和管理难题,将固定于某个地点的某个文件系统,拓展到多个地点、多个文件系统。众多的节点组成一个文件系统网络,每一个节点能够分布在不一样的区域的地点,经过网络进行节点间的通讯和数据传输。人们无需关系数据存储哪一个节点上或从哪一个节点获取的,只须要像使用本地文件同样管理和存储文件系统中的数据。
典型表明NFSnode
NFS即网络文件系统,它容许网络计算机之间经过TCP/IP网络共享资源,在NFS应用中,本地的NFS客户端应用能够透明的读取远端NFS服务器上的文件。
优势以下:
1.节约使用的磁盘空间
客户端常用的数据能够集中放在一台机器上,并使用NFS发布,那么网络内部全部计算机能够经过网络访问,没必要单独共享。
2.节约硬件资源
NFS还能够共享软驱,CDROM和ZIP等存储设备,减小整个网络上的可移动设备的数量。
3.用户主目录设定linux
对于特殊用户,如管理员等,为了管理的须要,可能会常常登陆到网络中全部的计算机,若每一个客户端,均保存这个用户的主目录很繁琐,并且不能保证数据的一致性,实际上,通过NFS服务的设定,而后在客户端指定这个用户主目录位置,并自动挂载,就能够在任何计算机上使用用户主目录的文件。
GlusterFS概述算法
GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具备强大的横向扩展能力,经过扩展可以支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或GlusterFS基于可堆叠的用户空间设计,可为各类不一样的数据负载提供优异的性能。 GlusterFS支持运行在任何标准的IP网络上标准应用程序客户端,用户能够在全局统一的命名空间使用NFS、CIFS等标准协议来访问应用数据。GlusterFS使用的用户可摆脱原有的独立,高成本的封闭存储系统,可以利用普通廉价的存储设备来部署可集中管理、横向拓展、虚拟化的存储池,存储容量可拓展至TP/PB级.
前glusterfs已rehat收购,官方网站是:https://www.gluster.org/centos
GlusterFS安装部署
1.安装glusterfs依赖的包api
yum install -y centos-release-gluster37.noarch yum --enablerepo=centos-gulster*-test install gluster-server gluster-cli gluster-geo-replication
2、GlusterFS安装部署实践
2.1GlusterFS安装环境准备
#准备好4台Centos6-x86_64虚拟机 内存1G 数据盘10G 网络选择nat;
每台机器,关闭 selinux iptables并作每台好主机名解析:缓存
192.168.10.101 mystorage1 192.168.10.102 mystorage2 192.168.10.103 mystorage3 192.168.10.104 mystorage4
补充说明:
#修改主机名2个位置安全
1. 修改 /etc/sysconfig/network 另一个是 /etc/hosts vi /etc/sysconfig/network 里面有一行 HOSTNAME=localhost.localmain修改为localhost.localdomain做为主机名 /etc/hosts里面有一行 127.0.0.1 localhost.localdomain(主机名hostname)
2.2关闭selinux及iptables服务器
#关闭selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux或 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #关闭iptables /etc/init.d/iptables stop #永久关闭 chkconfig iptables off
2.3安装epel源(4台主机分别执行)网络
GlusterFS yum 源有部分包依赖epel源 yum -y install epel-release
2.4安装glusterfs源(4台主机分别执行)
wget -P /etc/yum.repos.d/ https://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/RHEL/glusterfs-epel.repo
或者gluster的相关包下载到本地目录
主要包括
glusterfs-3.7.4-2.e16.x86_64.rpm glusterfs-cli-3.7.4-2.e16.x86_64.rpm glusterfs-debuginfo-3.7.4-2.e16.x86_64.rpm glusterfs-geo-replication-3.7.4-2.e16.x86_64.rpm glusterfs-rdma-3.7.4-2.e16.x86_64.rpm glusterfs-api-3.7.4-2.e16.x86_64.rpm glusterfs-client-xlators-3.7.4-2.e16.x86_64.rpm glusterfs-fuse-3.7.4-2.e16.x86_64.rpm glusterfs-libs-3.7.4-2.e16.x86_64.rpm glusterfs-server-3.7.4-2.e16.x86_64.rpm
下载地址:
https://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/CentOS/epel-6.8/x86_64/
例如:(4台主机分别执行)
执行yum -y install glusterfs-* mkdir -p /opt/glusterfs
一直执行完毕,没有报错的话,glusterfs安装完毕;
2.5或者yum安装(4台主机分别执行)
yum install -y centos-release-gluster37.noarch yum --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication
2.6配置Glusterfs
#查看gluster版本信息
glusterfs -V
#启动中止服务(4台主机分别执行)
/etc/init.d/glusterd start /etc/init.d/glusterd stop
#添加开机启动(4台主机分别执行)
chkconfig glusterd on
#查看glusterfs的运行状态(4台主机分别执行)
/etc/init.d/glusterd status
2.7存储主机加入信任存储池配置(4台主机分别执行)
说明:每台主机上加入除本机之外对应的其余3台主机的存储池配置
gluster peer probe mystorage2 gluster peer probe mystorage3 gluster peer probe mystorage4
#查看配置链接存储池的状态(4台主机分别执行)
gluster peer status
3、GlusterFS配置实践
3.1 配置以前的准备工做
安装xfs支持包(4台主机分别执行)
yum -y install xfsprogs
fdisk -l #查看磁盘块设备,查看相似的信息
#磁盘分区(这步能够不作)
fdisk /dev/vdb n p 1(数字) 回车 w
再次执行fdisk -l查看
说明:若是格式话分区的磁盘大于4T使用 parted命令
生产环境中:磁盘的分区的分区暂时不作。直接对应格式化便可。
#分区格式化,每台机器上执行
mkfs.xfs -f /dev/sdb
#分别在4台机器上 执行
mkdir -p /storage/brick1 #创建挂在块设备的目录 mount /dev/sdb /storage/brick1
执行df -h查看
#开机自动挂载(4台机器中每台执行)
编辑/etc/fstab添加以下
/dev/sdb /storage/brick1 xfs defaults 0 0
或者执行命令:(4台机器中每台执行)
echo "/dev/sdb /storage/brick1 xfs defaults 0 0" >> /etc/fstab
#4台机器中机器分别执行挂载命令
mount -a
#每台机器执行查看挂载状况命令;(4台机器也都自动挂载了)
df -h
3.2建立volume及其操做
Distributed,分布卷,算法随机分布到bricks组的卷上。 Replicated 复制试卷,相似raid1 replica数必须等于volume中brick所包含存储服务器数,可用性高。 Striped,带条带的卷,相似raid0 stripe数必须等于volume中brick所包含的存储服务器数,文件被分割数据模块,以RoundRobin的方式存储在bricks,并发颗粒度是数据块,大文件性能好. Distributed Striped分布式的条带卷,volume中的brick所包含的存储服务器数必须是stripe的倍数(>=2倍)兼顾分布式和条带的功能、(生产环境通常不使用,官方也不推荐) Distributed Relicated分布式的复制卷,volume中brick1所包含的存储服务器数必须是replica的倍数(>=2倍)兼顾分布式和复制的功能。(生产环境使用较多)
情景1:
3.3建立分布卷(任意一台主机执行便可)[意义是跨主机整合磁盘]
gluster volume create gv1 mystorage1:/storage/brick1 mystorage2:/storage/brick1 force
3.4建立启动卷(任意一台主机执行便可)
[root@ mystorage1brick1]# gluster volume start gv1
#查看配置卷的信息
[root@ mystorage1brick1]# gluster volume info
3.5挂载到目录(任意一台主机执行便可)
mount -t glusterfs 127.0.0.1:/gv1 /mnt
3.6#查看挂载后的磁盘(任意一台主机执行便可)
df -h
3.7建立文件查看测试结果
#mystorage1s上建立文件
[root@mystorage1 mnt]# touch a b c dd ddf
#mystorage3查看建立文件
[root@mystorage3 mnt]# ls a b c dd ddf
情景2:
3.8测试NFS方式挂载及查看数据
[root@mystorage4 /]# umount /mnt/ [root@mystorage4 /]# mount -o mountproto=tcp -t nfs 192.168.56.11:/gv1 /mnt/ [root@mystorage4 /]# df -h [root@mystorage4 /]# umount /mnt/
#测试挂载另一台机器
[root@mystorage4 /]# mount -o mountproto=tcp -t nfs 192.168.56.12:/gv1 /mnt/ [root@mystorage4 /]# df -h [root@mystorage4 /]# umount /mnt/
情景3:
3.9建立分布式复制卷(storage3和storage4)[生产场景推荐使用此种方式]
[root@mystorage1 mnt]# gluster volume create gv2 replica 2 mystorage3:/storage/brick1 mystorage4:/storage/brick1 force [root@mystorage2 ~]# gluster volume start gv2 [root@mystorage1 mnt]# df -h [root@mystorage1 mnt]# mount -t glusterfs 127.0.0.1:/gv2 /opt [root@mystorage1 mnt]# df -h [root@mystorage1 mnt]# cd /opt/ [root@mystorage1 opt]# touch sdfsd sdf
3.10测试查看分布式复制的数据(storage3和storage4)
[root@mystorage3 mnt]# cd /storage/brick1 [root@mystorage3 brick1]# ls sdfsd sdf [root@mystorage4 mnt]# cd /storage/brick1 [root@mystorage4 brick1]# ls sdfsd sdf
说明:以上两种状况,一是建立分布卷,另外建立分布式复制卷,生产场景中通常使用1个卷(整合多个磁盘到一个卷)使用分布式复制卷场景(情景3)居多。
情景4:
3.11建立分布式条带卷
#建立卷目录(4台主机分别执行)
mkdir -p /storage/brick2
#添加开机启动自动挂载(4台主机分别执行)
echo "/dev/sdc /storage/brick2 xfs defaults 0 0" >>/etc/fstab
#执行挂载(4台主机分别执行)
mount -a
#查看挂载状况(4台主机分别执行)
df -h
#建立分布式条带卷(storage1上执行)
gluster volume create gv3 stripe 2 mystorage3:/storage/brick2 mystorage4:/storage/brick2 force
#启动卷(storage1上执行)
gluster volume start gv3
#查看配置卷信息
gluster volume info
#建立要挂载的目录(分别在4台机器的根上新建gv1 gv2 gv3)
mkdir /gv1 /gv2 /gv3
#执行挂载命令(storage4上执行)(4台机器也可都执行)
mount -t glusterfs 127.0.0.1:gv1 /gv1 mount -t glusterfs 127.0.0.1:gv2 /gv2 mount -t glusterfs 127.0.0.1:gv3 /gv3 df -h
#咱们建立一个10M的目录测试(storage4上)
[root@mystorage4 gv3]# ls -a . .. .trashcan [root@mystorage4 gv3]# dd if=/dev/zero bs=1024 count=10000 of=/gv3/10M.file [root@mystorage4 gv3]# dd if=/dev/zero bs=2048 count=10000 of=/gv3/20M.file [root@mystorage4 gv3]# cd /storage/brick2 [root@mystorage4 brick2]# ls -lh
#进入到storage3上看下
[root@mystorage3 gv3]# cd /storage/brick2 [root@mystorage3 brick2]# ls -lh
对比两边的文件你会发现两个文件被打散分别存储在storage3和storage4上了、
[root@mystorage3 gv3]# ls -lh #也会看到刚咱们建立的两个文件。
#咱们在storage3上 gv2目录测试
[root@mystorage3 gv2]# dd if=/dev/zero bs=1024 count=10000 of=/gv2/10M.file [root@mystorage3 gv2]# dd if=/dev/zero bs=2048 count=10000 of=/gv2/20M.file
#进入到storage3 brick1和storage4 brick1对比查看
[root@mystorage3 brick1]# ls -lh [root@mystorage4 brick1]# ls -lh
3.12 添加磁盘操做
#中止gv2 数据服务
gluster volume stop gv2
#添加新加的磁盘的到存储池
gluster volume add-brick gv2 replica 2 mystorage1:/storage/brick2 mystorage2:/storage/brick2 force
#启动启动卷
gluster volume start gv2
#取消挂载gv2,从新挂载
umount /gv2 mount -t glusterfs 127.0.0.1:/gv2 /gv2
#查看挂载结果(gv2已经变成20G了)
df -h
#查看gv2卷信息
gluster volume info gv2
注意说明:
当你给分布式复制卷和分布式条带卷中增长bricks时,你增长的bricks的数目必须是复制卷和条带卷数目的倍数。例如:
你给一个分布式复制卷的replica为2 你在增长bricks的时候数量必须为2.4.6.8等。
3.13磁盘存储的平衡:
注意;平衡布局是颇有必要的,由于布局结构是静态的,当新的bricks加入现有卷,新建的文件会分布在旧的brick中,因此须要平衡布局结构,使新加入的bricks生效,布局只是使新布局生效。并不会在新的布局上移动老的数据,若是想在新布局生效后,从新平衡卷中的数据,还须要对卷中的数据进行平衡。
执行命令:(可在storage1上执行)
gluster volume rebalance gv2 start
#查看执行平衡后同步的状态
gluster volume rebalance gv2 status
3.14移除brick
注意:你可能想在线缩小卷的大小。例如:当硬件损坏或者网络故障的时候,你可能想在卷中移除相关的bricks注意,当你移除bricks的时候,你在gluster的挂载点不能继续访问数据,只有配置文件中的信息移除后你才能继续访问bricks的数据。当移除分布式复制卷或者分布式条带卷的时候,移除的bricks数目必须是replica或者stripe的倍数。例如:一个分布式条带卷的stripe是2 当你移除bricks的时候必须是二、四、六、8等。
执行操做:
gluster volume stop gv2
#移除操做
gluster volume remove-brick gv2 replica 2 mystorage3:/storage/brick1 mystorage4:/storage/brick1 force
3.15删除卷
#storege4上看下挂载状况
df -h
#卸载gv1
umount /gv1
#中止卷
gluster volume stop gv1
#删除卷
gluster volume
#查看卷信息
gluster volume info gv1
GlusterFS在企业中应用场景
理论和实践分析,GlusterFS目前主要使用大文件存储场景,对于小文件尤为是海量小文件,存储效率和访问性能都表现不佳,海量小文件LOSF问题是工业界和学术界的人工难题,GlusterFS做为通用的分布式文件系统,并无对小文件额外的优化措施,性能很差也是能够理解的。
Media -文档、图片、音频、视频 *Shared storage -云存储、虚拟化存储、HPC(高性能计算) *Big data -日志文件、RFID(射频识别)数据