Linux----GFS分布式文件系统部署

GlusterFS概述

GlusterFS简介

  • GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据

GlusterFS特点

拓展性和高性能

  • GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。Gluster弹性哈希(ElasticHash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。

高可用性

  • lusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。

全局统一命名空间

弹性卷管理

  • 数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。
  • 逻辑卷可以在所有配置服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可以适应工作负载条件变化或在线性能调优

GlusterFS术语

  • Brick:GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如’SERVER:EXPORT’
  • Volume:一组bricks的逻辑集合
  • FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接

GFS架构体系

  • 模块化、堆栈式的架构,通过对模块的组合,实现复杂的功能
  • 一个GFS群集由一台master服务器(有备份),多台chunk服务器组成,客户端,架构上比较简单
  • chunkserver:数据存储节点,文件被分割为固定大小的chunk,每个chunk被唯一标识,默认情况下chunk存储3个副本
  • chunk:每个·文件至少存储为一个chunk,每个chunk以普通的Linux文件存储,chunk尺寸大小选择是一个关键的设计参数,默认为64MB,每个chunk有全局64位唯一标识符
  • GFS文件系统是可以被多个用户同时访问,一般情况下,Application和chunkserver是可以在同一台机子上,主要的数据流量是通过Application和hunkserver之间,由于数据访问的是本地减少了Application和master之间的交互访问,减少了master的负荷量,提高了master的利用性能
  • master中保存着三类元数据(metadata):文件名和块的名字空间、从文件到块的映射、副本位置。所有metadata都放在内存中。操作日志的引入可以更加简单、可靠地更新master的信息
  • master作为GFS的控制和神经系统,副本为master的备份,chunk主要用和用户交换数据,网络中的主机瘫痪,不会对整个系统造成大的影响,替换上去的主机会自动重建数据。即使master的瘫痪,也会有shadow作为替补,并且shadow在一定的时候也会充当master来提供控制和数据交换。

GFS的卷类型

  • 分布式卷:没有对文件进行分块处理,通过扩展文件属性保存HASH值,支持的底层文件系统有ext3,ext4、ZFS、XFS
  • 条带卷:根据偏移量将文件分为N块(N个条带节点),轮询的存储在每个Brick server节点;存储大文件时,性能尤为突出;不具备冗余性,类似raid 0
  • 复制卷:同一文件保存一份或多份副本;复制模式因为要保存副本,因此磁盘利用率较低,多个节点上的存储空间不一致,那么将按照木桶效应取最低值,作为该卷的总容量
  • 分布式条带卷:兼顾分布式和条带卷的功能;主要用于大文件访问处理,至少需要4台服务器
  • 分布式复制卷:兼顾分布式卷和复制卷的功能;用于需要冗余的情况下

GFS集群部署

实验部署

  • 四台虚拟机部署集群,一台虚拟机作为客户端client测试,每台节点服务器四块磁盘

四个节点环境

角色 IP地址 系统 磁盘空间
node1 192.168.179.155 Centos7.6 20G*4
node2 192.168.179.128 Centos7.6 20G*4
node3 192.168.179.148 Centos7.6 20G*4
node4 192.168.179.162 Centos7.6 20G*4

卷分类列表

卷名称 卷类型 空间大小(GB) Brick
dis-volume 分布式卷 12 node1(/a4) node2(/a4)
stripe-volume 条带卷 10 node1(/a3) node2(/a3)
rep-volume 复制卷 5 node3(/a3) node4(/a3)
dis-stripe 分布式条带卷 12 node1(/a1) node2(/a1) node3(/a1) node4(/a1)
dis-rep 分布式复制卷 8 node1(/a2) node2(/a2) node3(/a2) node4(/a2)
  • 添加磁盘并挂载
fdisk /dev/sdb
n    创建磁盘分区
p    创建主分区
1    分区名称
然后默认回车
w保存退出

格式化磁盘
mkfs -t ext4 /dev/sdb1        主要磁盘格式

挂载磁盘
mkdir -p /a1 /a2 /a3 /a4            

[root@node1 /]# mount /dev/sdb1 /a1/
[root@node1 /]# mount /dev/sdc1 /a2/
[root@node1 /]# mount /dev/sdd1 /a3/
[root@node1 /]# mount /dev/sde1 /a4/
[root@node1 /]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        10G  5.4G  4.7G   54% /
devtmpfs       devtmpfs  474M     0  474M    0% /dev
tmpfs          tmpfs     489M     0  489M    0% /dev/shm
tmpfs          tmpfs     489M  7.1M  482M    2% /run
tmpfs          tmpfs     489M     0  489M    0% /sys/fs/cgroup
/dev/sda3      xfs       5.0G   37M  5.0G    1% /home
/dev/sda1      xfs       3.0G  158M  2.9G    6% /boot
tmpfs          tmpfs      98M   16K   98M    1% /run/user/0
/dev/sr0       iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1      ext4       20G   45M   19G    1% /a1
/dev/sdc1      ext4       20G   45M   19G    1% /a2
/dev/sdd1      ext4       20G   45M   19G    1% /a3
/dev/sde1      ext4       20G   45M   19G    1% /a4

关闭防火墙,核心功能防护,配置hosts文件

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

vim /etc/hosts
行尾添加,每个节点服务器都要配置
192.168.179.155 node1
192.168.179.128 node2
192.168.179.148 node3
192.168.179.162 node4

各节点上传镜像到/mnt/目录下,搭建本地yum仓库

[root@node1 /]# mount.cifs //192.168.31.75/OP /mnt
Password for root@//192.168.31.75/OP:  
[root@node1 /]# cd /mnt/
[root@node1 mnt]# ls
gfsrepo    镜像包

[root@node1 mnt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir bak
[root@node1 yum.repos.d]# mv C* bak/
[root@node1 yum.repos.d]# vim gfs.repo
[GLFS]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@node1 yum.repos.d]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: GLFS
[root@node1 yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
GLFS                                                            | 2.9 kB  00:00:00     
(1/3): GLFS/filelists_db                                        |  59 kB  00:00:00     
(2/3): GLFS/primary_db                                          | 109 kB  00:00:00     
(3/3): GLFS/other_db                                            |  38 kB  00:00:00     
Determining fastest mirrors
元数据缓存已建立

各节点安装GLFS软件,启动GLFS

[root@node1 mnt]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

启动服务
[root@node1 mnt]# systemctl start glusterd.service 
[root@node1 mnt]# systemctl enable glusterd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service.
[root@node1 mnt]# systemctl status glusterd.service
● glusterd.service - GlusterFS, a clustered file-system server
   Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2020-04-12 18:49:47 CST; 1min 4s ago
 Main PID: 4646 (glusterd)
   CGroup: /system.slice/glusterd.service
           └─4646 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

4月 12 18:49:47 node1 systemd[1]: Starting GlusterFS, a clustered file-system se......
4月 12 18:49:47 node1 systemd[1]: Started GlusterFS, a clustered file-system server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@node1 mnt]# 

主机node1 添加节点 查看集群

[root@node1 mnt]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 mnt]# gluster peer probe node2
peer probe: success. 
[root@node1 mnt]# gluster peer probe node3
peer probe: success. 
[root@node1 mnt]# gluster peer probe node4
peer probe: success. 

