GFS:由存储服务器(brick server)、客户端以及NFS/Samba存储网关组成
特点:
常用术语:
GFS结构:
弹性HASH算法:
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
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
VMware Workstation
centos7,IP地址:192.168.73.100,主机名 node1,添加四块硬盘,分别为3G、4G、5G、6G
centos7,IP地址:192.168.73.101,主机名 node2,添加四块硬盘,分别为3G、4G、5G、6G
centos7,IP地址:192.168.73.102,主机名 node3,添加四块硬盘,分别为3G、4G、5G、6G
centos7,IP地址:192.168.73.103,主机名 node4,添加四块硬盘,分别为3G、4G、5G、6G
centos7,IP地址:192.168.73.104,主机名client,测试用
卷名称 | 卷类型 | 空间大小/GB | brick |
---|---|---|---|
dis | 分布式卷 | 12 | node1(/e6)node2(/e6) |
stripe-volume | 条带卷 | 10 | node1(/d5)node2(/d5) |
rep-volume | 复制卷 | 5 | node3(/d5)node4(/d5) |
dis-stripe | 分布式条带卷 | 12 | node1(/b3)node2(/b3)node3(/b3)node4(/b3) |
dis-rep | 分布式复制卷 | 8 | node1(/c4)node2(/c4)node3(/c4)node4(/c4) |
[root@node1 ~]# fdisk -l '//查看磁盘是否添加成功'
[root@node1 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x5fae534e 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n '//创建分区'
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p '//创建主分区'
分区号 (1-4,默认 1): '//回车,默认分区号'
起始 扇区 (2048-6291455,默认为 2048): '//回车,默认扇区大小'
将使用默认值 2048
Last 扇区, +扇区 or +size{
K,M,G} (2048-6291455,默认为 6291455): '//回车,默认主分区大小'
将使用默认值 6291455
分区 1 已设置为 Linux 类型,大小设为 3 GiB
命令(输入 m 获取帮助):w '//保存分区信息'
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@node1 ~]# ll /dev/ | grep sd '//查看刚刚格式化的磁盘是否成功/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1'
'//刚刚fdisk -l查看,有/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde四个磁盘,用相同方法格式化其他的磁盘和其他node主机的磁盘'
[root@node1 ~]# mkfs -t ext4 /dev/sdb1 '//格式化分区'
[root@node1 ~]# mkfs -t ext4 /dev/sdc1
[root@node1 ~]# mkfs -t ext4 /dev/sdd1
[root@node1 ~]# mkfs -t ext4 /dev/sde1
[root@node1 ~]# mkdir /b3 /c4 /d5 /e6
[root@node1 ~]# vim /etc/fstab '//末行添加下方四个自动挂载信息'
/dev/sdb1 /b3 ext4 defaults 0 0
/dev/sdc1 /c4 ext4 defaults 0 0
/dev/sdd1 /d5 ext4 defaults 0 0
/dev/sde1 /e6 ext4 defaults 0 0
[root@node1 ~]# reboot
[root@node1 ~]# df -Th '//重启后查看自动挂载情况,会产生如下信息'
。。。省略内容
/dev/sdc1 ext4 3.9G 16M 3.7G 1% /c4
/dev/sde1 ext4 5.8G 24M 5.5G 1% /e6
/dev/sdd1 ext4 4.8G 20M 4.6G 1% /d5
/dev/sdb1 ext4 2.9G 9.0M 2.8G 1% /b3
。。。省略内容
[root@node1 ~]# systemctl stop firewalld.service '//关闭防火墙'
[root@node1 ~]# systemctl disable firewalld.service '//取消开启自启'
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node1 ~]# setenforce 0 '//关闭核心防护'
[root@node1 ~]# vim /etc/selinux/config
SELINUX=disabled '//修改为disabled'
[root@node1 ~]# vi /etc/hosts
192.168.73.100 node1 '//尾行添加如下内容'
192.168.73.101 node2
192.168.73.102 node3
192.168.73.103 node4
[root@node1 opt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir bak '//创建备份目录'
[root@node1 yum.repos.d]# mv * bak '//将所有文件移动到备份目录'
mv: 无法将目录"bak" 移动至自身的子目录"bak/bak" 下
[root@node1 yum.repos.d]# vim abc.repo '//编辑本地yumrepo文件'
[abc]
name=abc
baseurl=file:///mnt
gpgcheck=0
enabled=1
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@node1 yum.repos.d]# mount /dev/sr0 /mnt '//将光盘挂载到/mnt'
[root@node1 yum.repos.d]# yum clean all '//清除yum缓存'
[root@node1 yum.repos.d]# yum makecache '//创建缓存数据'
[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma '//安装安装GLFS软件'
[root@node1 yum.repos.d]# systemctl start glusterd.service '//启动GLFS软件'
[root@node1 yum.repos.d]# systemctl enable glusterd.service '//设置开机自启'
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service.
[root@node1 yum.repos.d]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 yum.repos.d]# gluster peer probe node2
peer probe: success.
[root@node1 yum.repos.d]# gluster peer probe node3
peer probe: success.
[root@node1 yum.repos.d]# gluster peer probe node4
peer probe: success.
[root@node1 yum.repos.d]# gluster peer status
'//其他三台node节点相同操作,不在赘述'
[root@node4 yum.repos.d]# gluster volume create dis-volume node1:/e6 node2:/e6 force '//创建分布式卷'
volume create: dis-volume: success: please start the volume to access data
[root@node4 yum.repos.d]# gluster volume info dis-volume '//查看分布式卷信息'
[root@node4 yum.repos.d]# gluster volume start dis-volume '//开启分布式卷'
volume start: dis-volume: success
'//下面的操作大同小异,不在解释'
[root@node1 yum.repos.d]# gluster volume create stripe-volume stripe 2 node1:/d5 node2:/d5 force
volume create: stripe-volume: success: please start the volume to access data
[root@node1 yum.repos.d]# gluster volume info stripe-volume
[root@node1 yum.repos.d]# gluster volume start stripe-volume
volume start: stripe-volume: success
[root@node1 yum.repos.d]# gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force
volume create: rep-volume: success: please start the volume to access data
[root@node1 yum.repos.d]# gluster volume info rep-volume
[root@node1 yum.repos.d]# gluster volume start rep-volume
volume start: rep-volume: success
[root@node1 yum.repos.d]# gluster volume create dis-stripe stripe 2 node1:/b3 node2:/b3 node3:/b3 node4:/b3 force
volume create: dis-stripe: success: please start the volume to access data
[root@node1 yum.repos.d]# gluster volume info dis-stripe
[root@node1 yum.repos.d]# gluster volume start dis-stripe
[root@node1 yum.repos.d]# gluster volume create dis-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
volume create: dis-rep: success: please start the volume to access data
[root@node1 yum.repos.d]# gluster volume info dis-rep
[root@node1 yum.repos.d]# gluster volume start dis-rep
volume start: dis-rep: success
[root@client ~]# cd /opt
[root@client opt]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@client yum.repos.d]# mkdir bak
[root@client yum.repos.d]# mv * bak
mv: 无法将目录"bak" 移动至自身的子目录"bak/bak" 下
[root@client yum.repos.d]# vim local.repo
[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 /text/{
dis,stripe,rep,dis_and_stripe,dis_and_rep} '//创建挂载点目录'
[root@client yum.repos.d]# vim /etc/hosts
'//尾行添加'
192.168.73.100 node1
192.168.73.101 node2
192.168.73.102 node3
192.168.73.103 node4
[root@client yum.repos.d]# mount -t glusterfs node1:dis-volume /text/dis
[root@client yum.repos.d]# mount -t glusterfs node1:stripe-volume /text/stripe
[root@client yum.repos.d]# mount -t glusterfs node1:rep-volume /text/rep
[root@client yum.repos.d]# mount -t glusterfs node1:dis-stripe /text/dis_and_stripe
[root@client yum.repos.d]# mount -t glusterfs node1:dis-rep /text/dis_and_rep
'//如果要永久挂载需要修改fstab文件'
[root@client yum.repos.d]# vim /etc/fstab
'//尾行添加'
node1:dis-volume /text/dis glusterfs defaults,_netdev 0 0
node1:stripe-volume /text/stripe glusterfs defaults,_netdev 0 0
node1:rep-volume /text/rep glusterfs defaults,_netdev 0 0
node1:dis-stripe /text/dis_and_stripe glusterfs defaults,_netdev 0 0
node1:dis-rep /text/dis_and_rep glusterfs defaults,_netdev 0 0
[root@client yum.repos.d]# dd if=/dev/zero of=/demo1.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.103023 秒,407 MB/秒
[root@client yum.repos.d]# dd if=/dev/zero of=/demo2.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.434207 秒,96.6 MB/秒
[root@client yum.repos.d]# dd if=/dev/zero of=/demo3.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.388875 秒,108 MB/秒
[root@client yum.repos.d]# dd if=/dev/zero of=/demo4.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.465817 秒,90.0 MB/秒
[root@client yum.repos.d]# dd if=/dev/zero of=/demo5.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.437829 秒,95.8 MB/秒
[root@client ~]# cd /
[root@client /]# ll '//查看刚创建的测试文件'
总用量 204828
lrwxrwxrwx. 1 root root 7 12月 30 04:29 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 12月 30 04:43 boot
-rw-r--r--. 1 root root 41943040 2月 17 22:53 demo1.log
-rw-r--r--. 1 root root 41943040 2月 17 22:53 demo2.log
-rw-r--r--. 1 root root 41943040 2月 17 22:53 demo3.log
-rw-r--r--. 1 root root 41943040 2月 17 22:53 demo4.log
-rw-r--r--. 1 root root 41943040 2月 17 22:53 demo5.log
[root@node1 yum.repos.d]# ll -h /e6 '//node1查看e6文件夹(分布式文件存储位置)'
总用量 161M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo4.log
[root@node2 yum.repos.d]# ll -h /e6
总用量 41M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
'//发现5个文件被分布式存储到了两个节点,且没有被切片,都是40M原本大小'
[root@node1 yum.repos.d]# ll -h /d5
总用量 101M
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo4.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:52 lost+found
[root@node2 yum.repos.d]# ll -h /d5
总用量 101M
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo4.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:52 lost+found
'//发现数据已经被分片的分不到node1和node2节点上'
[root@node3 yum.repos.d]# ll -h /d5
总用量 201M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo4.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
[root@node4 yum.repos.d]# ll -h /d5
总用量 201M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo4.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
'//数据没有被分片 有副本 有冗余 '
[root@node1 yum.repos.d]# ll -h /b3
总用量 81M
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo4.log
drwx------. 2 root root 16K 2月 17 20:51 lost+found
[root@node2 yum.repos.d]# ll -h /b3
总用量 81M
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo4.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
[root@node3 yum.repos.d]# ll -h /b3
总用量 21M
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
[root@node4 yum.repos.d]# ll -h /b3
总用量 21M
-rw-r--r--. 2 root root 20M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
[root@node1 yum.repos.d]# ll -h /c4
总用量 161M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo4.log
drwx------. 2 root root 16K 2月 17 20:52 lost+found
[root@node2 yum.repos.d]# ll -h /c4
总用量 161M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo1.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo2.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo3.log
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo4.log
drwx------. 2 root root 16K 2月 17 20:52 lost+found
[root@node3 yum.repos.d]# ll -h /c4
总用量 41M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
[root@node4 yum.repos.d]# ll -h /c4
总用量 41M
-rw-r--r--. 2 root root 40M 2月 17 22:55 demo5.log
drwx------. 2 root root 16K 2月 17 20:59 lost+found
[root@client /]# cd /text/dis
[root@client dis]# ll
总用量 163844
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo1.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo2.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo3.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo4.log
drwx------. 2 root root 4096 2月 17 20:52 lost+found
'//原本存储在node2上的demo5.log文件消失了'
[root@client dis]# cd /text/stripe/
[root@client stripe]# ll
总用量 0
'//因为数据分片的,所以node2关机后,数据都消失了'
[root@client stripe]# cd /text/dis_and_stripe/
[root@client dis_and_stripe]# ll
总用量 40964
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo5.log
'//发现分布式的方式存储的demo5没有消失(存储在node3和node4上的)'
[root@client dis_and_stripe]# cd /text/dis_and_rep/
[root@client dis_and_rep]# ll
总用量 204804
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo1.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo2.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo3.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo4.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo5.log
drwx------. 2 root root 4096 2月 17 20:59 lost+found
'//发现断点测试对于分布式复制卷没有影响'
[root@client dis_and_rep]# ll
总用量 204804
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo1.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo2.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo3.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo4.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo5.log
drwx------. 2 root root 4096 2月 17 20:59 lost+found
'//正常,所有数据都没有消失'
[root@client dis_and_rep]# cd /text/dis_and_stripe/
[root@client dis_and_stripe]# ll
总用量 0
'//发现在node4关机后,原本存在的demo5.log文件也消失了'
[root@client rep]# ll
总用量 204800
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo1.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo2.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo3.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo4.log
-rw-r--r--. 1 root root 41943040 2月 17 22:55 demo5.log
'//数据都在,测试正常'
查看GlusterFS卷:gluster volume list
查看所有卷的信息:gluster volume info
查看所有卷的状态:gluster volume status
停止/删除卷:gluster volume stop dis-stripe ####停止一个卷
gluster volume delete dis-stripe ####删除一个卷
设置卷的访问控制:gluster volume set dis-rep auth.allow 192.168.32.* ##设置192.168.30.0网段的所有IP地址 都能访问dis-rep卷(分布式复制卷)