任务背景
实现了远程的存储共享(NAS或SAN)后, 公司业务发展迅速, 存储空间还需要增大。使用NAS或SAN都不方便扩容,NAS可以增加新的挂载目录, SAN可以增加新的硬盘,但我们希望直接在原来挂载的业务目录上实现在线扩容,数据体量越来越大, 这个时候我们就可以考虑使用**分布式存储**了。
任务要求
1, 将远程多台服务器的空闲存储空间整合,组合成一个大存储给应用服务器(如apache,nginx,tomcat,mysql等)使用
2, 考虑高可用与负载均衡原则,并能实现在线扩容
任务拆解
1, 了解分布式存储的概念与原理
2, 选择对应的分布式存储软件
3, 准备多台有空闲空间的服务器做存储服务器
4, 搭建集群将多台存储服务器组合
5, 将组合的大存储划分成卷共享给应用服务器使用
6, 实现在线扩容
学习目标
- 能够说出分布式存储的优点
- 能够成功搭建glusterfs集群
- 掌握常见的glusterfs卷模式的创建与使用
- 能够对特定的glusterfs卷实现在线裁减或扩容
分布式存储介绍
我们已经学习了NAS是远程通过网络共享目录, SAN是远程通过网络共享块设备。
那么分布式存储你可以看作**拥有多台存储服务器连接起来的存储导出端**。把这多台存储服务器的存储合起来做成一个整体再通过网络进行远程共享,共享的方式有目录(文件存储),块设备(块存储),对象网关或者说一个程序接口(对象存储)。
常见的分布式存储开源软件有:GlusterFS,Ceph,HDFS,MooseFS,FastDFS等。
分布式存储一般都有以下几个优点:
- 扩容方便,轻松达到PB级别或以上
- 提升读写性能(LB)或数据高可用(HA)
- 避免单个节点故障导致整个架构问题
- 价格相对便宜,大量的廉价设备就可以组成,比光纤SAN这种便宜很多
Glusterfs
glusterfs介绍
glusterfs是一个免费,开源的分布式文件系统(它属于文件存储类型)。
https://www.gluster.org/
raid级别回顾(拓展)
raid级别有很多种,下面主要介绍常用的几种:
raid0 读写性能佳,坏了其中一块,数据挂掉,可靠性低(stripe条带化),磁盘利用率100%
raid1 镜像备份(mirror),同一份数据完整的保存在多个磁盘上,写的性能不佳,可靠性高,读的性能还行,磁盘利用率50%
raid10 先做raid 1 再做raid 0
raid5 由多块磁盘做raid 5,磁盘利用率为n-1/n, 其中一块放校验数据,允许坏一块盘,数据可以利用校验值来恢复
raid6 在raid5的基础上再加一块校验盘,进一步提高数据可靠性
生产环境中最常用的为raid5和raid10
常见卷的模式
卷模式 | 描述 |
---|---|
Replicated | 复制卷,类似raid1 |
Striped(了解,新版本将会放弃此模式及其它相关的组合模式) | 条带卷,类似raid0 |
Distributed | 分布卷 |
Distribute Replicated | 分布与复制组合 |
Dispersed | 纠删卷,类似raid5,raid6 |
glusterfs看作是一个将多台服务器存储空间组合到一起,再划分出不同类型的文件存储卷给导入端使用。
Replicated卷
Striped卷
Distributed卷
Distribute Replicated卷
其它模式请参考官网: https://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/
glusterfs集群
实验准备:
- **所有节点(包括client)**静态IP(NAT网络,能上外网)
- **所有节点(包括client)**都配置主机名及其主机名互相绑定(这次我这里做了别名,方便使用)
10.1.1.11 vm1.cluster.com storage1
10.1.1.12 vm2.cluster.com storage2
10.1.1.13 vm3.cluster.com storage3
10.1.1.14 vm4.cluster.com storage4
10.1.1.15 vm5.cluster.com client
-
**所有节点(包括client)**关闭防火墙,selinux
# systemctl stop firewalld # systemctl disable firewalld # iptables -F
-
**所有节点(包括client)**时间同步
-
**所有节点(包括client)**配置好yum(需要加上glusterfs官方yum源)
# vim /etc/yum.repos.d/glusterfs.repo
[glusterfs]
name=glusterfs
baseurl=https://buildlogs.centos.org/centos/7/storage/x86_64/gluster-4.1/
enabled=1
gpgcheck=0
yum源说明:
- 可按照以上yum路径去查找
glusterfs5
或glusterfs6
版本的yum源路径(目前我们使用4.1版) - 如果网速太慢,可下载我共享的软件做本地yum源安装
实验步骤:
- 在所有storage服务器上安装相关软件包,并启动服务
- 所有storage服务器建立连接, 成为一个集群
- 所有storage服务器准备存储目录
- 创建存储卷
- 启动存储卷
- client安装挂载软件
- client挂载使用
实验过程:
第1步, 在所有storage服务器上(不包括client)安装glusterfs-server软件包,并启动服务
下面的命令所有存储服务器都要做
# yum install glusterfs-server
# systemctl start glusterd
# systemctl enable glusterd
# systemctl status glusterd
分布式集群一般有两种架构:
- 有中心节点的 中心节点一般指管理节点,后面大部分分布式集群架构都属于这一种
- 无中心节点的 所有节点又管理又做事,glusterfs属于这一种
第2步, 所有storage服务器建立连接,成为一个集群
4个storage服务器建立连接不用两两连接,只需要找其中1个,连接另外3个各一次就OK了
下面我就在storage1上操作
storage1# gluster peer probe storage2
storage1# gluster peer probe storage3
storage1# gluster peer probe storage4 --这里使用ip,主机名,主机名别名都可以
然后在所有存储上都可以使用下面命令来验证检查
# gluster peer status
注意:
如果这一步建立连接有问题(一般问题会出现在网络连接,防火墙,selinux,主机名绑定等);
如果想重做这一步,可以使用gluster peer detach xxxxx [force] 来断开连接,重新做
第3步, 所有storage服务器准备存储目录(可以用单独的分区,也可以使用根分区)
因为我让大家准备的storage服务器没有准备额外的硬盘,所以这里用根分区来做实验
但生产环境肯定是不建议数据盘和系统盘在一起的
# mkdir -p /data/gv0
第4步, 创建存储卷(在任意一个storage服务器上做)
注意: 改变的操作(create,delete,start,stop)等只需要在任意一个storage服务器上操作,查看的操作(info)等可以在所有storage服务器上操作
下面命令我是在storage1上操作的
因为在根分区创建所以需要force参数强制
replica 4表示是在4台上做复制模式(类似raid1)
storage1# gluster volume create gv0 replica 4 storage1:/data/gv0/ storage2:/data/gv0/ storage3:/data/gv0/ storage4:/data/gv0/ force
volume create: gv0: success: please start the volume to access data
所有storage服务器上都可以查看
# gluster volume info gv0
Volume Name: gv0
Type: Replicate 模式为replicate模式
Volume ID: 328d3d55-4506-4c45-a38f-f8748bdf1da6
Status: Created 这里状态为created,表示刚创建,还未启动,需要启动才能使用
Snapshot Count: 0
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: storage1:/data/gv0
Brick2: storage2:/data/gv0
Brick3: storage3:/data/gv0
Brick4: storage4:/data/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
第5步, 启动存储卷
storage1# gluster volume start gv0
# gluster volume info gv0
Volume Name: gv0
Type: Replicate
Volume ID: 328d3d55-4506-4c45-a38f-f8748bdf1da6
Status: Started 现在看到状态变为started,那么就表示可以被客户端挂载使用了
Snapshot Count: 0
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: storage1:/data/gv0
Brick2: storage2:/data/gv0
Brick3: storage3:/data/gv0
Brick4: storage4:/data/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
第6步, client安装软件
客户端上操作
client# yum install glusterfs glusterfs-fuse -y
说明:
fuse(Filesystem in Userspace): 用户空间文件系统,是一个客户端挂载远程文件存储的模块
第7步, client挂载使用
**注意