查看集群状态
[root@node1 mnt]# gluster peer status
Number of Peers: 3

Hostname: node2
Uuid: 857e5157-cedb-4452-89c1-9fcc2a36c4d4
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 447fe25d-c078-4f3b-b077-c0e0677264c9
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 8299c89a-3975-47f2-a75a-0017d21f7a15
State: Peer in Cluster (Connected)

创建分布式卷

[root@node1 yum.repos.d]# gluster volume create dis-volume node1:/a4 node2:/a4 force
volume create: dis-volume: success: please start the volume to access data

查看创建的分布式卷的信息
[root@node1 yum.repos.d]# gluster volume info dis-volume
 
Volume Name: dis-volume
Type: Distribute
Volume ID: 4baa4196-b527-46ae-9b1c-438c8a41eb57
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/a4
Brick2: node2:/a4
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

启动分布式卷
[root@node1 yum.repos.d]# gluster volume start dis-volume
volume start: dis-volume: success


创建条带卷

[root@node1 yum.repos.d]# gluster volume create stripe-volume stripe 2 transport tcp node1:/a3 node2:/a3 force
volume create: stripe-volume: success: please start the volume to access data

查看创建条带卷的信息
[root@node1 yum.repos.d]# gluster volume info stripe-volume
 
Volume Name: stripe-volume
Type: Stripe
Volume ID: 90430e6d-34c3-47bf-adc0-0ac42b63d854
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/a3
Brick2: node2:/a3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

