文章目录
一、GlusterFS概述
1.1 GlusterFS简介
- 开源的分布式文件系统
- 由存储服务器、客户端以及NFS/Samba存储网关组成
- 无元数据服务器
- 开源的分布式文件系统
1.2 GlusterFS特点
- 扩展性和高性能
- 高可用性
- 全局同一命名空间
- 弹性卷管理
- 基于标准协议
1.3 GlusterFS术语
- Brick
- Volume
- FUSE
- VFS
- Glusterd
1.4 模块化堆栈式架构
二、GlusterFS工作原理
- GlusterFS工作流程
- 弹性HASH算法
- 通过HASH算法得到一个32位的整数
- 划分为N各连续的子空间,每个空间对应一个Brick
- 弹性HASH算法的优点
①保持数据平均分布在每一个Brick中
②解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
三、GlusterFS的卷类型
3.1 分布式卷
- 文件分布在不同的服务器,不具备冗余性
- 更容易和廉价地扩展卷的大小
- 单点故障会造成数据丢失
- 依赖地层的数据保护
- 创建分布式卷
gluster volume create dis-volume server1:/dir1 server2:/dir2 ser3:/dir3
3.2 条带卷
- 数据被分割成更小块分布到服务器群众的不同条带去
- 分布减少了负载且更小的文件加速了存取的速度
- 没有数据冗余
- 创建条带卷:创建一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1::/dir1和Server2:/dir两个Brick中
gluster volume create stripe-volume stripe 2 transport tcp server1:dir1 server2:/dir2
3.3 复制卷
- 卷中所有的服务器均保存在一个完整的副本
- 卷的副本数量可由客户创建的时候决定
- 至少有两个快服务器或更多服务器
- 具备冗余性
- 创建复制卷:创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
3.4 分布式条带卷
-
兼顾分布式卷和条带卷的功能
-
主要用于大文件访问处理
-
创建分布式条带卷:创建名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
3.5 分布式复制卷
-
兼顾分布式卷和复制卷的功能
-
用于需要冗余的情况
-
创建分布式复制卷:创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条袋鼠的倍数(>=2倍)
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
3.6 访问控制
//仅拒绝
gluster volume set dis-vol auth.reject 192.168.50.134
//仅允许
gluster volume set dis-vol auth.allow 192.168.50.134
四、Gluster群集部署
- 实验环境:VMware Workstation 15.5、Xshell 6、Centos7.6
- 服务器IP规划:
操作系统 | 作用 | IP地址 |
---|---|---|
Centos7.6 | GFS-node1 | 192.168.50.133 |
Centos7.6 | GFS-node2 | 192.168.50.134 |
Centos7.6 | GFS-node3 | 192.168.50.135 |
Centos7.6 | GFS-node4 | 192.168.50.136 |
Centos7.6 | 客户机 | 192.168.50.140 |
- 实验步骤:(注意!实验前一定要关闭所有节点的防火墙!!!)
1、分别修改四台节点的主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4
2、编辑修改hosts文件
vim /etc/hosts ## 编辑host文件
192.168.50.133 node1
192.168.50.134 node2
192.168.50.135 node3
192.168.50.136 node4
3、将修改过后的hosts文件推动到其他服务器
scp /etc/hosts root@192.168.50.134:/etc/hosts
scp /etc/hosts root@192.168.50.135:/etc/hosts
scp /etc/hosts root@192.168.50.136:/etc/hosts
4、编辑disk分区配置脚本
vim /opt/disk.sh ## 创建disk分区脚本
#!/bin/bash
#
echo "the disk exist list:"
fdisk -l | grep '磁盘 /dev/sd[a-z]'
echo "===================================="
PS3="choose 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
5、将配置好的脚本上传到其他三台服务器
scp /opt/disk.sh root@192.168.50.134:/opt
scp /opt/disk.sh root@192.168.50.135:/opt
scp /opt/disk.sh root@192.168.50.136:/opt
6、使用阿里云的centos7.6 yum源安装gfs(每台设备均要安装)
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ## 下载阿里云yum源配置文件
yum clean all ## 清理yum源
yum list ## 获取yum源列表
7、安装gfs(每台设备均要安装)
yum -y install centos-release-gluster
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
8、启动glusterfs
systemctl start glusterd.service
9、同步四台节点设备的时间
ntpdate ntp1.aliyun.com
10、添加节点到存储信任池(只要在任意一台主机商添加其他节点即可,我这里是在node1上执行命令)
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
每次执行命令后如果执行后返回 peer probe: success. 说明添加成功
11、使用命令查看所有节点信息
查看所有节点:gluster peer status
[root@node1 yum.repos.d]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: 8b37c6d4-17c6-48b3-9603-a6f4781569ca
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 025bbca7-198c-45d2-90be-037d3eaa6c28
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: cc071a1e-b21b-45db-ac8f-1b3e9ea85e6e
State: Peer in Cluster (Connected)
下面进行创建分布式卷:
1、在节点上创建分布式卷
gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
执行后返回:volume create: dis-vol: success: please start the volume to access data
2、创建成功后查看一下创建卷的信息
gluster volume info dis-vol ## 查看分布式卷信息
Volume Name: dis-vol
Type: Distribute
Volume ID: 761e01cc-e9ef-464c-a16d-ce989d954786
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
storage.fips-mode-rchecksum: on
nfs.disable: on
3、启动分布式卷
gluster volume start dis-vol ## 启动分布式卷
执行后返回:volume start: dis-vol: success
Volume Name: dis-vol
Type: Distribute
Volume ID: 761e01cc-e9ef-464c-a16d-ce989d954786
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
storage.fips-mode-rchecksum: on
nfs.disable: on
4、如果想要停止或删除卷,则可以执行以下命令
停止卷:gluster volume stop dis-vol
删除卷:gluster volume delete dis-vol (先停止再删除)
分布式卷创建结果验证:
在客户机创建挂载点目录:mkdir -p /test/dis
进行临时挂载:mount.glusterfs node2:dis-vol /test/dis/
生成测试文件:
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
将测试文件拷贝到挂载目录中:cp demo* /test/dis/
验证:
[root@node1 sdb1]# ll /data/sdb1/
总用量 163840
-rw-r--r--. 2 root root 41943040 9月 13 21:57 demo1.log
-rw-r--r--. 2 root root 41943040 9月 13 21:57 demo2.log
-rw-r--r--. 2 root root 41943040 9月 13 21:57 demo3.log
-rw-r--r--. 2 root root 41943040 9月 13 21:57 demo4.log
[root@node2 yum.repos.d]# ls -lh /data/sdb1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月 13 21:57 demo5.log
下面进行创建复制卷:
1、在节点三上进行创建复制卷
gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
2、启动复制卷
gluster volume start rep-vol
3、在客户端上挂载
mkdir /test/rep-vol ## 创建挂载点目录
mount.glusterfs node2:rep-vol /test/rep-vol/ ##挂载复制卷
cp demo* /test/rep-vol/ ## 拷贝测试文件去复制卷中
复制卷结果验证:
[root@node3 sdb1]# ll /data/sdb1/
总用量 204800
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo1.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo2.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo3.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo4.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo5.log
[root@node4 yum.repos.d]# ll /data/sdb1/
总用量 204800
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo1.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo2.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo3.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo4.log
-rw-r--r--. 2 root root 41943040 9月 13 22:42 demo5.log
下面进行创建分布式复制卷:
1、创建分布式复制卷
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
2、开启复制卷
gluster volume start dis-rep
3、客户端挂载复制卷
mount.glusterfs node1:dis-rep /test/rep-vol/
复制卷结果验证:
1、拷贝测试文件到客户端挂载目录,在节点上查看存储情况
cp demo* /test/dis-rep/
[root@node1 data]# ls -lh /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo1.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo2.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo3.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo4.log
[root@node2 yum.repos.d]# ls -lh /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo1.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo2.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo3.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo4.log
[root@node3 sdb1]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo5.log
[root@node4 yum.repos.d]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo5.log
2 demo4.log
[root@node2 yum.repos.d]# ls -lh /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo1.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo2.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo3.log
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo4.log
[root@node3 sdb1]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo5.log
[root@node4 yum.repos.d]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月 13 23:02 demo5.log