GFS分布式文件系统

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、实验准备

主机1192.168.150.158

主机2192.168.150.157

主机3192.168.150.137

主机4192.168.150.148

主机5192.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

mark

mark

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

mark

mark

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值