启动创建的条带卷
[root@node1 yum.repos.d]# gluster volume start stripe-volume
volume start: stripe-volume: success

创建复制卷

[root@node1 yum.repos.d]# gluster volume create rep-volume replica 2 node3:/a3 node4:/a3 force
volume create: rep-volume: success: please start the volume to access data

查看信息
[root@node1 yum.repos.d]# gluster volume info rep-volume
 
Volume Name: rep-volume
Type: Replicate
Volume ID: 3119c58a-8a10-484d-b289-995109a8a6d0
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/a3
Brick2: node4:/a3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

启动复制卷
performance.client-io-threads: off
[root@node1 yum.repos.d]# gluster volume start rep-volume
volume start: rep-volume: success

创建分布式条带卷

de3:/a1 node4:/a1 force
volume create: dis-stripe: success: please start the volume to access data

查看信息
[root@node1 yum.repos.d]# gluster volume info dis-stripe
 
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 7ebd13cd-bc4a-4bcc-993d-866583bc802c
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/a1
Brick2: node2:/a1
Brick3: node3:/a1
Brick4: node4:/a1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

启动卷
[root@node1 yum.repos.d]# gluster volume start dis-stripe
volume start: dis-stripe: success

创建分布式复制卷

[root@node1 yum.repos.d]# gluster volume create dis-rep replica 2 node1:/a2 node2:/a2 node3:/a2 node4:/a2 force
volume create: dis-rep: success: please start the volume to access data

查看信息
gluster volume info dis-rep

启动卷
gluster volume start dis-rep

创建客户端做测试

创建yum源,安装GLFS

创建yum源、安装GLFS
vi /etc/yum.repos.d/local.repo 

[GLFS]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1

yum -y install glusterfs glusterfs-fuse

创建挂载目录

[root@client yum.repos.d]# mkdir -p /test/{dis,stripe,rep,dis_and_stripe,dis_and_rep}
[root@client yum.repos.d]# ls /test
dis  dis_and_rep  dis_and_stripe  rep  stripe

修改hosts文件

vim /etc/hosts
添加
192.168.179.162 node1
192.168.179.155 node2
192.168.179.128 node3
192.168.179.142 node4

挂载Gluster文件系统(临时挂载)

[root@client yum.repos.d]# mount -t glusterfs node1:dis-volume /test/dis
[root@client yum.repos.d]# mount -t glusterfs node1:stripe-volume /test/stripe
[root@client yum.repos.d]# mount -t glusterfs node1:rep-volume /test/rep
[root@client yum.repos.d]# mount -t glusterfs node1:dis-stripe /test/dis_and_stripe
[root@client yum.repos.d]# mount -t glusterfs node1:dis-rep /test/dis_and_rep
[root@client yum.repos.d]# df -hT
文件系统            类型            容量  已用  可用 已用% 挂载点
/dev/sda5           xfs              26G  3.4G   23G   13% /
devtmpfs            devtmpfs        898M     0  898M    0% /dev
tmpfs               tmpfs           912M     0  912M    0% /dev/shm
tmpfs               tmpfs           912M  9.0M  903M    1% /run
tmpfs               tmpfs           912M     0  912M    0% /sys/fs/cgroup
/dev/sda2           xfs             6.0G   37M  6.0G    1% /home
/dev/sda1           xfs             6.0G  174M  5.9G    3% /boot
tmpfs               tmpfs           183M  4.0K  183M    1% /run/user/42
tmpfs               tmpfs           183M   36K  183M    1% /run/user/0
node1:dis-volume    fuse.glusterfs   40G  489M   38G    2% /test/dis
node1:stripe-volume fuse.glusterfs   40G  489M   38G    2% /test/stripe
node1:rep-volume    fuse.glusterfs   20G  245M   19G    2% /test/rep
node1:dis-stripe    fuse.glusterfs   79G  978M   75G    2% /test/dis_and_stripe
node1:dis-rep       fuse.glusterfs   40G  489M   38G    2% /test/dis_and_rep

