Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说GFS —— 分布式文件系统,希望能够帮助你!!!。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统;主要负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取
除了根文件系统外,需要先挂载到挂载点后,才可被访问
挂载点即分区设备文件关联的某个目录文件
存储服务器
客户端
NFS/samba存储网关组成
RDMA:负责数据传输,数据传输协议
解决传输中客户端与服务器端数据处理的延迟
posix:可移植系统接口,解决不同操作系统见的移植性
用户:安装客户端,安装fuse,挂载到服务端,把文件存储进去
写的过程
GFS客户端服务器
特点:
创建命令
gluster volume create dis-volume server1:/dir1 server2:/dir2
大小拆分,轮询存储在每个节点
不具备冗余,
特点:
创建命令
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
冗余备份,多个节点存储空间不一致,按木桶效应最小节点存取
至少两个服务器和更多服务器
特点:
创建命令
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
分布式,条带卷功能
大文件访问处理,至少4台服务器
创建命令
创建了一个名为dis-rep的分布式条带卷,配置分布式的复制卷时,卷中Brick所包含的存储服务器数必须是复制数的倍数(>=2倍)
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
分布式,复制卷功能
兼具分布式卷和复制卷的特点
创建命令
创建了一个名为dis-rep的分布式条带卷,配置分布式的复制卷时,卷中Brick所包含的存储服务器数必须是复制数的倍数(>=2倍)
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
类似RAID 10,同时具有条带卷和复制卷的特点
三种基本卷的复合卷通常用于类Map Reduce应用
命令 | 含义 |
---|---|
gluster volume list | 查看GlusterFS卷 |
gluster volume info | 查看所有卷的信息 |
gluster volume status | 查看所有卷的状态 |
gluster volume stop dis-stripe | 停止一个卷 |
gluster volume delete dis-stripe | 删除一个卷 |
注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功 | |
gluster volume set dis-rep auth.allow + IP | 设置卷的访问控制仅拒绝 |
-------- | ----- |
gluster volume set dis-rep auth.allow + IP | 仅允许 |
节点名 | IP地址 |
---|---|
Node 1 | 192.168.10.129 |
Node2 | 192.168.10.134 |
Node3 | 192.168.10.130 |
Node4 | 192.168.10.142 |
客户机 | 192.168.10.1 |
关闭防火墙:
systemctl stop firewalld
setenforce 0
Node1节点:192.168.10.129
Node2节点:192.168.10.134
Node3节点:192.168.10.130
Node4节点:192.168.10.142
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
chmod +x fdisk.sh
./fdisk.sh
获着
#!/bin/bash
echo "the disks exist list:"
##grep出系统所带磁盘
fdisk -l |grep '磁盘 /dev/sd[a-z]'
echo "=================================================="
PS3="chose which disk you want to create:"
##选择需要创建的磁盘编号
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
case $VAR in
sda)
##本地磁盘就退出case语句
fdisk -l /dev/sda
break ;;
sd[b-z])
#create partitions
echo "n ##创建磁盘 p w" | fdisk /dev/$VAR
#make filesystem
##格式化
mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
#mount the system
mkdir -p /data/${VAR}"1" &> /dev/null
###永久挂载
echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
###使得挂载生效
mount -a &> /dev/null
break ;;
quit)
break;;
*)
echo "wrong disk,please check again";;
esac
done
#以Node1节点为例:
hostnamectl set-hostname node1
su
echo "192.168.10.129 node1" >> /etc/hosts
echo "192.168.10.134 node2" >> /etc/hosts
echo "192.168.10.130 node3" >> /etc/hosts
echo "192.168.10.142 node4" >> /etc/hosts
echo "192.168.10.1 client" >> /etc/hosts
----- 安装、启动GlusterFS(所有node节点上操作) -----
#将gfsrepo 软件上传到/opt目录下
#上传gfsrepo.zip 至/opt解压缩
unzip gfsrepo.zip
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
打开配置文件
vim /etc/yum.repos.d/glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
安装
#yum -y install centos-release-gluster #如采用官方 YUM 源安装,可以直接指向互联网仓库
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
解决方法,卸载高版本,重新安装
rpm -e --nodeps glusterfs-api
rpm -e --nodeps glusterfs-libs
rpm -e --nodeps glusterfs-fuse
rpm -e --nodeps glusterfs-cli
yum -y install glusterfs-client-xlators.x86_64
yum -y install glusterfs-api.x86_64
yum install -y glusterfs-cli
如果还有其他软件包版本过高,直接卸载,重新安装即可
启动
systemctl start glusterd.service 开启服务
systemctl enable glusterd.service 开机自启动服务
systemctl status glusterd.service 查看状态
进行时间同步
ntpdate ntp1.aliyun.com
----- 添加节点到存储信任池中(在 node1 节点上操作) -----
#只要在一台Node节点上添加其它节点即可
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
在每个Node节点上查看群集状态
gluster peer status
1.创建分布式卷
#创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
#查看卷列表
gluster volume list
#启动新建分布式卷
gluster volume start dis-volume
#查看创建分布式卷信息
gluster volume info dis-volume
2.创建条带卷
#指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume start stripe-volume
gluster volume info stripe-volume
3.创建复制卷
#指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷
gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
gluster volume start rep-volume
gluster volume info rep-volume
4.创建分布式条带卷
#指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
gluster volume start dis-stripe
gluster volume info dis-stripe
5.创建分布式复制卷
指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
gluster volume start dis-rep
gluster volume info dis-rep
gluster volume list
---- 部署 Gluster 客户端 -----
1.安装客户端软件
#将gfsrepo 软件上传到/opt目下
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
yum -y install glusterfs glusterfs-fuse
2.创建挂载目录
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
ls /test
3.配置 /etc/hosts 文件
echo “192.168.10.129 node1” >> /etc/hosts
echo “192.168.10.134 node2” >> /etc/hosts
echo “192.168.10.130 node3” >> /etc/hosts
echo “192.168.10.142 node4” >> /etc/hosts
echo “192.168.10.1 client” >> /etc/hosts
4.挂载 Gluster 文件系统
#临时挂载
mount.glusterfs node1:dis-volume /test/dis
mount.glusterfs node1:stripe-volume /test/stripe
mount.glusterfs node1:rep-volume /test/rep
mount.glusterfs node1:dis-stripe /test/dis_stripe
mount.glusterfs node1:dis-rep /test/dis_rep
df -Th
----- 测试 Gluster 文件系统 -----
1.卷中写入文件,客户端操作
cd /opt
dd if=/dev/zero of=/opt/demo1.log bs=1M count=20
dd if=/dev/zero of=/opt/demo2.log bs=1M count=20
dd if=/dev/zero of=/opt/demo3.log bs=1M count=20
dd if=/dev/zero of=/opt/demo4.log bs=1M count=20
dd if=/dev/zero of=/opt/demo5.log bs=1M count=20
cp demo* /test/dis
cp demo* /test/stripe/
cp demo* /test/rep/
cp demo* /test/dis_stripe/
cp demo* /test/dis_rep/
2.查看文件分布
#查看分布式文件分布
[root@node1 ~]# ls -lh /data/sdb1 #数据没有被分片
[root@node2 ~]# ll -h /data/sdb1
#查看条带卷文件分布
[root@node1 ~]# ls -lh /data/sdc1 #数据被分片50% 没副本 没冗余
root@node2 ~]# ll -h /data/sdc1 #数据被分片50% 没副本 没冗余
#查看复制卷分布
[root@node3 ~]# ll -h /data/sdb1 #数据没有被分片 有副本 有冗余
[root@node3 ~]# ll -h /data/sdd1
root@node4 ~]# ll -h /data/sdd1
root@node4 ~]# ll -h /data/sdd1
#查看分布式复制卷分布
#数据没有被分片 有副本 有冗余
[root@node1 ~]# ll -h /data/sde1
[root@node2 ~]# ll -h /data/sde1
[root@node3 ~]# ll -h /data/sde1
[root@node4 ~]# ll -h /data/sde1
---- 破坏性测试 -----
#挂起 node2 节点或者关闭glusterd服务来模拟故障
[root@node2 ~]# systemctl stop glusterd.service
#在客户端上查看文件是否正常
#分布式卷数据查看
[root@localhost dis]# ll #在客户上发现少了demo5.log文件,这个是在node2上的
#条带卷
[root@localhost text]# cd stripe/ #无法访问,条带卷不具备冗余性
[root@localhost stripe]# ll
#分布式条带卷
[root@localhost dis_and_stripe]# ll #无法访问,分布条带卷不具备冗余性
#分布式复制卷
[root@localhost dis_and_rep]# ll #可以访问,分布式复制卷具备冗余性
若node2修复,加入集群,数据正常
#挂起 node2 和 node4 节点,在客户端上查看文件是否正常
#测试复制卷是否正常
[root@localhost rep]# ls -l #在客户机上测试正常 数据有
测试分布式条卷是否正常
[root@localhost dis_stripe]# ll #在客户机上测试正常 没有数据
#测试分布式复制卷是否正常
[root@localhost dis_and_rep]# ll #在客户机上测试正常 有数据
1.查看GlusterFS卷
gluster volume list
2.查看所有卷的信息
gluster volume info
3.查看所有卷的状态
gluster volume status
4.停止一个卷
gluster volume stop dis-stripe
5.删除一个卷,注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
gluster volume delete dis-stripe
6.设置卷的访问控制
#仅拒绝
gluster volume set dis-rep auth.deny 192.168.10.100
#仅允许
gluster volume set dis-rep auth.allow 192.168.10.*
#设置192.168.10.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章