关于程序员:分布式存储-GlusterFS-介绍与部署

7次阅读

共计 6752 个字符,预计需要花费 17 分钟才能阅读完成。

1.glusterfs 概述

GlusterFS 零碎是一个可扩大的网络文件系统,相比其余分布式文件系统,GlusterFS 具备高扩展性、高可用性、高性能、可横向扩大等特点,并且其没有元数据服务器的设计,让整个服务没有单点故障的隐患。 当客户端拜访 GlusterFS 存储时,首先程序通过拜访挂载点的模式读写数据,对于用户和程序而言,集群文件系统是通明的,用户和程序基本感觉不到文件系统是本地还是在近程服务器上。读写操作将会被交给 VFS(Virtual File System) 来解决,VFS 会将申请交给 FUSE 内核模块,而 FUSE 又会通过设施 /dev/fuse 将数据交给 GlusterFS Client。最初通过 GlusterFS Client 的计算,并最终通过网络将申请或数据发送到 GlusterFS Server 上。

2.glusterfs 罕用分布式简介

分布式卷也看成为哈希卷,多个文件以文件为单位在多个 brick 上,应用哈希算法随机存储。

  • 利用场景:大量小文件
  • 长处:读 / 写性能好
  • 毛病:如果存储或服务器故障,该 brick 上的数据将失落
  • 不指定卷类型,默认是分布式卷
  • brick 数量没有限度

创立分布式卷命令:

gluster volume create volume_name node1:/data/br1 node2:/data/br1

复制卷是将多个文件在多个 brick 上复制多份,brick 的数目要与须要复制的份数相等,倡议 brick 散布在不同的服务器上。

  • 利用场景:对可靠性高和读写性能要求高的场景
  • 长处:读写性能好
  • 毛病:写性能差
  • replica = brick

创立复制卷:

gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1

replica:文件保留的份数

条带卷是将文件分成条带,寄存在多个 brick 上,默认条带大小 128k

  • 利用场景:大文件
  • 长处:实用于大文件存储
  • 毛病:可靠性低,brick 故障会导致数据全副失落
  • stripe = birck
  • stripe:条带个数 创立条带卷:
gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1

分布式条带卷是将多个文件在多个节点哈希存储,每个文件再多分条带在多个 brick 上存储

  • 利用场景:读 / 写性能高的大量大文件场景
  • 长处:高并发反对
  • 毛病:没有冗余,可靠性差
  • brick 数是 stripe 的倍数

创立分布式条带卷:

gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

分布式复制卷是将多个文件在多个节点上哈希存储,在多个 brick 复制多份存储。

  • 利用场景:大量文件读和可靠性要求高的场景
  • 长处:高牢靠,读性能高
  • 毛病:就义存储空间,写性能差
  • brick 数量是 replica 的倍数
gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

条带式复制卷是将一个大文件存储的时候划分条带,并且保留多份

  • 利用场景:超大文件,并且对可靠性要求高
  • 长处:大文件存储,可靠性高
  • 毛病:就义空间写性能差
  • brick 数量是 stripe、replica 的乘积
gluster volume create volume_name stripe 2 replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

3.glusterfs 环境

日志存储集群采纳的是分布式复制卷,将多个文件在多个节点上哈希存储,在多个 brick 复制多份存储。共有五台服务器,磁盘空间共有 90T,那么采纳这种分布式复制卷的形式,只有 45T 磁盘空间可用。并且须要采纳分布式复制卷形式须要要有单数的 brick,所以现采纳一台服务器上创立两个 brick,如上图所示,10.102.23.4:/data_01/node 和 10.102.23.44:/data_01/node 是备份关系,其余节点均是如此,10.102.23.44 作为日志存储集群的治理节点,nfs-ganesha 服务只须要装置在管制节点,客户端则能够通过 nfs 形式挂载。

# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/sysconfig/selinux #敞开 selinux
# iptables -F #革除防火墙规定

装置 glusterfs(01-05)

# yum install userspace-rcu-*
# yum install python2-gluster-3.13.2-2.el7.x86_64.rpm
# yum install tcmu-runner-* libtcmu-*
# yum install gluster*
# yum install nfs-ganesha-*
#这个 nfs 只有须要对外挂载的哪台服务器须要装置(10.102.23.44)# systemctl start glusterd.service #所有服务器启动 glusterd
# systemctl start rpcbind
# systemctl enable glusterd.service
# systemctl enable rpcbind
# ss -lnt #查问端口是否有为 24007,如果有则服务失常运行

创立集群 (在 10.102.23.44 节点上执行一下操作,向集群中增加节点):

[root@admin-node ~]# gluster peer probe 10.102.23.44
peer probe: success. [root@admin-node ~]# gluster peer probe 10.102.23.45
peer probe: success.
[root@admin-node ~]# gluster peer probe 10.102.23.46
peer probe: success.
[root@admin-node ~]# gluster peer probe 10.102.23.47
peer probe: success.
[root@admin-node ~]# gluster peer probe 10.102.23.4
peer probe: success.

查看虚拟机信赖状态增加后果

[root@admin-node ~]# gluster peer status
Number of Peers: 4
Hostname: 10.102.23.46
Uuid: 31b5ecd4-c49c-4fa7-8757-c01604ffcc7e
State: Peer in Cluster (Connected)
Hostname: 10.102.23.47
Uuid: 38a7fda9-ad4a-441a-b28f-a396b09606af
State: Peer in Cluster (Connected)
Hostname: 10.102.23.45
Uuid: 9e3cfb56-1ed4-4daf-9d20-ad4bf2cefb37
State: Peer in Cluster (Connected)
Hostname: 10.102.23.4
Uuid: 1836ae9a-eca5-444f-bb9c-20f032247bcb
State: Peer in Cluster (Connected)

