GlusterFS分布式文件系统!
Posted handsomeboy-东
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GlusterFS分布式文件系统!相关的知识,希望对你有一定的参考价值。
GlusterFS
GlusterFS基本知识
文件系统
- 组成:文件系统接口,对对象管理的软件集合,对象及属性
- 作用:负载为用户建立文件、存入、读取、修改、转储文件,控制文件的存取
- 文件系统的挂载使用:除根文件系统以外的文件系统创建后 要使用需要先挂载点后菜可以被访问,挂载点及分区设备文件关联的某个目录文件
GlusterFS
概述:它是开源的分布式文件系统,由存储服务器、客户端以及NFS/Samba存储网关组成
GlusterFS特点
- 拓展性和高性能
- 高可用性
- 全局统一命名空间(指共享),提供了一个API,为用户访问GFS服务器中数据的唯一入口
- 弹性卷管理
- 基于标准协议 :客户端和存储服务器交互需要借助网络,而相关的网络协议包括TCP/IP协议
GlusterFS组成
- 存储服务器:存储节点信息
- 客户端;存储元数据,帮用户定位文件的位置,索引等信息
- NFS/Samba存储网关组成
GlusterFS专业术语
- brick :用于存储用户数据的服务器
- FUSE:远程的GFS,客户端的请求要交给FUSE(伪文件系统),就可以实现跨界点存储在GFS上
- volume :本地文件系统的“分区”
- VFS(虚拟端口):内核态的虚拟文件系统,用户是先提交请求给VFS,然后VFS交给FUSE再交给GFS客户端,最好客户端交给远程的存储
- glusterd:是运行在存储节点的进程
GlusterFS工作流程
- 客户端存储将文件放入,通过system call调用VFS内核寻端口
- VFS将数据交给FUSE,FUSE将数据保存到/dev/fuse虚拟设备中(缓存中),然后唤醒GFS-client
- client将数据传输给server端,server端通过VFS将数据保存在EXT3这种文件系统中,然后保存到brick存储服务器
GlusterFS卷类型
- distribute volume:分布式卷
- stripe voluem :条带卷
- replica volume :负责卷
- distribute stripe volume :分布式条带卷
- distribute replica volume :分布式负责卷
- stripe replica volume :条带负责卷
- distribute stripe replicavolume :分布式条带负责卷
GlusterFS集群部署
设备准备,四台CentOS7作为GFS节点,一台客户端
- node1-4节点:磁盘/dev/sdb1 挂载点:/whd/sdb1
磁盘/dev/sde1 挂载点:/whd/sdc1
磁盘/dev/sdd1 挂载点:/whd/sdd1
磁盘/dev/sde1 挂载点:/whd/sde1
IP地址分别为:192.168.118.100 192.168.118.200
192.168.118.50 192.168.118.55
client端:192.168.118.88
- 四台GFS同时操作
##用脚本进行磁盘分区并挂载
vim /opt/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
##给予权限,执行脚本
chmod +x /opt/fdisk.sh
cd /opt/
sh -x fdisk.sh #连续四次,交互过程填写1,2,3,4
[root@node4 opt]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 xfs 197G 5.4G 192G 3% /
devtmpfs devtmpfs 895M 0 895M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 xfs 197M 152M 45M 78% /boot
tmpfs tmpfs 182M 4.0K 182M 1% /run/user/42
tmpfs tmpfs 182M 36K 182M 1% /run/user/0
/dev/sdb1 xfs 20G 33M 20G 1% /data/sdb1
/dev/sdc1 xfs 20G 33M 20G 1% /data/sdc1
/dev/sdd1 xfs 20G 33M 20G 1% /data/sdd1
/dev/sde1 xfs 20G 33M 20G 1% /data/sde1
添加地址映射
echo "192.168.118.200 node1" >> /etc/hosts
echo "192.168.118.55 node2" >> /etc/hosts
echo "192.168.118.100 node3" >> /etc/hosts
echo "192.168.118.50 node4" >> /etc/hosts
echo "192.168.118.88 client" >> /etc/hosts
##安装部署GlusterFS,设置本地源安装
unzip gfsrepo.zip
cd /etc/yum.repos.d/
mkdir bak
mv CentOS-* bak
vim gfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all #刷新本地仓库
yum makecache
rpm -e --nodeps glusterfs-api glusterfs-libs glusterfs-fuse glusterfs-cli glusterfs glusterfs-client-xlators
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma #下载依赖包
##开启服务
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
- 在node1上添加节点到存储信任池中
[root@node1 gfsrepo]# gluster peer probe node1
peer probe: success.
[root@node1 gfsrepo]# gluster peer probe node2
peer probe: success.
[root@node1 gfsrepo]# gluster peer probe node3
peer probe: success.
[root@node1 gfsrepo]# gluster peer probe node4
peer probe: success. Probe on localhost not needed
[root@node1 gfsrepo]# gluster peer status #查看结果
Number of Peers: 3
Hostname: node1
Uuid: 83a80dc9-316f-4472-a9b2-8b8b0563bd66
State: Peer in Cluster (Connected)
Hostname: node2
Uuid: 0033f686-4ea0-43f7-922e-dd5bf47ad454
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 7821c5d7-e0f3-4f41-b376-f9dbdbad7377
State: Peer in Cluster (Connected)
- 创建卷
#根据规划创建如下卷:
卷名称 卷类型 Brick
dis-volume 分布式卷 node1(/data/sdb1)、node2(/data/sdb1)
stripe-volume 条带卷 node1(/data/sdc1)、node2(/data/sdc1)
rep-volume 复制卷 node3(/data/sdb1)、node4(/data/sdb1)
dis-stripe 分布式条带卷 node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1)
dis-rep 分布式复制卷 node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)
```bash
创建分布式卷,会提醒需要开启
[root@node1 gfsrepo]# gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-volume: success: please start the volume to access data
[root@node1 gfsrepo]# gluster volume list #查看卷列表
dis-volume
[root@node1 gfsrepo]# gluster volume start dis volume #启动新建分布式卷
Usage: volume start <VOLNAME> [force]
[root@node1 gfsrepo]# gluster volume info dis-volume #查看分布式卷信息
Volume Name: dis-volume
Type: Distribute
Volume ID: c542f24d-b18f-432f-acdd-6f7bb9ee6e1b
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
- 创建条带卷
[root@node1 gfsrepo]# gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
volume create: stripe-volume: success: please start the volume to access data
[root@node1 gfsrepo]# gluster volume start stripe-volume
volume start: stripe-volume: success
[root@node1 gfsrepo]# gluster volume info stripe-volume
Volume Name: stripe-volume
Type: Stripe
Volume ID: 80ff853d-2439-4a31-81c9-99da146883e4
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
- 创建复制卷
[root@node1 gfsrepo]# gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-volume: success: please start the volume to access data
[root@node1 gfsrepo]# gluster volume start rep-volume
volume start: rep-volume: success
[root@node1 gfsrepo]# gluster volume info rep-volume
Volume Name: rep-volume
Type: Replicate
Volume ID: fbac45bc-a688-4228-a96b-d9407bd40f08
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick2: node4:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
- 创建分布式条带卷
[root@node1 gfsrepo]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
volume create: dis-stripe: success: please start the volume to access data
[root@node1 gfsrepo]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node1 gfsrepo]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: e83bc20b-70ae-486a-a7bc-5c20d774da6f
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
- 创建分布式复制卷
[root@client yum.repos.d]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
[root@client yum.repos.d]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node1 ~]# gluster volume info dis-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: d13a594e-ed13-4cc4-a8a7-ec7c145bc766
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume list
dis-rep
dis-stripe
dis-volume
rep-volume
stripe-volume
- client端部署
[root@client ~]# cd /etc/yum.repos.d/ #设置本地仓库
[root@client yum.repos.d]# vim gif.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@client yum.repos.d]# yum clean all
[root@client yum.repos.d]# yum makecache
[root@client yum.repos.d]# yum -y install glusterfs glusterfs-fuse
[root@client yum.repos.d]# mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep} #创建挂载目录
##配置/etc/hosts文件
[root@client yum.repos.d]# echo "192.168.118.50 node1" >> /etc/hosts
[root@client yum.repos.d]# echo "192.168.118.55 node2" >> /etc/hosts
[root@client yum.repos.d]# echo "192.168.118.100 node3" >> /etc/hosts
[root@client yum.repos.d]# echo "192.168.118.200 node4" >> /etc/hosts
[root@client yum.repos.d]# echo "192.168.118.88 client" >> /etc/hosts
##挂载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
##永久挂载
[root@client ~]# vim /etc/fstab
vim /etc/fstab
node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0
node1:stripe-volume /test/stripe glusterfs defaults,_netdev 0 0
node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0
node1:dis-stripe /test/dis_stripe glusterfs defaults,_netdev 0 0
node1:dis-rep /test/dis_rep glusterfs defaults,_netdev 0 0
[root@client ~]# mount -a
- 测试GlusterFS文件系统
[root@client ~]# cd /opt
###在卷中写入文件
[root@client opt]# dd if=/dev/zero of=/opt/demo1.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0442097 秒,474 MB/秒
[root@client opt]# dd if=/dev/zero of=/opt/demo2.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0903227 秒,232 MB/秒
[root@client opt]# dd if=/dev/zero of=/opt/demo3.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0920415 秒,228 MB/秒
[root@client opt]# dd if=/dev/zero of=/opt/demo4.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0890255 秒,236 MB/秒
[root@client opt]# dd if=/dev/zero of=/opt/demo5.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0900589 秒,233 MB/秒
[root@client opt]# cp demo* /test/dis
[root@client opt]# cp demo* /test/stripe/
[root@client opt]# cp demo* /test/rep/
[root@client opt]# cp demo* /test/dis_stripe/
[root@client opt]# cp demo* /test/dis_rep/
- 在node1和node2上查看分布式卷情况
node1:
[root@node1 yum.repos.d]# ls -lh /data/sdb1
总用量 80M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
node2:
[root@node2 yum.repos.d]# ll -h /data/sdb1
总用量 20M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo5.log
- 在node1和node2上查看条带卷情况
[root@node1 yum.repos.d]# ls -lh /data/sdc1 #数据分片一半,没有冗余
总用量 50M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo5.log
[root@node2 yum.repos.d]# ll -h /data/sdc1
总用量 50M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo5.log
- 在node3和node4查看负责卷分布
[root@node4 yum.repos.d]# ll -h /data/sdb1 #数据未分片,有冗余
总用量 100M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo5.log
[root@node3 yum.repos.d]# ll -h /data/sdb1
total 100M
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo4.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo5.log
- 在node1-4上查看分布式条带卷
[root@node1 yum.repos.d]# ls -lh /data/sdd1 #数据一半被分片,无冗余
总用量 40M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
[root@node2 yum.repos.d]# ll -h /data/sdd1
总用量 40M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
[root@node4 yum.repos.d]# ll -h /data/sdd1
总用量 10M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo5.log
[root@node3 yum.repos.d]# ll -h /data/sdd1
total 10M
-rw-r--r--. 2 root root 10M 八月 13 09:45 demo5.log
- 在node1-4上查看分布式复制卷
[root@node1 yum.repos.d]# ls -lh /data/sde1
总用量 80M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
[root@node2 yum.repos.d]# ll -h /data/sde1
总用量 80M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
[root@node4 yum.repos.d]# ll -h /data/sde1
总用量 20M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo5.log
[root@node3 yum.repos.d]# ll -h /data/sde1
total 20M
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo5.log
- 破坏性测试:关闭node2节点在client端观察
分布式卷:
[root@client test]# cd /test/dis
[root@client dis]# ll
总用量 81920 #缺少demo5数据
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo1.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo2.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo3.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo4.log
条带卷:
[root@client test]# cd stripe/
[root@client stripe]# ll
ls: 正在读取目录.: 传输端点尚未连接
总用量 0 #条带卷无法访问,不具备冗余性
分布式条带卷
[root@client dis]# cd /test/dis_stripe/
[root@client dis_stripe]# ll
总用量 20480
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo5.log #分布式条带卷不具备冗余性
[root@client dis_stripe]# cd /test/dis_rep/ #数据正常未丢失
[root@client dis_rep]# ll
总用量 102400
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo1.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo2.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo3.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo4.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo5.log
测试结果:带复制卷的都比较安全
以上是关于GlusterFS分布式文件系统!的主要内容,如果未能解决你的问题,请参考以下文章