gluster分布式存储总结与实践

简介:

1 理论知识

1.1 概念

1.1.1 全局统一命名空间的定义

全局统一命名空间将磁盘和内存资源集成一个单一的虚拟存储池,对上层用户屏蔽了底层的物理硬件。

1.1.2 GlusterFS的定义

GlusterFS是一套可扩展的开源群集文件系统,并能够轻松地为客户提供全局命名空间、分布式前端以及高达数百PB级别的扩展性。

1.1.3 元数据的定义

元数据,是用来描述一个给定的文件或是区块在分布式文件系统中所处的位置。

注:元数据时网络附加存储解决方案在规模化方面的致命弱点,因其所有节点都必须不断与服务器(或集群组)保持联系以延续真个群集的元数据,故增加了额外的开销,致使硬件在等待响应元数据请求过程中而效率低下。

1.2 数据定位技术

Gluster通过其自有的弹性Hash算法可计算出文件在群集中每个节点的位置,而无需联系群集内的其他节点,从而降低了追踪元数据的变化而带来额外的开销。

1.2.1 数据访问流程

- 根据输入的文件路径和文件名计算hash值

- 根据hash值在群集中选择子卷(存储服务器),进行文件定位

- 对所选择的子卷进行数据访问

1.2.2 Davies-Meyer算法

Gluster使用Davies-Meyer算法计算文件名的hash值,获得一个32位整数,算法特点如下:

- 非常好的hash分布性

- 高效率的计算

1.3 Gluster的架构

wKiom1eRw3WwZgNYAAFcG6myN7E359.png

1.3.1 存储服务器(Brick Server)

- 存储服务器主要提供基本的数据存储功能

- 最终通过统一调度策略分布在不同的存储服务器上(通过Glusterfsd来处理数据服务请求)

- 数据以原始格式直接存储于服务器本地文件系统(EXT3/EXT4/XFS/ZFS等)

1.3.2 客户端和存储网关(NFS/Samba)

wKiom1eR0QKjoFjqAAUFzRXNUgM880.png

- 客户端的Glusterfs进程负责数据卷管理、I/O调度、文件定位、数据缓存等功能

- 客户端利用FUSE(File System in User Space)模块将GlusterFS挂载到本地文件系统上

- GlusterFS存储网关提供弹性卷管理和NFS/GIFS访问代理功能

1.3.3 节点间互联

GlusterFS支持一下网络互联

- TCP/IP

- InfiniBand RDMA

1.4 Gluster的优点

1.4.1 弹性存储

Gluster群集可根据业务需求灵活地增加或缩减数据存储以及增删存储池中的资源,而不会中断系统的运行。

1.4.2 横向扩展

Gluster群集可通过增加存储节点来提升整个系统的容量或性能

1.4.3 高可靠性

Gluster群集通过自动复制与自动修复来保证数据的可靠性(利用EXT3/ZFS等磁盘文件系统日志)

1.5 Cluster的后端部署

1.5.1 兼容性

1)Cluster工作于Linux系统上层,其通过操作系统去解决与硬件的兼容性问题

2)可被部署与任何品牌的Linux系统(主要是RHEL和CentOS)

注:以上使得用户可自由选择硬件

1.5.2 数据存储方式

- 只分布型,模拟了RAID0分布情况,文件只存储于Gluster群集的单个节点,但性能表现优良。

- 分布式副本型,类似于RAID10,文件通过两个节点(镜像节点)同步使得单点故障不影响数据存取。

- 分段模型,执行上接近于标准化区块层RAID0模式,该模式将文件拆分且分布于多个节点上。

1.5.3 跨站点备份

Cluster群集允许不同群集键的多线路跨地域备份。

注:该方案用于避免群集整体故障或数据迁移、异地备份。

1.5.4 跨站点延伸

Cluster群集允许内部节点跨物理站点。

注:跨站点的带宽或延迟可能会影响群集的性能表现

1.6 客户端部署

1.6.1 支持的客户端

Cluster可通过多种不同的协议实现客户端访问,如:

- Gluster客户端

- NFS

- CIFS

- WebDAV

- HTTP

- 其他