测试

在客户端创建测试文件

[root@client yum.repos.d]# mkdir /demo
[root@client yum.repos.d]# cd /demo/
[root@client demo]# ls
[root@client demo]# dd if=/dev/zero of=./demo1.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0199007 秒,2.1 GB/秒
[root@client demo]# dd if=/dev/zero of=./demo2.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.055001 秒,763 MB/秒
[root@client demo]# dd if=/dev/zero of=./demo3.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0372621 秒,1.1 GB/秒
[root@client demo]# dd if=/dev/zero of=./demo4.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0231142 秒,1.8 GB/秒
[root@client demo]# dd if=/dev/zero of=./demo5.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0241375 秒,1.7 GB/秒
[root@client demo]# ls
demo1.log  demo2.log  demo3.log  demo4.log  demo5.log

将件的测试文件复制到指定位置

将件的测试文件复制到指定位置
cp demo* /test/dis
cp demo* /test/stripe/
cp demo* /test/rep/
cp demo* /test/dis_and_stripe/
cp demo* /test/dis_and_rep/

查看分布式卷分布(node1和node2)

[root@node1 opt]# ll -h /a4
总用量 161M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo4.log

[root@node2 yum.repos.d]# ll -h /a4
总用量 41M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo5.log

查看条带卷文件分布(node1和node2)

[root@node1 opt]# ll -h /a3
总用量 101M
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo4.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo5.log

[root@node2 yum.repos.d]# ll -h /a3
总用量 101M
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo4.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo5.log



查看复制卷分布(node3和node4)

[root@node3 yum.repos.d]# ll -h /a3
总用量 201M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo4.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo5.log

[root@node4 yum.repos.d]# ll -h /a3
总用量 201M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo4.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo5.log

查看分布式条带卷(四个节点查看)

[root@node1 opt]# ll -h /a1
总用量 81M
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo4.log

[root@node2 yum.repos.d]# ll -h /a1
总用量 81M
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo4.log

[root@node3 yum.repos.d]# ll -h /a1
总用量 21M
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo5.log

[root@node4 yum.repos.d]# ll -h /a1
总用量 21M
-rw-r--r--. 2 root root 20M 4月  13 10:26 demo5.log

查看分布式复制卷(四个节点查看)

[root@node1 opt]# ll -h /a2
总用量 161M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo4.log

[root@node2 yum.repos.d]# ll -h /a2
总用量 161M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo1.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo2.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo3.log
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo4.log

[root@node3 yum.repos.d]# ll -h /a2
总用量 41M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo5.log

[root@node4 yum.repos.d]# ll -h /a2
总用量 41M
-rw-r--r--. 2 root root 40M 4月  13 10:26 demo5.log


故障模拟

node2挂机,在客户端查看保存的文件状态

分布式卷丢失一个数据
[root@client test]# ls dis
demo1.log  demo2.log  demo3.log  demo4.log 

条带卷无法查看导数据,不具备冗余性
[root@client test]# ls stripe/
[root@client test]# 

分布式条带卷无法完全查看数据,不具备冗余性
[root@client test]# ls dis_and_stripe/
demo5.log

分布式复制卷数据正常,具备冗余性
[root@client test]# ls dis_and_rep/
demo1.log  demo2.log  demo3.log  demo4.log  demo5.log 

GlusterFS其它的维护命令

查看GlusterFS卷
gluster volume list

查看所有卷的信息
gluster volume info

查看所有卷的状态
gluster volume status

停止一个卷
gluster volume stop dis-stripe

删除一个卷
gluster volume delete dis-stripe

设置卷的访问控制
设置192.168.100.0网段的所有IP地址,都能访问dis-rep卷(分布式复制卷)
gluster volume set dis-rep auth.allow 192.168.100.*
发布了78 篇原创文章 · 获赞 5 · 访问量 2559

猜你喜欢

转载自blog.csdn.net/qq397750142/article/details/105473227