公众号关注 「开源Linux」

回复「学习」,有我为您特别筛选的学习资料~

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

创建条带卷:

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

stripe:条带个数

分布式条带卷是将多个文件在多个节点哈希存储,每个文件再多分条带在多个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/4b7d7a262980


关注「开源Linux」加星标,提升IT技能

分布式存储之GlusterFS的更多相关文章

  1. 【分布式存储】GlusterFS failing to mount at boot with Ubuntu 14.04

    GlusterFS failing to mount at boot with Ubuntu 14.04   Previously I asked about mounting GlusterFS a ...

  2. 【分布式存储】Glusterfs快速搭建

    目录 环境准备 步骤1,保证至少有三台服务器 步骤2,格式化和配置硬盘 步骤3,安装GlusterFS 步骤4,配置防火墙 步骤5,配置 trusted pool 步骤6,设置GlusterFS卷 步 ...

  3. 分布式存储---FastDFS+GlusterFS

    一. 存储概念 1.块存储的多种实现: 块存储: 就好比硬盘一样, 直接挂在到主机,一般用于主机的直接存储空间和数据库应用的存储 1.磁盘+LVS: 单机硬盘纯存储 2.DAS(DELL MD系列): ...

  4. kubernetes入门(06)kubernetes的核心概念(3)

    一.API 对象 API对象是K8s集群中的管理操作单元.K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作.例如副本集Replica Set对应的A ...

  5. kubernetes 存储卷

    kubernetes 存储卷    数据卷用于实现容器持久化数据,Kubernetes对于数据卷重新定义,提供了丰富强大的功能.在Kubernetes系统中,当Pod重建的时候,数据卷会丢失,Kube ...

  6. Kubernetes基本功能

    说明 目前kubernetes的资料介绍很多也很深刻,本文只是做一个针对自己学习k8s过程的介绍,仅仅是学习笔记的记录. 一.基本使用 1. 命令行 集群信息 Namespace 信息 Control ...

  7. Kubernetes系列02—Kubernetes设计架构和设计理念

    本文收录在容器技术学习系列文章总目录 1.Kubernetes设计架构 Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分 ...

  8. Kubernetes之存储

    存储卷概述 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态) ...

  9. K8s存储卷、pv和pvc的使用

    emptyDIR 临时目录 hostPath :使用主机的路径 网络存储: 传统的设备存储:NAS,SAN 分布式存储:glusterfs,rbd,cephfs 云存储:EBS,Azure,阿里云的 ...

随机推荐

  1. Could not find the main class

    最近开发了一个短信报警的服务,打成程序包之后,再本地windows启动(start.bat)没有问题,但是发到生产环境,报如下错: Could not find the main class 莫名其妙 ...

  2. Hadoop全分布式

    1.安装jdk      Linux下安装jdk-7u67-linux-x64.rpm 2.免密登录   ssl免密登录(centos6) 3.同步时间:date -s "2020-04-0 ...

  3. docker-compose安装和使用

    安装:https://my.oschina.net/thinwonton/blog/2985886 docker-compose和Dockerfile结合使用,创建django项目和postgres数 ...

  4. Vue手动集成less预编译器

    less是一门css预处理语言,简单的说就是在css的基础上提升为可编程性的预编译器 需要在项目中安装 less ,less-loader 2个插件,语法为:npm i -D less less-lo ...

  5. 在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试 Spring MVC 应用程序.在上面显示的快照中,我们只想启动 ToTestController. 执行 ...

  6. Elasticsearch 是如何实现 Master 选举的?

    1.Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要包含 Ping(节点之 间通过这个 RPC 来发现彼此)和 Unicast(单播模块包含一个主机列表以控制哪 些节点 ...

  7. java-可变参数hei

    /* 使用前提: 当前方法的参数的数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 使用格式: 定义方法是使用 修饰符 返回类型 方法名(数据类型... 变量名){} 可变参数的原理: 可变 ...

  8. 如何在网上找java包

    如图所示 在java api后面输入你要找包的名称就可以了

  9. memcached 的 cache 机制是怎样的?

    Memcached 主要的 cache 机制是 LRU(最近最少用)算法+超时失效.当您存 数据到 memcached 中,可以指定该数据在缓存中可以呆多久 Which is forever, or ...

  10. final、finalize 和 finally 的不同之处?

    final 是一个修饰符,可以修饰变量.方法和类.如果 final 修饰变量,意味着该 变量的值在初始化后不能被改变.finalize 方法是在对象被回收之前调用的方法, 给对象自己最后一个复活的机会 ...