注:只有本地的Gluster客户端才正常支持高可用性、大规模的并行文件访问或使用循环域名服务、UCARP(虚拟路由冗余协议的简化版)、CTDB(用于群集存储的Samba项目)相结合的硬件负载群衡器。

1.6.2 客户端高可用原理

- 客户端主动联系群集中的所有节点

- 客户端使用Hash算法计算出自己位于拓扑结构中的位置

- 客户端从所需求的托管节点处接收数据

- 应用程序可通过Gluster分卷获知镜像节点单点故障

1.7 Gluster群集管理工具

- Web GUI

- 命令行工具(管理非常简单便捷)

1.8 卷的类型

卷是块的集合且更多的gluster文件系统的操作发生在卷。Gluster文件系统基于需求支持不同类型的卷。某些擅长卷缩放存储大小,某些擅长提高性能和冗余。

1.8.1 Distributed Glusterfs Volume

分布式卷是Glusterfs的默认卷,当你创建一个卷如果没有指定卷的类型,将使用这个默认的选项去创建分布式卷。

wKioL1eULZ_y4XnHAAC4beaL-ac532.png

1)特点

- 文件分布在不同的块服务器(文件1可分布在块服务器1或2,但不能两台同时分布,没有冗余)

- 更容易和廉价地扩展卷的大小

2)缺点

- 单点故障会造成数据丢失

- 依赖底层的数据保护

3)创建分布式卷

1
2
3
#gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of  test -volume has been successful
Please start the volume to access data

4)显示分布式卷信息

1
2
3
#gluster volume info
Volume Name:  test -volumeType: DistributeStatus: Created
Number of Bricks: 4Transport- type : tcpBricks:Brick1: server1: /exp1Brick2 : server2: /exp2Brick3 : server3: /exp3Brick4 : server4: /exp4

1.8.2 Replicated Glusterfs Volume

复制卷将克服分布式卷的数据丢失问题,其用于可靠的数据冗余

wKiom1eUOPmzgGORAACsL8CfHUI515.png

1)特点

- 该模式在所有的块服务器被保持一个精确的副本

- 卷的副本数量可由客户创建的时候决定

- 至少由两个块服务器或3个来创建一个卷

- 一个块服务故障仍然可从其他块服务器读取数据

2)创建复制卷

1
2
3
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2
Creation of  test -volume has been successful
Please start the volume to access data

1.8.3 Distributed Replicated Glusterfs Volume

分布式复制卷文件分布在另外一个块的复制集合,该类型用于数据冗余的高可用和存储缩放

wKioL1eUOUiSUsRtAAD1095bDP8621.png

1)搭建条件

- 块服务器的数量必须是复制的倍数

- 将按块服务器的排列顺序指定相邻的块服务器成为彼此的复制

例如,8台服务器:

- 当复制副本为2时,按照服务器列表的顺序,服务器1和2作为一个复制,3和4作为一个复制,5和6作为一个复制,7和8作为一个复制

- 当复制副本为4时,按照服务器列表的顺序,服务器1/2/3/4作为一个复制,5/6/7/8作为一个复制

2)创建分布式复制卷

1
2
3
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of  test -volume has been successful
Please start the volume to access data

1.8.4 Striped Glusterfs Volume

条带卷适用于解决大文件高并发下带来的高负载和低性能问题。

wKioL1eUOaPCaZAfAACpNvdyUGo216.png

1)特点

- 数据被分割成更小块分布到块服务器群中的不同条带区

- 分布减少了负载且更小的文件加速了存取的速度

2)缺点

- 没有数据冗余

3)创建条带卷

格式:

1
gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | dma | tcp,rdma]] NEW-BRICK...

范例:

1
2
3
# gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2
Creation of  test -volume has been successful
Please start the volume to access data

1.8.5 Distributed Striped Glusterfs Volume

wKiom1eUOgyQ1GU_AADSF1tRLiY273.png

1)特点

- 相对于条带卷文件可被分割成更小的块分布到块服务器中的多个块中的不同条带区

2)创建

格式:

1
gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...

范例:

1
2
3
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of  test -volume has been successful
Please start the volume to access data

2 实践部分

2.1 环境信息

2.1.1 主机信息

GlusterH0[1-4]:

hostname=GlusterH0[1-4].cmdschool.org

