通过HASH算法得到一个32位的整数
划分为N个连续的子空间,每个空间对应一个Brick
弹性HASA算法的优点
没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持的底层文件系统有EXT3、EXT、ZFS、XFS等
分布式卷的特点
创建分布式卷
gluster volume create dis-volume server1:/dir1 server2:/dir2
根据偏移量将文件分成N快(N个条带节点),轮询的存储在每个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似RAID0
条带卷的特点
创建条带卷
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 dis-stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
[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 类型,大小设为 20 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 xfs /dev/sdb1 '//格式化分区'
[root@node1 ~]# mkfs -t xfs /dev/sdc1
[root@node1 ~]# mkfs -t xfs /dev/sdd1
[root@node1 ~]# mkfs -t xfs /dev/sde1
[root@node1 ~]# mkdir /b3 /c4 /d5 /e6
[root@node1 ~]# vim /etc/fstab '//末行添加下方四个自动挂载信息'
/dev/sdb1 /b3 xfs defaults 0 0
/dev/sdc1 /c4 xfs defaults 0 0
/dev/sdd1 /d5 xfs defaults 0 0
/dev/sde1 /e6 xfs defaults 0 0
[root@node1 ~]# reboot
[root@node1 ~]# df -Th ###查看磁盘挂载情况
/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
[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
20.0.0.111 node1 '//尾行添加如下内容'
20.0.0.112 node2
20.0.0.113 node3
20.0.0.114 node4
[root@node1 ~]# smbclient -L //20.0.0.1
Enter SAMBA\root's password:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk 远程管理
C$ Disk 默认共享
D$ Disk 默认共享
IPC$ IPC 远程 IPC
Users Disk
[root@node1 ~]# mkdir /abc ###创建挂载目录
[root@node1 ~]# mount.cifs //20.0.0.1/gfsrepo /abc ###挂载
#########五台虚拟机一样########
root@node1 chen]# cd /etc/yum.repos.d/ ###进入到etc/yum.repos.d/ 目录里
[root@node1 yum.repos.d]# mv CentOs-* bak/ ###把CentOs*放到bak目录里
[root@node1 yum.repos.d]# vim glfs.repo
[GLFS]
name=glfs
baseurl=file:///abc
gpgcheck=0
enabled=1
[root@node1 yum.repos.d]# yum clean all ###清除缓存
[root@node1 yum.repos.d]# yum list ###重新加载
#####服务器需要安装####
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@node1 yum.repos.d]# systemctl start glusterd.service ###启动服务
[root@node1 yum.repos.d]# systemctl enable glusterd ###开机自启
[root@node1 yum.repos.d]# systemctl status glusterd ###查看状态
[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com ##时间同步
[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 probe node2
peer probe: success.
[root@node1 yum.repos.d]# gluster peer status ##查看池子状态
Number of Peers: 3
Hostname: node2
Uuid: 63f568a6-9f1a-47f7-8667-0893186ef99e
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: b69de245-b692-46bc-8848-8db471f304b8
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 9f0decde-ba47-4537-a0f0-50464962d182
State: Peer in Cluster (Connected)
[root@node4 yum.repos.d]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force ###创建分布式卷,卷名叫dis-vol,用了node1:/data/sdb1和node2:/data/sdb1
[root@node4 yum.repos.d]# gluster volume info dis-vol ###查看详细信息和状态
Volume Name: dis-vol ###名称
Type: Distribute ###分布式卷的类型
Volume ID: 5b75e4bd-d830-4e3f-9714-456261c276be ###id,独一无二的
Status: Created ###Created(创建)状态不能使用
Snapshot Count: 0
Xlator 1: BD
Capability 1: thin
Capability 2: offload_copy
Capability 3: offload_snapshot
Number of Bricks: 2 ###两个块组成
Transport-type: tcp ###tcp协议
Bricks:
Brick1: node1:/data/sdb1 ###node1的sdb1
Brick1 VG:
Brick2: node2:/data/sdb1 ###node2的sbd1
Brick2 VG:
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node4 yum.repos.d]# gluster volume start dis-vol ###开启
[root@node4 yum.repos.d]# gluster volume info dis-vol ###再用这条查看状态就是Started
[root@node4 yum.repos.d]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force ##创建条带卷
[root@node4 yum.repos.d]# gluster volume start stripe-vol ###开启条带卷
[root@node4 yum.repos.d]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
yum.repos.d]# gluster volume start rep-vol ###开启
[root@node4 yum.repos.d]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
[root@node4 yum.repos.d]# gluster volume start dis-stripe ###开启
[root@node4 yum.repos.d]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
[root@node4 yum.repos.d]# gluster volume start dis-rep ###开启
[root@node4 yum.repos.d]# gluster volume list
dis-rep
dis-stripe
dis-vol
rep-vol
stripe-vol
[root@client yum.repos.d]# yum -y install glusterfs glusterfs-fuse
创建五个挂载目录,并且挂载
ot@client yum.repos.d]# mkdir -p /test/dis ### 挂载分布式卷
[root@client yum.repos.d]# mount.glusterfs node1:dis-vol /test/dis/
[root@client yum.repos.d]# mkdir -p /test/stripe
[root@client yum.repos.d]# mount.glusterfs node1:stripe-vol /test/stripe/ ### 挂载条带卷
[root@client yum.repos.d]# mkdir -p /test/rep
[root@client yum.repos.d]# mount.glusterfs node1:rep-vol /test/rep/ ### 挂载复制卷
[root@client yum.repos.d]# mkdir -p /test/dis-stripe
[root@client yum.repos.d]# mount.glusterfs node1:dis-stripe /test/dis-stripe/ ### 挂载分布条带卷
[root@client yum.repos.d]# mkdir -p /test/dis-rep
[root@client yum.repos.d]# mount.glusterfs node1:dis-rep /test/dis-rep/ ###
[root@master ~]# df -Th ##挂载情况
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 291G 4.2G 287G 2% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sde1 xfs 20G 33M 20G 1% /data/sde1
/dev/sdd1 xfs 20G 33M 20G 1% /data/sdd1
/dev/sdc1 xfs 20G 33M 20G 1% /data/sdc1
/dev/sdb1 xfs 20G 33M 20G 1% /data/sdb1
/dev/sda1 xfs 1014M 179M 836M 18% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
tmpfs tmpfs 378M 12K 378M 1% /run/user/42
//192.168.100.2/chen cifs 477G 395M 477G 1% /root/chen
node1:dis-vol fuse.glusterfs 40G 265M 40G 1% /test/dis
node1:stripe-vol fuse.glusterfs 40G 265M 40G 1% /test/stripe
node1:rep-vol fuse.glusterfs 20G 233M 20G 2% /test/rep
node1:dis-stripe fuse.glusterfs 80G 330M 80G 1% /test/dis-stripe
node1:dis-rep fuse.glusterfs 40G 265M 40G 1% /test/dis-rep
[root@client yum.repos.d]# dd if=/dev/zero of=/demo1.log bs=1M count=50
[root@client yum.repos.d]# dd if=/dev/zero of=/demo2.log bs=1M count=50
[root@client yum.repos.d]# dd if=/dev/zero of=/demo3.log bs=1M count=50
[root@client yum.repos.d]# dd if=/dev/zero of=/demo4.log bs=1M count=50
[root@client yum.repos.d]# dd if=/dev/zero of=/demo5.log bs=1M count=50
[root@client yum.repos.d]# cp /demo* /test/dis
[root@client yum.repos.d]# cp /demo* /test/stripe/
[root@client yum.repos.d]# cp /demo* /test/rep/
[root@client yum.repos.d]# cp /demo* /test/dis-stripe/
[root@client yum.repos.d]# cp /demo* /test/dis-rep/
[root@node1 yum.repos.d]# ls -h +磁盘
例子
##########查看分布式卷#########
[root@node1 ~]# ls -lh /data/sdb1/
total 160M
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo4.log
[root@node2 yum.repos.d]# ls -lh /data/sdb1/
total 40M
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo5.log
######查看条带卷####
[root@node1 ~]# ls -lh /data/sdc1/
total 100M
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo4.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo5.log
[root@node2 ~]# ls -lh /data/sdc1/
total 100M
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo4.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo5.log
###查看复制卷###
[root@node4 ~]# ls -lh /data/sdb1/
total 200M
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo4.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo5.log
[root@node3 ~]# ls -lh /data/sdb1/
total 200M
-rw-r--r-- 2 root root 40M Oct 27 09:29 demo1.log
-rw-r--r-- 2 root root 40M Oct 27 09:29 demo2.log
-rw-r--r-- 2 root root 40M Oct 27 09:29 demo3.log
-rw-r--r-- 2 root root 40M Oct 27 09:29 demo4.log
-rw-r--r-- 2 root root 40M Oct 27 09:29 demo5.log
#####查看分布式条带卷#####
[root@node1 ~]# ls -lh /data/sdd1/
total 80M
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo4.log
[root@node2 ~]# ls -lh /data/sdd1/
total 80M
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo4.log
[root@node3 ~]# ls -lh /data/sdd1/
total 20M
-rw-r--r-- 2 root root 20M Oct 27 09:29 demo5.log
[root@node4 ~]# ls -lh /data/sdd1/
total 20M
-rw-r--r-- 2 root root 20M Oct 27 21:29 demo5.log
#######分布式复制卷#####
[root@node1 ~]# ls -lh /data/sde1/
total 160M
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo4.log
[root@node2 ~]# ls -lh /data/sde1/
total 160M
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo1.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo2.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo3.log
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo4.log
[root@node3 ~]# ls -lh /data/sde1/
total 40M
-rw-r--r-- 2 root root 40M Oct 27 09:29 demo5.log
[root@node4 ~]# ls -lh /data/sde1/
total 40M
-rw-r--r-- 2 root root 40M Oct 27 21:29 demo5.log
做破坏实验
[root@master test]# ll
ls: cannot access stripe: Transport endpoint is not connected
total 16
drwxr-xr-x. 3 root root 4096 Oct 27 21:29 dis
drwxr-xr-x. 3 root root 4096 Oct 27 21:29 dis-rep
drwxr-xr-x. 3 root root 4096 Oct 27 21:29 dis-stripe
drwxr-xr-x. 3 root root 4096 Oct 27 21:29 rep
d?????????? ? ? ? ? ? stripe
[root@master test]# ll
ls: cannot access stripe: Transport endpoint is not connected
ls: cannot access dis-stripe: Transport endpoint is not connected
total 12
drwxr-xr-x. 3 root root 4096 Oct 27 21:29 dis
drwxr-xr-x. 3 root root 4096 Oct 27 21:29 dis-rep
d?????????? ? ? ? ? ? dis-stripe
drwxr-xr-x. 3 root root 4096 Oct 27 21:29 rep
d?????????? ? ? ? ? ? stripe
[root@node3 yum.repos.d]# gluster volume stop 卷名 ###要先关闭卷
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) ####填y
volume stop: rep-vol: success
[root@node3 yum.repos.d]# gluster volume delete 卷名 ##删除卷
Deleting volume will erase all information about the volume. Do you want to continue?(y/n) ###填写y
volume delete: rep-vol: success
## 4.9 访问控制
```bash
[root@node1 yum.repos.d]# gluster volume set dis-vol auth.reject IP地址 ###拒绝IP用户
volume set: success
[root@node1 yum.repos.d]# gluster volume set dis-vol auth.allow IP地址 ##允许IP用户
volume set: success