GlusterFS概述
GlusterFS工作原理
GlusterFS的卷类型
部署群集环境
创建卷、部署客户端、测试文件系统
其他的维护命令
GlusterFS概述
GlusterFS简介
- 开源的分布式文件系统
- 由存储服务器、客户端以及NFS/Samba存储网关组成
- 无元数据服务器
GlusterFS特点
- 扩展性和高性能
- 高可用性
- 全局统一命名空间
- 弹性卷管理
- 基于标准协议
GlusterFS术语
- Brick
- Volume
- FUSE
- VFS
- Glusterd
注释:
- Brick(存储块):指可信主机池中由主机提供的用于物理存储的专用分区,是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录
- Volume(逻辑卷)):一个逻辑卷是一组 Brick
的集合。卷是数据存储的逻辑设备,类似于LVM中的逻辑卷。大部分Gluster管理操作是在卷上进行的。 - FUSE (Filesystem inUserspace用户空间文件系统):是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码。
- VFS(virtual File System虚拟文件系统):内核空间对用户空间提供的访问磁盘的接口。
- Glusterd(后台管理进程):在存储群集中的每个节点上都要运行。
模块化堆栈式架构
- 模块化、堆栈式的架构
- 通过对模块的组合,实现复杂的功能
宏观图:
GlusterFS工作原理
GlusterFS工作流程
弹性HASH算法
- 通过HASH算法得到一个32位的整数
- 划分为N个连续的子空间,每个空间对应一个Brick
- 弹性HASH算法的优点
1、保证数据平均分布在每一个Brick中
2、解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
弹性HASH算法
弹性HASH算法
GlusterFS的卷类型
- 分布式卷
- 条带卷
- 复制卷
- 分布式条带卷
- 分布式复制卷
- 条带复制卷
- 分布式条带复制卷
分布式卷
定义
- 没有对文件进行分块处理
- 通过扩展文件属性保存HASH值
- 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
- (异地)
注释:某一磁盘损坏,不影响其他盘的文件(server1损坏,file1、file2无法读取,但不影响server2的file3)
分布式卷的特点
- 文件分布在不同的服务器,不具备冗余性
- 更容易和廉价地扩展卷的大小
- 单点故障会造成数据丢失
- 依赖底层的数据保护
创建分布式卷
- 创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中
#gluster volume create dis-volume server1:/dir1 server2:/dir2server3:/dir3
条带卷
定义
- 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
- 存储大文件时,性能尤为突出
- 不具备冗余性类似Raid0
附:RAID 0 1 5 10 简单区别
类型 | RAID0 | RAID1 | RAID5(raid0和raid的折中方案) | RAID10 (RAID0+1镜像阵列条带) |
---|---|---|---|---|
读写性能 | 最好(因并行性而提高) | 读和单个磁盘无分别,写则要写两边 | 读:RAID 5=RAID 0(相近似的数据读取速度)写:RAID 5<对单个磁盘进行写入操作(多了一个奇偶校验信息写入) | 读:RAID10=RAID0(数据跨盘抽取)写:RAID10=RAID1(每个磁盘都有一个镜像磁盘) |
安全性 | 最差(毫无安全保障)1/n | 最高(提供数据的百分之百备份) | RAID 0<RAID 5<RAID 1 | RAID10=RAID1 |
冗余类型 | 没有 | 有 镜像100%(mirror) | 奇偶校验 | 有 镜像100%(mirror) |
磁盘数量 | 2或2*n(这里至少2个) | ≥2 | ≥3 | ≥4 |
连接方式 | 串联 | 并联 | 并联 | 符合并联(先做两个RAID1然,再并联按照RAID1) |
磁盘利用率 | 最高(100%) | 差(50%) | RAID0>RAID 5>RAID 1(n-1)*10 | RAID10=RAID1(50%) |
容错率 | 没有错误修复能力 | 有 | 有 | 有 |
随机/连续写性能 | 高 | 低 | 低 | 高 |
管理方便性 | 容易 | 出现问题,及时更换问题硬盘 | ||
成本 | 最低 | 最高 | RAID 5<=""> | RAID10=RAID1 |
应用方面 | 普通个人用户,图形工作站(对性能要求高,安全率要求不高) | 适用于存放重要数据,如服务器和数据库存储等领域 | 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。(随机数据传输要求安全性高)应用领域:金融、数据库存储等 | 集合了RAID0,RAID1的优点,但是空间上由于使用镜像,而不是类似RAID5的“奇偶校验信息”,磁盘利用率一样是50% 使其特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。 |
特点
- 数据被分割成更小块分布到块服务器群中的不同条带区
- 分布减少了负载且更小的文件加速了存取的速度
- 没有数据冗余
创建条带卷
- 创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick
# gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
复制卷
定义
- 同一文件保存一份或多分副本
- 因为要保存副本,所以磁盘利用率较低
- 若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
分布式条带卷
定义
- 兼顾分布式卷和条带卷的功能
- 主要用于大文件访问处理
- 至少最少需要4台服务器
创建分布式条带卷
- 创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
# gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
分布式复制卷
定义
- 兼顾分布式卷和复制卷的功能
- 用于需要冗余的情况
创建分布式复制卷 - 创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是复制卷数的倍数(>=2)
# gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2/dir2 server3:/dir3 server4:/dir4
GlusterFS部著
群集环境
卷类型
卷名称 | 卷类型 | 空间大小 | Brick |
---|---|---|---|
dis-volume | 分布式卷 | 12G | node1(/e6)、node2(/e6) |
stripe-volume | 条带卷 | 10G | node1(/d5)、node2(/d5) |
rep-volume | 复制卷 | 5G | node3(d5)、node4(/d5) |
dis-stripe | 分布式条带卷 | 12G | node1(/b3)、node2(/b3)、node3(/b3)、node4(/b3) |
dis-rep | 分布式复制卷 | 8G | node1(/c4)、node2(/c4)、node3(/c4)、node4(/c4) |
项目
关闭所有server防火墙
[root@server5 ~]# systemctl stop firewalld
[root@server5 ~]# setenforce 0
服务器及客户端添加映射
[root@server1 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
20.0.0.10 node1 //添加此条及以下
20.0.0.11 node2
20.0.0.12 node3
20.0.0.13 node4
在4台服务器上添加gfsrepo目录
需要将压缩包解压放进root目录
编写yum
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls -lh
总用量 28K
-rw-r--r--. 1 root root 1.7K 8月 30 2017 CentOS-Base.repo
-rw-r--r--. 1 root root 1.3K 8月 30 2017 CentOS-CR.repo
-rw-r--r--. 1 root root 649 8月 30 2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 8月 30 2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 8月 30 2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1.3K 8月 30 2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3.8K 8月 30 2017 CentOS-Vault.repo
[root@server1 yum.repos.d]# mkdir backup //将其中的yum存入backup目录
[root@server1 yum.repos.d]# mv C* backup
[root@server1 yum.repos.d]# ls -lh
总用量 0
drwxr-xr-x. 2 root root 187 12月 31 13:45 backup
[root@server1 yum.repos.d]# vi gfs.repo
[gfs]
name=gfs
baseurl=file:///root/gfsrepo
gpgcheck=0
enabled=1
安装依赖软件
[root@server1 yum.repos.d]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: gfs
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
[root@server1 yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
gfs | 2.9 kB 00:00:00
(1/3): gfs/filelists_db | 62 kB 00:00:00
(2/3): gfs/primary_db | 92 kB 00:00:00
(3/3): gfs/other_db | 46 kB 00:00:00
Determining fastest mirrors
元数据缓存已建立
[root@server1 yum.repos.d]# [root@server1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdm
设置时间同步
[root@server1 ~]# ntpdate ntp1.aliyum.com
31 Dec 14:13:41 ntpdate[56334]: no server suitable for synchronization found
[root@server1 ~]# crontab -e
*/30 * * * * /usr/sbin/ntpdate.ntp1.aliyun.com
在4台server上每台添加4个5G的磁盘,之后重启
查看服务器磁盘情况,并格式化磁盘
[root@server1 ~]# fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a6a60
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sde:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdd:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-root:54.8 GB, 54752444416 字节,106938368 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:3221 MB, 3221225472 字节,6291456 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-home:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@server1 ~]# mkfs.ext4 /dev/sdb
[root@server1 ~]# mkfs.ext4 /dev/sdc
[root@server1 ~]# mkfs.ext4 /dev/sdd
[root@server1 ~]# mkfs.ext4 /dev/sde
创建挂载点,并挂载
[root@server1 ~]# mkdir {/b1,/c1,/d1,/e1}
[root@server1 ~]# mount /dev/sdb /b1
[root@server1 ~]# mount /dev/sdc /c1
[root@server1 ~]# mount /dev/sdd /d1
[root@server1 ~]# mount /dev/sde /e1
查看挂载
[root@server1 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 51G 4.5G 47G 9% /
devtmpfs devtmpfs 897M 0 897M 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/sr0 iso9660 4.3G 4.3G 0 100% /mnt
/dev/mapper/centos-home xfs 5.0G 33M 5.0G 1% /home
/dev/sda1 xfs 1014M 179M 836M 18% /boot
tmpfs tmpfs 183M 4.0K 183M 1% /run/user/42
tmpfs tmpfs 183M 24K 183M 1% /run/user/0
/dev/sdb ext4 4.8G 20M 4.6G 1% /b1
/dev/sdc ext4 4.8G 20M 4.6G 1% /c1
/dev/sdd ext4 4.8G 20M 4.6G 1% /d1
/dev/sde ext4 4.8G 20M 4.6G 1% /e1
开启服务,并查看状态
[root@server1 ~]# systemctl start glusterd.service
[root@server1 ~]# systemctl enable glusterd.service
[root@server1 ~]# systemctl status glusterd.service
在server1上配置信任
[root@server1 ~]# gluster peer probe node2
peer probe: success.
[root@server1 ~]# gluster peer probe node3
peer probe: success.
[root@server1 ~]# gluster peer probe node4
peer probe: success.
查看卷状态
[root@server1 ~]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: cd6746c2-cd76-4247-9ee0-9ae59d12d85a
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 5f700a16-5625-47cf-a3fd-29aaa98f81b5
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 8e9e5b1c-bae5-4e16-91ed-92a6be8dcda5
State: Peer in Cluster (Connected)
创建分布式卷
[root@server1 ~]# gluster volume create dis-vol node1:/b1 node2:/b1 force
volume create: dis-vol: success: please start the volume to access data
查看状态信息
[root@server1 ~]# gluster volume info dis-vol
Volume Name: dis-vol
Type: Distribute
Volume ID: dbed853c-1107-409e-aba5-20ae4e5049f5
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/b1
Brick2: node2:/b1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
开启分布式卷
[root@server1 ~]# gluster volume start dis-vol
volume start: dis-vol: success
查看状态信息
[root@server1 ~]# gluster volume status dis-vol
Status of volume: dis-vol
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/b1 49152 0 Y 14933
Brick node2:/b1 49152 0 Y 14600
Task Status of Volume dis-vol
------------------------------------------------------------------------------
There are no active volume tasks
创建条带卷
[root@server1 ~]# gluster volume create stripe-vol stripe 2 node1:/c1 node2:/c1 force
volume create: stripe-vol: success: please start the volume to access data
您在 /var/spool/mail/root 中有新邮件
查看状态
[root@server1 ~]# gluster volume info stripe-vol
Volume Name: stripe-vol
Type: Stripe
Volume ID: 443f046c-8625-4cac-9331-3d2082750235
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/c1
Brick2: node2:/c1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
开启条带卷
[root@server1 ~]# gluster volume start stripe-vol
volume start: stripe-vol: success
查看卷状态
[root@server1 ~]# gluster volume status stripe-vol
Status of volume: stripe-vol
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/c1 49153 0 Y 16048
Brick node2:/c1 49153 0 Y 15345
Task Status of Volume stripe-vol
------------------------------------------------------------------------------
There are no active volume tasks
创建复制卷
[root@server1 ~]# gluster volume create rep-vol replica 2 node3:/b1 node4:/b1 force
volume create: rep-vol: success: please start the volume to access data
查看状态信息
[root@server1 ~]# gluster volume info rep-vol
Volume Name: rep-vol
Type: Replicate
Volume ID: f58157b6-bb34-4187-bc6e-78d9d5c62920
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/b1
Brick2: node4:/b1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
开启复制卷
[root@server1 ~]# gluster volume start rep-vol
volume start: rep-vol: success
查看卷状态
[root@server1 ~]# gluster volume status rep-vol
Status of volume: rep-vol
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node3:/b1 49152 0 Y 42976
Brick node4:/b1 49152 0 Y 54122
Self-heal Daemon on localhost N/A N/A Y 16360
Self-heal Daemon on node2 N/A N/A Y 15422
Self-heal Daemon on node3 N/A N/A Y 42996
Self-heal Daemon on node4 N/A N/A Y 54142
Task Status of Volume rep-vol
------------------------------------------------------------------------------
There are no active volume tasks
创建分布式条带卷
[root@server1 ~]# gluster volume create dis-stripe stripe 2 node1:/d1 node2:/d1 node3:/d1 node4:/d1 force
volume create: dis-stripe: success: please start the volume to access data
查看状态信息
[root@server1 ~]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 23bced16-c301-4d4d-a2da-1dabf17dca02
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/d1
Brick2: node2:/d1
Brick3: node3:/d1
Brick4: node4:/d1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
启动分布式条带卷
[root@server1 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
查看卷状态
[root@server1 ~]# gluster volume status dis-stripe
Status of volume: dis-stripe
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/d1 49154 0 Y 16676
Brick node2:/d1 49154 0 Y 15487
Brick node3:/d1 49153 0 Y 43060
Brick node4:/d1 49153 0 Y 54206
Task Status of Volume dis-stripe
------------------------------------------------------------------------------
There are no active volume tasks
创建分布式复制卷
[root@server1 ~]# gluster volume create dis-repl replica 2 node1:/e1 node2:/e1 node3:/e1 node4:/e1 force
volume create: dis-repl: success: please start the volume to access data
查看卷信息
[root@server1 ~]# gluster volume info dis-repl
Volume Name: dis-repl
Type: Distributed-Replicate
Volume ID: 41806f27-2cdb-4764-9afc-5aac4d9bec5c
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/e1
Brick2: node2:/e1
Brick3: node3:/e1
Brick4: node4:/e1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
启动分布式复制卷
[root@server1 ~]# gluster volume start dis-repl
volume start: dis-repl: success
查看状态信息
[root@server1 ~]# gluster volume status dis-repl
Status of volume: dis-repl
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/e1 49155 0 Y 17138
Brick node2:/e1 49155 0 Y 15555
Brick node3:/e1 49154 0 Y 43128
Brick node4:/e1 49154 0 Y 54274
Self-heal Daemon on localhost N/A N/A Y 17158
Self-heal Daemon on node3 N/A N/A Y 43148
Self-heal Daemon on node2 N/A N/A Y 15576
Self-heal Daemon on node4 N/A N/A Y 54294
Task Status of Volume dis-repl
------------------------------------------------------------------------------
There are no active volume tasks
查看创建的卷的列表
[root@server1 ~]# gluster volume list
dis-repl
dis-stripe
dis-vol
rep-vol
stripe-vol
转到客户机
安装依赖软件
[root@server5 ~]# yum -y install glusterfs glusterfs-fuse
创建挂载点
[root@server5 ~]# mkdir /dis
[root@server5 ~]# mkdir /strip
[root@server5 ~]# mkdir /replica
[root@server5 ~]# mkdir /dis-replica
[root@server5 ~]# mkdir /dis-strip
添加挂载点
[root@server6 ~]# mount.glusterfs node1:dis-vol /dis
[root@server6 ~]# mount.glusterfs node1:rep-vol /replica
[root@server6 ~]# mount.glusterfs node1:dis-stripe /dis-strip
[root@server6 ~]# mount.glusterfs node1:stripe-vol /strip
[root@server6 ~]# mount.glusterfs node1:dis-repl /dis-replica
测试
创建5个40M文件
[root@server6 ~]# dd if=/dev/zero of=/demo1.log bs=40M count=1
记录了1+0 的读入
记录了1+0 的写出
41943040字节(42 MB)已复制,0.0768564 秒,546 MB/秒
[root@server6 ~]# dd if=/dev/zero of=/demo2.log bs=40M count=1
记录了1+0 的读入
记录了1+0 的写出
41943040字节(42 MB)已复制,0.0586581 秒,715 MB/秒
[root@server6 ~]# dd if=/dev/zero of=/demo3.log bs=40M count=1
记录了1+0 的读入
记录了1+0 的写出
41943040字节(42 MB)已复制,0.0573291 秒,732 MB/秒
[root@server6 ~]# dd if=/dev/zero of=/demo4.log bs=40M count=1
记录了1+0 的读入
记录了1+0 的写出
41943040字节(42 MB)已复制,0.0550687 秒,762 MB/秒
[root@server6 ~]# dd if=/dev/zero of=/demo5.log bs=40M count=1
记录了1+0 的读入
记录了1+0 的写出
41943040字节(42 MB)已复制,0.0729017 秒,575 MB/秒
复制5个文件到不同卷上
[root@server6 /]# cp demo* /dis
[root@server6 /]# cp demo* /dis-strip/
[root@server6 /]# cp demo* /dis-replica/
[root@server6 /]# cp demo* /replica/
[root@server6 /]# cp demo* /strip/
查看分布式卷
在server1上
[root@server1 ~]# cd /b1/
[root@server1 b1]# ls -lh
总用量 161M
-rw-r--r-- 2 root root 40M 1月 4 09:16 demo1.log
-rw-r--r-- 2 root root 40M 1月 4 09:16 demo2.log
-rw-r--r-- 2 root root 40M 1月 4 09:16 demo3.log
-rw-r--r-- 2 root root 40M 1月 4 09:16 demo4.log
drwx------ 2 root root 16K 12月 31 14:33 lost+found
以下卷就不一一展示了,在各个server上查看即可