文章目录
- GFS分布式文件系统
- 一、概览
- 二、实验
- 1、实验准备
- 2、关闭防火墙并修改主机名(五台主机)
- 3、编辑配置文件(四台主机)
- 4、编辑脚本文件(四台机器,脚本启动后免交互自动完成)
- 5、安装GlusterFS工具包(四台node结点,以其中一台为例)
- 6、时间同步,每台节点都需要操作
- 7、添加加入存储信息池只要一台主机上添加其他节点即可
- 8、创建各种卷
- 9、关闭防火墙并安装GFS源(客户端)
- 10、修改hosts文件(客户端)
- 11、创建临时挂载点(客户端)
- 12、创建5个40M的文件(客户端)
- 13、创建的5个文件复制到不同的卷上
- 14、node1和node2查看
- 15、创建复制卷(node1)
- 16、客户端挂载(client)
- 17、node3和node4节点查看
- 18、创建分布式复制卷(node4)
- 19、客户端挂载(客户端)
- 20、查看四个结点
- 21、破坏测试
- 22、访问控制
GFS分布式文件系统
一、概览
1、GlusterFS简介
- 开源的分布式文件系统
- 由存储服务器、客户端以及NFS/Samba存储网关组成
- 无元数据服务器用
2、GlusterFS特点
- 扩展性和高性能
- 高可用性
- 全局统一-命名空间
- 弹性卷管理
- 基于标准协议
3、GlusterFS术语
- Brick
- Volume
- FUSE
- VFS
- Glusterd
4、模块化堆栈式架构
- 模块化、堆栈式的架构
- 通过对模块的组合,实现复杂的功能
5、GlusterFS工作原理
-
弹性HASH算法
-
通过HASH算法得到一个32位的整数
-
划分为N个连续的子空间,每个空间对应一个Brick
-
弹性HASH算法的优点
1、保证数据平均分布在每一个Brick中
2、解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
6、GlusterFS的卷类型
- 分布式卷
- 条带卷
- 复制卷
- 分布式条带卷
- 分布式复制卷
- 条带复制卷
- 分布式条带复制卷
7、分布式卷介绍
分布式卷
- 没有对文件进行分块处理
- 通过扩展文件属性保存HASH值
- 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
分布式卷的特点
- 文件分布在不同的服务器,不具备冗余性
- 更容易和廉价地扩展卷的大小
- 单点故障会造成数据丢失
- 依赖底层的数据保护
创建分布式卷
- 创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中
- # gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
8、条带卷介绍
条带卷
- 根据偏移量将文件分成N块(N个条带节点),转询的存储在每个Brick Server节点
- 存储大文件时,性能尤为突出
- 不具备冗余性,类似Raid0
条带卷特点
- 数据被分割成更小块分布到块服务器群中的不同条带区
- 分布减少了负载且更小的文件加速了存取的速度
- 没有数据冗余
创建条带卷
- 创建了一个名为Stripe-volume的条带卷 ,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中
- # gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
9、复制卷介绍
复制卷
- 同一文件保存一份或多分副本
- 因为要保存副本,所以磁盘利用率较低
- 若多个节点上的存储空间不-致,将按照木桶效应取最低节点的容量作为该卷的总容量
复制卷特点
- 卷中所有的服务器均保存一个完整的副本
- 卷的副本数量可由客户创建的时候决定
- 至少有两个块服务器或更多服务器
- 具备冗余性
创建复制卷
- 创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
- # gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
10、分布式条带卷
分布式条带卷
- 兼顾分布式卷和条带卷的功能
- 主要用于大文件访问处理
- 至少最少需要4台服务器
创建分布式条带卷
- 创建了名为dis stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
- # gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
11、分布式复制卷
分布式复制卷
- 兼顾分布式卷和复制卷的功能
- 用于需要冗余的情况
创建分布式复制卷
- 创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
- # gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
二、实验
1、实验准备
主机1:192.168.150.158
主机2:192.168.150.157
主机3:192.168.150.137
主机4:192.168.150.148
主机5:192.168.150.149,客户端
前四台主机,每个结点添加四块磁盘
2、关闭防火墙并修改主机名(五台主机)
iptables -F
setenforce 0
systemctl stop firewalld
hostnamectl set-hostname node1 ##下面设置五台主机的名称
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4
hostnamectl set-hostname client
3、编辑配置文件(四台主机)
vim /etc/hosts ##添加内容如下所示
192.168.150.158 node1
192.168.150.157 node2
192.168.150.137 node3
192.168.150.148 node4
scp /etc/hosts root@192.168.150.157:/etc/hosts
yes
Abc123
scp /etc/hosts root@192.168.150.137:/etc/hosts
yes
Abc123
scp /etc/hosts root@192.168.150.148:/etc/hosts
yes
Abc123
ping node1 ##拼四台主机通
ping node2
ping node3
ping node4
4、编辑脚本文件(四台机器,脚本启动后免交互自动完成)
vim disk.sh ##下面采用免交互方式一键部署自动分区和挂载shell脚本
#!/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
str=`ls /dev/sd*|grep -o 'sd[b-z]'|uniq`
arr=(${str// / })
for VAR in ${arr[@]}
do
case $VAR in
sda)
fdisk -l /dev/sda
;;
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
;;
quit)
;;
*)
echo "wrong disk,please check again";;
esac
done
chmod +x disk.sh
scp disk.sh root@192.168.150.157:/opt
scp disk.sh root@192.168.150.137:/opt
scp disk.sh root@192.168.150.148:/opt
./disk.sh
##脚本只需要启动,及完成
set -i ‘s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config
setenforce 0
getenforce
5、安装GlusterFS工具包(四台node结点,以其中一台为例)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all ##清理yum源
yum list ##获取yum源列表
yum -y install centos-release-gluster ##安装gluster
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
systemctl start glusterd.service ##启动gluster
systemctl status glusterd.service ##查看状态
6、时间同步,每台节点都需要操作
这边必须关闭防火墙
ntpdate ntp1.aliyun.com
7、添加加入存储信息池只要一台主机上添加其他节点即可
gluster peer probe node2 ##主机1上面的操作如下所示
gluster peer probe node3
gluster peer probe node4
gluster peer status ##查看所有节点的状态
8、创建各种卷
创建分布式卷,在node4上面创建,利用node1和node2上的两块磁盘创建,dis-vol为磁盘名,force表示强制
gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force #创建操作
gluster volume list #查看卷
gluster volume start dis-vol #启动
gluster volume info dis-vol #查看状态
gluster volume stop dis-vol #如果不想用可以关闭
gluster volume delete dis-vol #删除卷,删除之前必须先关闭服务
gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force #创建操作
gluster volume start dis-vol #启动
9、关闭防火墙并安装GFS源(客户端)
systemctl stop firewalld.service
setenforce 0
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源列表
yum -y install centos-release-gluster ##安装
yum -y install glusterfs glusterfs-fuse ##安装软件包
10、修改hosts文件(客户端)
vim /etc/hosts ##添加四个节点
192.168.150.158 node1
192.168.150.157 node2
192.168.150.137 node3
192.168.150.148 node4
11、创建临时挂载点(客户端)
mkdir -p /test/dis ##递归创建挂载点
mount.glusterfs node2:dis-vol /test/dis #挂载分布式node2是随意 写 只要是地地址池里面的节点都行
df -Th
12、创建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
cd /
ls
13、创建的5个文件复制到不同的卷上
cp demo* /test/dis
ls /test/dis
cd /test/dis
pwd
ll -h
14、node1和node2查看
可以看到每个文件都是完整的
cd /data/sdb1
ll -h
15、创建复制卷(node1)
gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
gluster volume list #查看卷
gluster volume start rep-vol #启动
16、客户端挂载(client)
mkdir /test/rep-vol
mount.glusterfs node2:rep-vol /test/rep-vol/
cd /
cp demo* /test/rep-vol/
17、node3和node4节点查看
cd /data/sdb1
ll -h
18、创建分布式复制卷(node4)
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
//开启
gluster volume start dis-rep
gluster volume info dis-rep
19、客户端挂载(客户端)
mkdir /test/dis-rep ##创建目前
mount.glusterfs node1:dis-rep /test/dis-rep/ ##挂载操作
df -Th ##查看挂载
cp demo* /test/dis-rep/ ##复制卷到挂载卷
20、查看四个结点
##node1节点查看
[root@node1 sdb1]# cd /data/sde1
[root@node1 sde1]# ll -h
总用量 160M
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo1.log
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo2.log
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo3.log
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo4.log
[root@node1 sde1]#
##node2节点查看
[root@node2 sdb1]# cd /data/sde1
[root@node2 sde1]# ll -h
总用量 160M
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo1.log
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo2.log
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo3.log
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo4.log
[root@node2 sde1]#
##node3节点查看
[root@node3 sdb1]# cd /data/sde1
[root@node3 sde1]# ll -h
总用量 40M
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo5.log
[root@node3 sde1]#
##node4节点查看
[root@node4 sdb1]# cd /data/sde1
[root@node4 sde1]# ll -h
总用量 40M
-rw-r--r--. 2 root root 40M 9月 14 20:05 demo5.log
[root@node4 sde1]#
21、破坏测试
关闭node2服务器观察结果
[root@client /]# cd /test/
[root@client test]# ls
dis dis-rep rep-vol
[root@client test]# ls dis #查看分布卷
demo1.log demo2.log demo3.log demo4.log #这边缺少demo05.log
[root@client test]# ls dis-rep #查看复制卷
demo1.log demo2.log demo3.log demo4.log demo5.log #这边是完整的
[root@client test]# ls rep-vol #查看分布式复制卷
demo1.log demo2.log demo3.log demo4.log demo5.log #也是完整的
[root@client test]#
22、访问控制
//仅拒绝
[root@node1 yum.repos.d]# gluster volume set dis-vol auth.reject 192.168.175.142
volume set: success
//仅允许
[root@node1 yum.repos.d] gluster volume set dis-vol auth.allow 192.168.175.142
volume set: success