GlusterFS集群的模式
GlusterFS 集群的模式只数据在集群中的存放结构,类似于磁盘阵列中的级别。
1、分布式卷(Distributed Volume)
又称哈希卷,近似于RAID0,文件没有分片,文件根据hash算法写入各个节点的硬盘上,优点是容量大,缺点是没冗余。
2、复制卷(Replicated Volume)
相当于raid1,复制的份数,决定集群的大小,通常与分布式卷或者条带卷组合使用,解决前两种存储卷的冗余缺陷。缺点是磁盘利用率低。
复本卷在创建时可指定复本的数量,通常为2或者3,复本在存储时会在卷的不同brick上,因此有几个复本就必须提供至少多个brick,当其中一台服务器失效后,可以从另一台服务器读取数据,因此复制GlusterFS卷提高了数据可靠性的同事,还提供了数据冗余的功能。
3、分布式复制卷(Distributed Replicated Volume)
分布式复制GlusterFS卷结合了分布式和复制Gluster卷的特点,看起来类似RAID10,但其实不同,RAID10其实质是条带化,但分布式复制GlusterFS卷则没有。
4、条带卷(Striped Volume)
相当于raid0,文件是分片均匀写在各个节点的硬盘上的,优点是分布式读写,性能整体较好。缺点是没冗余,分片随机读写可能会导致硬盘IOPS饱和。
5、分布式条带卷(Distributed Striped Volume)
当单个文件的体型十分巨大,客户端数量更多时,条带卷已经无法满足需求,此时将分布式与条带化结合起来是一个比较好的选择。其性能与服务器数量有关。
GlusterFS 部署:
环境如下:
操作系统 | IP | 主机名 | 硬盘数量(除去系统盘) |
---|---|---|---|
centos 7.4 | 192.168.50.139 | node1 | sdb(10G) sdc(10G) sdd(10G) sde(10G) |
centos 7.4 | 192.168.50.140 | node2 | sdb(10G) sdc(10G) sdd(10G) sde(10G) |
centos 7.4 | 192.168.50.141 | node3 | sdb(10G) sdc(10G) sdd(10G) sde(10G) |
centos 7.4 | 192.168.50.144 | node4 | sdb(10G) sdc(10G) sdd(10G) sde(10G) |
centos 7.4 | 192.168.50.143 | client |
第一步:先将每台虚拟机的各个磁盘挂载好,方便操作,可以使用以下脚本
vim a.sh
#!/bin/bash
#磁盘挂载
echo "the disks exist list:"
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)
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
第二步:在四台node主机上的操作
(1)修改主机名(node1、node2、node3、node4),并关闭防火墙等。
(2)编辑 hosts 文件,添加主机名和 IP地址:
vim /etc/hosts
......
192.168.50.139 node1
192.168.50.140 node2
192.168.50.141 node3
192.168.50.144 node4
(3)编写 yum 源的库,安装 GlusterFS :
cd /opt/
mkdir /abc
mount.cifs //192.168.10.15/gfs /opt //远程挂载到本地
cd /etc/yum.repos.d/
mkdir bak
mv Cent* bak/ //将原来的源都移到新建的文件夹中
vim /etc/yum.repos.d/GLFS.repo //新建一个源
[GLFS]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
(3)安装软件包:
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
(4)开启服务:
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
第三步:添加存储信任池只要在一台主机上添加其他节点即可
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
[root@node1 yum.repos.d]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: 86e94693-aaaf-4eb9-91d6-edce0489e4f7
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 1ee7a579-4a0e-493e-8709-d8234b8bb858
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: b98e1eb0-3639-47be-a767-3a3df125443a
State: Peer in Cluster (Connected)
第四步:GlusterFS 卷的创建
(1)创建分布式卷:
[root@node1 yum.repos.d]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-vol: success: please start the volume to access data
//利用node1和node2上的两块磁盘创建;dis-vol为磁盘名;force表示强制
[root@node1 yum.repos.d]# gluster volume start dis-vol
volume start: dis-vol: success
[root@node1 yum.repos.d]# gluster volume info dis-vol
Volume Name: dis-vol
Type: Distribute
Volume ID: a50b1612-8e67-46b5-b2fa-2894337b74cb
Status: Started
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
(2)创建条带卷:
[root@node1 yum.repos.d]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
volume create: stripe-vol: success: please start the volume to access data
[root@node1 yum.repos.d]# gluster volume start stripe-vol
volume start: stripe-vol: success
[root@node1 yum.repos.d]# gluster volume info stripe-vol
Volume Name: stripe-vol
Type: Stripe
Volume ID: da81b00a-0e98-43d9-b55a-726c758ecef9
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
(3)创建复制卷:
[root@node1 yum.repos.d]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-vol: success: please start the volume to access data
[root@node1 yum.repos.d]# gluster volume start rep-vol
volume start: rep-vol: success
[root@node1 yum.repos.d]# gluster volume info rep-vol
Volume Name: rep-vol
Type: Replicate
Volume ID: fa5bd0c7-5d8d-49da-a25d-9d3fb0592fe3
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
(4)创建分布式条带卷(至少4个节点):
[root@node1 yum.repos.d]# 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 yum.repos.d]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node1 yum.repos.d]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 6dc5d7c3-76ed-437d-b5fe-e0b875c0de18
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
(5)创建分布式复制卷(至少4个节点):
[root@node1 yum.repos.d]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
volume create: dis-rep: success: please start the volume to access data
[root@node1 yum.repos.d]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node1 yum.repos.d]# gluster volume info dis-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: dd2c8b19-d63b-42aa-be66-ca760335d0a0
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
(6)查看创建的卷
[root@node1 yum.repos.d]# gluster volume list
dis-rep
dis-stripe
dis-vol
rep-vol
stripe-vol
第五步:客户端配置
(1)关闭防火墙
(2)配置安装 GFS 源:
cd /opt/
mkdir /abc
mount.cifs //192.168.10.15/gfs /opt //远程挂载到本地
cd /etc/yum.repos.d/
mkdir bak
mv Cent* bak/ //将原来的源都移到新建的文件夹中
vim /etc/yum.repos.d/GLFS.repo //新建一个源
[GLFS]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum -y install glusterfs glusterfs-fuse //安装软件包
(3)修改 hosts文件:
vim /etc/hosts
192.168.50.139 node1
192.168.50.140 node2
192.168.50.141 node3
192.168.50.144 node4
(4)创建临时挂载点:
mkdir -p /text/dis //递归创建一个挂载点
mount.glusterfs node1:dis-vol /text/dis/ //挂载分布式卷
mkdir /text/strip
mount.glusterfs node1:stripe-vol /text/strip/ //挂载条带卷
mkdir /text/rep
mount.glusterfs node3:rep-vol /text/rep/ //挂载复制卷
mkdir /text/dis-str
mount.glusterfs node2:dis-stripe /text/dis-str/ //挂载分布式条带卷
mkdir /text/dis-rep
mount.glusterfs node4:dis-rep /text/dis-rep/ //挂载分布式复制卷
(5)查看挂载信息
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
node1:dis-vol 20G 265M 20G 2% /test/dis
node1:stripe-vol 20G 265M 20G 2% /test/strip
node1:rep-vol 10G 233M 9.8G 3% /test/rep
node1:dis-stripe 40G 330M 40G 1% /test/dis_stripe
node1:dis-rep 20G 265M 20G 2% /test/dis_rep
(6)创建5个40M的文件
dd if=/dev/zero of=/demo1.log bs=1M count=40
dd if=/dev/zero of=/demo2.log bs=1M count=40
dd if=/dev/zero of=/demo3.log bs=1M count=40
dd if=/dev/zero of=/demo4.log bs=1M count=40
dd if=/dev/zero of=/demo5.log bs=1M count=40
(7)复制5个文件到不同的卷上
cp /demo* /test/dis
cp /demo* /test/strip
cp /demo* /test/rep
cp /demo* /test/dis_stripe
cp /demo* /test/dis_rep
第六步 测试
(1)查看分布式卷
每个文件都是完整的
[root@node1 ~]# ll -h /data/sdb1/
总用量 160M
-rw-r--r--. 2 root root 40M 12月 18 16:22 demo1.log
-rw-r--r--. 2 root root 40M 12月 18 16:22 demo2.log
-rw-r--r--. 2 root root 40M 12月 18 16:22 demo3.log
-rw-r--r--. 2 root root 40M 12月 18 16:22 demo4.log
[root@node2 ~]# ll -h /data/sdb1/
总用量 40M
-rw-r--r--. 2 root root 40M 12月 18 16:22 demo5.log
(2)查看条带卷
所有文件都被分成各一半进行分布存储
[root@node1 ~]# ll -h /data/sdc1/
总用量 100M
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo4.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo5.log
[root@node2 ~]# ll -h /data/sdc1/
总用量 100M
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo4.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo5.log
(3)查看复制卷
所有文件都被完整复制一遍,进行存储
[root@node3 ~]# ll -h /data/sdb1
总用量 200M
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo4.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo5.log
[root@node4 ~]# ll -h /data/sdb1/
总用量 200M
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo4.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo5.log
(4)查看分布式条带卷
[root@node1 ~]# ll -h /data/sdd1/
总用量 80M
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo4.log
[root@node2 ~]# ll -h /data/sdd1/
总用量 80M
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo4.log
[root@node3 ~]# ll -h /data/sdd1/
总用量 20M
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo5.log
[root@node4 ~]# ll -h /data/sdd1/
总用量 20M
-rw-r--r--. 2 root root 20M 12月 18 16:23 demo5.log
(5)查看分布式复制卷
[root@node1 ~]# ll -h /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo4.log
[root@node2 ~]# ll -h /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo1.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo2.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo3.log
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo4.log
[root@node3 ~]# ll -h /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo5.log
[root@node4 ~]# ll -h /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 12月 18 16:23 demo5.log