在所有节点进行以下磁盘操作:

[root@admin-node ~]# fdisk /dev/sdb

创立卷组:

[root@admin-node ~]# vgcreate vg_data01 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
[root@admin-node ~]# vgcreate vg_data02 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1

查看卷组:

[root@admin-node ~]# vgdisplay

创立逻辑卷:

[root@admin-node ~]# lvcreate -n lv_data01 -L 9TB vg_data01
[root@admin-node ~]# lvcreate -n lv_data02 -L 9TB vg_data02

查看逻辑卷:

[root@admin-node ~]# lvdisplay

格式化逻辑卷:

[root@admin-node ~]# mkfs.xfs /dev/vg_data01/lv_data01
[root@admin-node ~]# mkfs.xfs /dev/vg_data02/lv_data02

挂载逻辑卷:

[root@admin-node ~]# mkdir -p /data_01/node /data_02/node
[root@admin-node ~]# vim /etc/fstab
/dev/vg_data01/lv_data01 /data_01 xfs defaults 0 0
/dev/vg_data02/lv_data02 /data_02 xfs defaults 0 0
[root@admin-node ~]# mount /data_01
[root@admin-node ~]# mount /data_02

分布式复制模式(组合型), 起码须要 4 台服务器能力创立。

创立卷:

[root@admin-node ~]# gluster volume create data-volume replica 2   10.102.23.4:/data_01/node  10.102.23.44:/data_01/node  10.102.23.44:/data_02/node 10.102.23.45:/data_02/node  10.102.23.45:/data_01/node  10.102.23.4:/data_02/node 10.102.23.46:/data_01/node  10.102.23.47:/data_01/node  10.102.23.46:/data_02/node  10.102.23.47:/data_02/node force

启动创立的卷:

[root@admin-node ~]# gluster volume start data-volume
volume start: data-volume: success 所有机器都能够查看:
[root@admin-node ~]# gluster volume info

查看分布式卷的状态:

[root@admin-node ~]# gluster volume status

基于以上 glusterfs 部署,glusterfs 分布式复制卷曾经实现

4.nfs-ganesha 环境搭建

glusterfs 服务自身也是反对 nfs 挂载,因为现有生产环境存在多个网段,并且有些网段与 glusterfs 存储服务器网段是不通,所以须要通过 nginx 代理 nfs 来实现 nfs 挂载。Glusterfs 服务只是反对 nfs3 版本的挂载,在通过 nginx 代理方面也不是那么不便,端口繁多,所以 glusterfs 与 NFSs-Ganesha 是完满组合。NFSs-Ganesha 通过 FSAL(文件系统形象层) 将一个后端存储形象成一个对立的 API,提供给 Ganesha 服务端,而后通过 NFS 协定将其挂载到客户端。在客户端上对挂进去的空间进行操作。并且 NFSs-Ganesha 能够指定 nfs 的版本。

在治理节点 10.102.23.44 上装置 nfs-ganesha,在一开始部署 glusterfs 已在治理节点上装置,这里就不反复阐明了,间接简要阐明配置文件

[root@admin-node ~]# vim /etc/ganesha/ganesha.conf
.....................................
EXPORT
{## Export Id (mandatory, each EXPORT must have a unique Export_Id)
#Export_Id = 12345;
Export_Id = 10;
## Exported path (mandatory)
#Path = /nonexistant;
Path = /data01;
## Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
#Pseudo = /nonexistant;
Pseudo = /data01; #客户端通过 nfs 挂载的根目录
## Restrict the protocols that may use this export. This cannot allow
## access that is denied in NFS_CORE_PARAM.
#Protocols = 3,4;
Protocols = 4; #客户端 nfs 挂载的版本
## Access type for clients. Default is None, so some access must be
## given. It can be here, in the EXPORT_DEFAULTS, or in a CLIENT block
#Access_Type = RW;
Access_Type = RW; #权限问题
## Whether to squash various users.
#Squash = root_squash;
Squash = No_root_squash; #root 降级
## Allowed security types for this export
#Sectype = sys,krb5,krb5i,krb5p;
Sectype = sys; #类型
## Exporting FSAL
#FSAL {
#Name = VFS;
#}
FSAL {
Name = GLUSTER;
hostname = "10.102.23.44"; #glusterfs 治理节点 IP
volume = "data-volume"; #glusterfs 卷名
}
}
...................
[root@admin-node ~]# systemctl restart nfs-ganesha
[root@admin-node ~]# systemctl enable nfs-ganesha
[root@admin-node ~]# showmount -e 10.102.23.44
Export list for 10.102.23.44: #nfs-ganesha 搭建胜利

5. 客户端挂载

以 glusterfs 形式挂载:

[root@admin-node ~]# mkdir /logs
[root@admin-node ~]# mount -t glusterfs 10.102.23.44:data-volume /logs/

以 NFS 形式进行挂载:

在客户端 (10.1.99 段):

[root@moban-00 ~]#yum -y install nfs-utils rpcbind
[root@moban-00 ~]# systemctl start rpcbind
[root@moban-00 ~]# systemctl enable rpcbind
[root@moban-00 ~]# mkdir /home/dwweiyinwen/logs/
[root@moban-00 ~]# mount -t nfs -o vers=4,proto=tcp,port=2049 10.102.23.44:/data01 /home/dwweiyinwen/logs/

原文:https://www.jianshu.com/p/4b7…

正文完
 0