gfd glusterFS 开源的分布式的文件系统
存储服务器 客户端 以及网络(NFS/samba)网关
传统式老的分布式元服务器,元服务器保存存储节点的目录树信息。
一旦元服务器故障,所有的存储节点全部失效
现在GFS取消了元服务器机制,数据横向扩展能力更强。可靠性更强,存储效率也更高了
1.扩展性更强,高性能
2.高可用、可以自动对文件进行复制,多次复制,确保数据总是可以访问,哪怕硬件故障也能正常访问
3.全局统一的命名空间,所有节点都在一个分支的管理之下,客户端访问分支节点即可。
4.弹性卷,类似于lvm,不同硬盘上的不同分区组成一个逻辑上的硬盘。GFS提出不同服务器上的不同的硬盘分区,组成一个卷。可以动态的扩容。
5.基于标准协议,GFS存储服务支持,NFS FTP HTTP以及GFS协议,应用程序可以直接使用数据,不需要做任何修改。
1、BRICK(存储块) 存储服务器提供的用于物理存储的专用分区,GFS当中的基本存储单元,也是对外提供的存储目录,由服务和目录的绝对路径组成
server.dir
192.168.233.10:/opt/gfs
node1:/opt/gfs
2.volume 逻辑卷 一个逻辑卷就是一组brick的集合。类似于lvm,我们管理GFS就是管理这些卷。
3.FUSE:GFS的内核模块,允许用户创建自己的文件系统
4.VFS:内核空间对用户提供的访问磁盘的接口。虚拟端口
5.服务端在每个存储节点上都要运行,glusterd(后台管理进程)
(1)客户端或应用程序通过 GFS 的挂载点访问数据。
(2)linux系统内核通过 VFS 收到请求并处理。
(3)VFS 将数据递交给 FUSE 内核处理,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GFS客户端。
(4)GFS客户端 收到数据后,客户端根据配置文件的配置对数据进行处理。
(5)经过 GFS客户端 处理后,通过网络将数据传递至远端的 GFS服务端,并且将数据写入到服务器存储设备上。
分布式卷,也是GFS的默认卷类型
条带卷(没了)
复制卷(镜像化)
分布式复制卷
分布式卷的特点:文件数据通过HASH算法分布到设置的所有BRICK SERVER上。GFS的默认卷,属于raid 0 没有容错机制。在分布式卷模式下,没有对文件进行分块,直接存储在某个server的节点上。存取效率也没有提供,直接使用本地文件系统进行存储。
复制卷:类似于raid1 ,文件会同步在多个brick server上,读性能上升,写性能稍差
复制卷具备冗余,坏一个节点不影响数据,但是要保存副本,磁盘利用率50%
分布式复制卷:两两复制,文件会在组内同步,不同的组直接未必同步
环境:
四台服务器
node1 node:192.168.233.10 磁盘 。dev/sdb1 /data/sdb1
dev/sdc1 /data/sdc1
dev/sdd1 /data/sdd1
node2 node:192.168.233.20 磁盘 。dev/sdb1 /data/sdb1
dev/sdc1 /data/sdc1
dev/sdd1 /data/sdd1
node3:192.168.233.30 磁盘 。dev/sdb1 /data/sdb1
dev/sdc1 /data/sdc1
dev/sdd1 /data/sdd1
node4:192.168.233.40 磁盘 。dev/sdb1 /data/sdb1
dev/sdc1 /data/sdc1
dev/sdd1 /data/sdd1
客户端:任选 192.168.223.61
所有:systemctl stop firewalld
setenforce 0
cd /opt
vim fdisk.sh
#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEV
do
echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null
mkfs.xfs /dev/${VAR}"1" &> /dev/null
mkdir -p /data/${VAR}"1" &> /dev/null
echo "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/null
sz fdisk.sh
拖到其他三个
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
scan
到虚拟机添加硬盘
添加3个盘
scan
lsblk
sh fdisk.sh
df -h
分别去里面看一下
cat /etc/fstab
hostnamectl set-hostname node1
su
hostnamectl set-hostname node2
su
hostnamectl set-hostname node3
su
hostnamectl set-hostname node4
su
vim /etc/hosts #每个linux
192.168.233.10 node1
192.168.233.20 node2
192.168.233.30 node3
192.168.233.40 node4
192.168.66.15 node1
192.168.66.19 node2
192.168.66.17 node3
192.168.66.18 node4
所有:
yum -y install epel-release.noarch
yum -y install centos-release-gluster
yum clean all && yum makecache
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
systemctl restart glusterd
如果安装失败:
检查版本
glusterd -V
test1:
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
所有:
gluster peer status
分布式卷:
test1:cd /opt
gluster volume create fenbushi node1:/data/sdb1 node2:/data/sdb1 force
gluster volume create:创建新卷。默认就是分布式卷
fenbushi:卷名 唯一不可重复
node1:/data/sdb1 node2:/data/sdb1挂载点
force 强制创建
gluster volume start fenbushi
gluster volume info fenbushi ##查看分布式信息
客户端
systemctl stop firewalld
setenforce 0
yum -y install epel-release.noarch
yum -y install glusterfs glusterfs-fuse
vim /etc/hosts
192.168.233.10 node1
192.168.233.20 node2
192.168.233.30 node3
192.168.233.40 node4
mkdir -p /test/fenbushi
mount.glusterfs node1:fenbushi /test/fenbushi/
df -h
umount node1:fenbushi
vim /etc/fstab #永久
node1:fenbushi /test/fenbushi glusterfs defaults,_netdev 0 0
mount -a
df -h
cd /test/fenbushi/
ls
touch {1..5}.txt
test1:
cd /data/
ls
cd sdb1/
ls
test2:
cd /data/
ls
cd sdb1/
ls
停止了节点,关闭服务之后,不删除限于卷的情况下,能否继续恢复正常读写功能。如果不能如何恢复。
复制卷:
test1:
cd /opt
gluster volume create fuzhijuan replica 2 node2:/data/sdc1 node3:/data/sdc1 force
y
gluster volume start fuzhijuan
gluster volume info fuzhijuan
客户端:
mkdir /test/fuzhijuan
mount.glusterfs node1:fuzhijuan /test/fuzhijuan/
df -h
cd fuzhijuan/
touch {1..6}.txt
test3:
cd /data/sdc1
ls
分布式复制卷
node 1 /data/sdd1 node2 /data/dd1 node3 /data/sdd1 node4 /data/sdd1
test1:gluster volume create fenbufuzhi replica 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
gluster volume start fenbufuzhi
gluster volume info fenbufuzhi
客户端 cd..
mkdir fenbufuzhi
mount.glusterfs node1:fenbufuzhi /test/fenbufuzhi
df -h
touch {1..6}.txt
cd /data
cd sdd1/
ls
test1,2,3,4
cd /data
cd sdd1/
ls
删除卷
test1
gluster volume status
gluster volume stop fenbushi
gluster volume delete fenbushi
客户端
vim /etc/fstab
删除fenbushi
mount -a
访问控制:
test1
gluster volume set fenbushi auth.deny 192.168.233.61
gluster volume set fenbushi auth.reject 192.168.233.61
mkdir /test
mount.glusterfs node1:fenbufuzhi /test
故障恢复:
关闭node1
systemctl stop glusterd.service
在node2
gluster volume info fenbufuzhi
客户端:
cd fenbufuzhi/
rm -rf *
ls
node2
node3
node4
客户端
touch {1..6}.txt
node2
node3
node4
客户端:
rm -rf *
node2,node3,node4
node1:
客户端:
node1:
node2:
node3:
node4:
结论:停掉一台以后,剩下三台node不受影响,有一台没有复制备份
当打开关掉的一台,重新恢复以后,四台全都正常运行,复制备份