ipaddress=10.168.0.19[2-5]


GlusterGW:

hostname=GlusterGW.cmdschool.org

ipaddress=10.168.0.190

2.1.2 名称解析配置

In GlusterH0[1-3] & GlusterGW :

1
2
3
4
5
echo  "10.168.0.190 GlusterGW.cmdschool.org"  >>  /etc/hosts
echo  "10.168.0.192 GlusterH01.cmdschool.org"  >>  /etc/hosts
echo  "10.168.0.193 GlusterH02.cmdschool.org"  >>  /etc/hosts
echo  "10.168.0.194 GlusterH03.cmdschool.org"  >>  /etc/hosts
echo  "10.168.0.195 GlusterH04.cmdschool.org"  >>  /etc/hosts

2.1.3 配置YUM源

In GlusterH0[1-3] & GlusterGW :

1
2
yum  install  -y https: //dl .fedoraproject.org /pub/epel/epel-release-latest-6 .noarch.rpm
curl http: //download .gluster.org /pub/gluster/glusterfs/3 .7 /LATEST/CentOS/glusterfs-epel .repo >  /etc/yum .repos.d /glusterfs-epel .repo

2.1.4 关闭防火墙

In GlusterH0[1-3] & GlusterGW :

1
2
/etc/init .d /iptables  stop
chkconfig iptables off

2.2 配置数据存储根目录

In GlusterH0[1-3] :

2.2.1 新建分区

1
fdisk  /dev/sdb

详细向导如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x089fd1ab.
Changes will remain  in  memory only,  until  you decide to write them.
After that, of course, the previous content won't be recoverable.
 
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
 
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
          switch off the mode ( command  'c' ) and change display  units  to
          sectors ( command  'u' ).
 
Command (m  for  help): n
Command action
    e   extended
    p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-26108, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108): 
Using default value 26108
 
Command (m  for  help): w
The partition table has been altered!
 
Calling ioctl() to re- read  partition table.
Syncing disks.

2.2.2 发现并校验

1
2
partx  /dev/sdb
ls  /dev/sdb *

2.2.3 创建文件系统

1
mkfs.xfs -i size=512  /dev/sdb1

2.2.4 配置挂载

1
2
3
mkdir  -p  /data/brick1
echo  '/dev/sdb1 /data/brick1 xfs defaults 1 2'  >>  /etc/fstab
mount  -a &&  mount

2.3 配置glusterfs服务端

In GlusterH0[1-3] :

2.3.1 安装yum源

1
yum  install  -y glusterfs-server

2.3.2 启动服务

1
2
/etc/init .d /glusterd  start
chkconfig glusterd on

2.4 配置信任池

In GlusterH01:

1
2
3
gluster peer probe GlusterH02.cmdschool.org
gluster peer probe GlusterH03.cmdschool.org
gluster peer probe GlusterH04.cmdschool.org

显示如成功信息:

1
peer probe: success.

2.5 配置GlusterFS卷

2.5.1 配置存储位置

In GlusterH0[1-3] :

1
mkdir  /data/brick1/gv0

2.5.2 创建Gluster卷

In GlusterH01 :

1
gluster volume create gv0 replica 2 transport tcp GlusterH01.cmdschool.org: /data/brick1/gv0  GlusterH02.cmdschool.org: /data/brick1/gv0  GlusterH03.cmdschool.org: /data/brick1/gv0  GlusterH04.cmdschool.org: /data/brick1/gv0

显示如成功信息:

1
volume create: gv0: success: please start the volume to access data

2.5.3 启动GlusterFS卷

In GlusterH01 :

1
gluster volume start gv0

显示如成功信息:

1
volume start: gv0: success

2.5.4 验证卷的信息

In GlusterH01 :

1
gluster volume info

显示如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Type: Distributed-Replicate
Volume ID: 96b06e32-deb5-487a-aa00-afd6624dcb97
Status: Started
Number of Bricks: 2 x 2 = 4
Transport- type : tcp
Bricks:
Brick1: GlusterH01.cmdschool.org: /data/brick1/gv0
Brick2: GlusterH02.cmdschool.org: /data/brick1/gv0
Brick3: GlusterH03.cmdschool.org: /data/brick1/gv0
Brick4: GlusterH04.cmdschool.org: /data/brick1/gv0
Options Reconfigured:
features. quota -deem-statfs: on
features.inode- quota : on
features. quota : on
performance.readdir-ahead: on

2.6 配置Gluster客户端

In GlusterGW :

2.6.1 安装客户端相关包

1
yum  install  -y glusterfs-fuse

2.6.2 手动挂载卷gv0到本地

1
mount  -t glusterfs GlusterH01.cmdschool.org: /gv0  /mnt

2.6.3 自动挂载卷gvo到本地

1
echo  'GlusterH01.cmdschool.org:/gv0 /mnt glusterfs defaults 0 0'  >>  /etc/fstab

2.7 测试Gluster卷

2.7.1 写入测试

In GlusterGW :

1
for  in  ` seq  -w 1 100`;  do  cp  -rp  /var/log/messages  /mnt/copy-test- $i;  done

2.7.2 写入确认

In GlusterGW :

1
ls  -lA  /mnt/  wc  -l

In GlusterH0[1-3] :

1
ls  -lA  /data/brick1/gv0/









本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1828450,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
NoSQL 关系型数据库 MySQL
分布式锁:不同实现方式实践测评
分布式锁:不同实现方式实践测评
29 0
|
7月前
|
SQL 安全 关系型数据库
Seata 解决分布式事务理论与实践(2)
Seata 解决分布式事务理论与实践(2)
Seata 解决分布式事务理论与实践(2)
|
7月前
|
数据库 Nacos 微服务
Seata 解决分布式事务理论与实践(1)
Seata 解决分布式事务理论与实践(1)
|
2天前
|
负载均衡 监控 Dubbo
Java微服务架构设计与实践:构建可伸缩的分布式系统
【4月更文挑战第2天】微服务架构响应现代业务需求,通过拆分大型应用为独立服务实现模块化和可扩展性。Java中的Spring Boot和Dubbo等框架支持服务注册、负载均衡等功能。遵循单一职责、自治性和面向接口原则,每个服务专注特定逻辑,独立部署运行。实际项目中,如电商系统,服务按功能拆分,提升可维护性和扩展性。还需考虑服务通信、数据一致性和监控等复杂话题。Java微服务架构助力构建高效、灵活的应用,应对未来挑战。
Java微服务架构设计与实践:构建可伸缩的分布式系统
|
2天前
|
存储 Java 分布式数据库
【分布式计算框架】HBase数据库编程实践
【分布式计算框架】HBase数据库编程实践
12 1
|
2天前
|
分布式计算 并行计算 Java
【分布式计算框架】 MapReduce编程初级实践
【分布式计算框架】 MapReduce编程初级实践
9 2
|
2天前
|
分布式计算 数据可视化 Hadoop
【分布式计算框架】HDFS常用操作及编程实践
【分布式计算框架】HDFS常用操作及编程实践
6 1
|
2天前
|
存储 大数据 Apache
深入理解ZooKeeper:分布式协调服务的核心与实践
【5月更文挑战第7天】ZooKeeper是Apache的分布式协调服务,确保大规模分布式系统中的数据一致性与高可用性。其特点包括强一致性、高可用性、可靠性、顺序性和实时性。使用ZooKeeper涉及安装配置、启动服务、客户端连接及执行操作。实际应用中,面临性能瓶颈、不可伸缩性和单点故障等问题,可通过水平扩展、集成其他服务和多集群备份来解决。理解ZooKeeper原理和实践,有助于构建高效分布式系统。
|
2天前
|
缓存 分布式计算 负载均衡
Java分布式系统设计与实践
Java分布式系统设计与实践
17 0
|
2天前
|
分布式计算 并行计算 数据处理
NumPy的并行与分布式计算实践
【4月更文挑战第17天】本文探讨了如何使用NumPy进行并行和分布式计算以提升效率。介绍了利用`numexpr`加速多核CPU计算,设置`NUMPY_NUM_THREADS`环境变量实现多线程,并通过Dask和PySpark进行分布式计算。Dask允许无缝集成NumPy,而PySpark则将NumPy数组转换为RDD进行并行处理。这些方法对处理大规模数据至关重要。