【glusterFS】CentOS7.x上分布式文件系统glusterFS 的安装配置

一、实验背景

Gluster是一个大尺度文件系统,它是各种不同的存储服务器之上的组合,这些服务器由以太网或无限带宽技术Infiniband以及远程直接内存访问RDMA互相融汇,最终所形成的一个大的并行文件系统网络,包括云计算在内的多重应用,诸如:生物医药科学,文档存储。


glusterFS是一个开源的分布式文件系统,于2011年被红帽收购.它具有高扩展性、高性能、高可用性、可横向扩展的弹性特点,无元数据服务器设计使glusterFS没有单点故障隐患。gluster是由GNU托管的自由软件,证书是AGPL,Gluster公司是Gluster的首要商业赞助商,且提供商业产品以及基于Gluster的解决方案。

Gluster是Client/Server架构,服务器典型的布置在存储砖上,每一台服务器运行一个名为glusterfsd 的守护进程,将本地文件系统作为卷进行输出。

Gluster的客户端进程通过TCP/IP,InfiniBand或SDP一类客户协议连接到服务器,将远端卷组成一个大的所谓折叠式翻译器,最终的卷通过一种叫做FUSE的用户空间文件机制机载到客户机。有大量文件应用的I/O同样可以用libglusterfs 客户端库来直接连接服务器并内在的运行翻译器,而无需经过文件系统以及FUSE.大多数GlusterFS功能被实现为翻译器,包括了:

二、实验环境

操作系统:CentOS7.5 Mininmal 


三、设置selinux和防火墙

在gfs01 gfs02  gfs03服务器上

关闭selinux

# setenforce 0

# sed -i 's/^SELINUX=.*/SELINUX=permissive/g'  /etc/selinux/config

开放相关服务端口

# systemctl  start firewalld.service

# systemctl  enable firewalld.service

# firewall-cmd --zone=public --add-port=24007-24008/tcp --permanent

# firewall-cmd --zone=public --add-port=24009/tcp --permanent

#  firewall-cmd --zone=public --add-service=nfs --add-service=samba --add-service=samba-client --permanent

# firewall-cmd --zone=public --add-port=111/tcp --add-port=139/tcp --add-port=445/tcp --add-port=965/tcp --add-port=2049/tcp --add-port=38465-38469/tcp --add-port=631/tcp --add-port=111/udp --add-port=963/udp --add-port=49152-49251/tcp --permanent

# firewall-cmd --reload


四、安装glusterFS 服务端

在gfs01 gfs02  gfs03服务器上


设置host解析

# vim /etc/hosts

####################################

192.168.1.101  gfs01 

192.168.1.103   gfs02 

192.168.1.104   gfs03 

#####################################

# ping gfs01

# ping gfs02

# ping gfs03



格式化挂载数据盘

# mkdir  -p /opt/glusterfs

# mkfs.xfs -i size=512 /dev/sdb

# echo '/dev/sdb /opt/glusterfs xfs defaults 1 2'  >> /etc/fstab

#  mount  -a 

# lsblk 

安装软件包

#  yum -y  install epel-release 

# yum  -y install centos-release-gluster

# rpm -ql   centos-release-gluster

# cat /etc/yum.repos.d/CentOS-Gluster-6.repo

# yum list available --disablerepo="*" --enablerepo="centos-gluster6"

# yum list available --disablerepo="*" --enablerepo="centos-gluster6" | grep gluster


# yum -y install glusterfs glusterfs-server glusterfs-rdma


# rpm -ql glusterfs-server | grep "/etc"

# rpm -ql glusterfs-server | grep "/usr/lib/systemd"

# rpm -qc glusterfs-server

启动glusterFS服务

# systemctl start glusterd.service

# systemctl enable glusterd.service

# systemctl status glusterd.service

# systemctl status rpcbind

# cat /usr/lib/systemd/system/glusterd.service


gfs01节点上,将gfs02 gfs03 两个节点加入到gluster集群

# gluster peer probe gfs01

# gluster peer probe gfs02

# gluster peer probe gfs02



分别在gfs01、gfs02、gfs03 查看集群peer状态

# gluster peer status



在gfs01、gfs02、gfs03 节点上,创建数据目录

# mkdir -p /opt/glusterfs/data

# gluster volume info


在gfs01节点上,创建GlusterFS磁盘

#  gluster volume create models replica 3 gfs01:/opt/glusterfs/data gfs02:/opt/glusterfs/data gfs03:/opt/glusterfs/data force

注:replica 3 表明存储3个备份,后面指定服务器的存储目录

# gluster volume start  models

在gfs01 gfs02 gfs03 节点上,查看volume状态

# gluster volume info

# ll /var/log/glusterfs


五、GlusterFS集群模式说明

GlusterFS分布式存储集群的模式只数据在集群中的存放结构,类似于磁盘阵列中的级别。

a)分布式卷(Distributed Volume),默认模式,DHT

又称哈希卷,近似于RAID0,文件没有分片,文件根据hash算法写入各个节点的硬盘上,优点是容量大,缺点是没冗余。

# gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

b)复制卷(Replicated Volume),复制模式,AFR

相当于raid1,复制的份数,决定集群的大小,通常与分布式卷或者条带卷组合使用,解决前两种存储卷的冗余缺陷。缺点是磁盘利用率低。复本卷在创建时可指定复本的数量,通常为2或者3,复本在存储时会在卷的不同brick上,因此有几个复本就必须提供至少多个brick,当其中一台服务器失效后,可以从另一台服务器读取数据,因此复制GlusterFS卷提高了数据可靠性的同事,还提供了数据冗余的功能。

# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2

避免脑裂,加入仲裁:

# gluster volume create replica 3 arbiter 1 host1:brick1 host2:brick2 host3:brick3

c)分布式复制卷(Distributed Replicated Volume),最少需要4台服务器。

# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

d)条带卷(Striped Volume)

相当于raid0,文件是分片均匀写在各个节点的硬盘上的,优点是分布式读写,性能整体较好。缺点是没冗余,分片随机读写可能会导致硬盘IOPS饱和。

# gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2

e)分布式条带卷(Distributed Striped Volume),最少需要4台服务器。

当单个文件的体型十分巨大,客户端数量更多时,条带卷已经无法满足需求,此时将分布式与条带化结合起来是一个比较好的选择。其性能与服务器数量有关。

# gluster volume create test-volume stripe 4 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8



六、glusterFS的性能调优

在gfs01服务器

开启 指定 volume 的配额: (models 为 volume 名称)

# gluster volume quota models enable


限制 models 中 / (既总目录) 最大使用 80GB 空间

# gluster volume quota models limit-usage / 99GB


设置 cache 大小(此处要根据实际情况,如果设置太大可能导致后面客户端挂载失败)

# gluster volume set models performance.cache-size 512MB


开启 异步,后台操作

# gluster volume set models performance.flush-behind on


设置 io 线程 32

# gluster volume set models performance.io-thread-count 32


设置 回写 (写数据时间,先写入缓存内,再写入硬盘)

# gluster volume set models performance.write-behind on


调优之后的volume信息 

# gluster volume info


# gluster volume list

# gluster volume status models




七、安装配置glusterFS客户端


设置host解析


# vim /etc/hosts

####################################

192.168.1.101  gfs01 

192.168.1.103   gfs02 

192.168.1.104   gfs03 

#####################################

# ping gfs01

# ping gfs02

# ping gfs03


挂载方式一:使用 glusterfs-fuse

安装客户端glusterfs-fuse软件包

#  yum -y  install epel-release 

# yum  -y install centos-release-gluster

# yum -y install glusterfs glusterfs-fuse


建立挂载点,挂载glusterFS

# mkdir -p /opt/gfsmount 

# mount -t glusterfs gfs01:models /opt/gfsmount

或者直接用IP挂载

# mount -t glusterfs 192.168.1.101:/models /opt/gfsmount

# tail -f /var/log/glusterfs/opt-gfsmount.log

# df -hT

FUSE客户端允许使用GlusterFS循环式连接,使用一个节点的名称,内部机制允许该节点发生故障,并且客户端将转移到受信任存储池中的其他连接节点。


客户端测试文件写入

# time dd if=/dev/zero of=/opt/gfsmount/test bs=1024M count=1

# df -hT


设置客户端的开机挂载

选择1:将挂载写入到/etc/fstab 下

#  echo "192.168.1.101:/models /opt/gfsmount glusterfs defaults,_netdev 0 0"  >> /etc/fstab

# mount  -a 

# df -hT

选择2:将挂载服务注册成系统服务

#  vim /etc/systemd/system/glusterfs-fuse.service

######################################################

[Unit]

Description=GlusterFS Fuse

After=network-online.target rpcbind.service

Requires=network-online.target

[Service]

Type=oneshot

ExecStart=/usr/bin/mount -t glusterfs 192.168.1.101:/models /opt/gfsmount

ExecStop=/usr/bin/umount -l /opt/gfsmount

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

######################################################


# systemctl daemon-reload

# systemctl  start glusterfs-fuse.service

# systemctl  enable  glusterfs-fuse.service

# systemctl  status  glusterfs-fuse.service


高可用测试

将gfs01(192.168.1.101)关机,看客户端文件挂载状态

在gfs01(192.168.1.101)节点

#  init  0 

在gfs02 gfs03节点

# gluster volume status models

在gfsClient节点

# systemctl status glusterfs-fuse.service

# df -hT

虽然我们挂载的是 gfs01节点,当gfs01节点宕机时,客户端挂载不受影响,实现了高可用性!


挂载方式二:使用NFS


# yum -y install nfs-utils  rpcbind 


# mount -t nfs -o mountproto=tcp,vers=3    gfs01:/models /opt/gfsmount   -vvv

或者直接用IP挂载

# mount -t nfs -o mountproto=tcp,vers=3   192.168.1.101:/models /opt/gfsmount    -vvv


The gluster NFS server has been disabled by default for GlusterFS-3.8 upstream [1]. 

This is done to encourage users to use NFS-Ganesha for their NFS needs.If RHGS requires this, it can be enabled downstream.

[1]:https://github.com/gluster/glusterfs/blob/release-3.8/doc/release-notes/3.8.0.md#glusternfs-disabled-by-default


如果要使用NFS挂载,我们需要在glusterfs服务端安装NFS-Ganesha,也就是服务端应该是GlusterFS + NFS-Ganesha的组合。


安装NFS-Ganesha

在gfs01 gfs02  gfs03服务器上

# gluster volume get  models nfs.disable 

# gluster volume set vol_distributed nfs.disable on 

# sysemctl stop nfs-server 

# systemctl disable nfs-server

# yum -y install nfs-ganesha  nfs-ganesha-gluster  --disablerepo="*" --enablerepo="centos-gluster6"

# rpm -ql nfs-ganesha

配置NFS-Ganesha

在gfs01服务器上

#  vim /etc/ganesha/ganesha.conf

#####################################################

# create new

NFS_CORE_PARAM {

    # possible to mount with NFSv3 to NFSv4 Pseudo path

    mount_path_pseudo = true;

    # NFS protocol

    Protocols = 3,4;

}

EXPORT_DEFAULTS {

    # default access mode

    Access_Type = RW;

}

EXPORT {

    # uniq ID

    Export_Id = 101;

    # mount path of Gluster Volume

    Path = "/models";

    FSAL {

        # any name

        name = GLUSTER;

        # hostname or IP address of this Node

        hostname="192.168.1.101";

        # Gluster volume name

        volume="models";

    }

    # config for root Squash

    Squash="No_root_squash";

    # NFSv4 Pseudo path

    Pseudo="/opt/glusterfs/data";

    # allowed security options

    SecType = "sys";

}

LOG {

    # default log level

    Default_Log_Level = WARN;

}

######################################################


在gfs02服务器上

#  vim /etc/ganesha/ganesha.conf

#####################################################

# create new

NFS_CORE_PARAM {

    # possible to mount with NFSv3 to NFSv4 Pseudo path

    mount_path_pseudo = true;

    # NFS protocol

    Protocols = 3,4;

}

EXPORT_DEFAULTS {

    # default access mode

    Access_Type = RW;

}

EXPORT {

    # uniq ID

    Export_Id = 103;

    # mount path of Gluster Volume

    Path = "/models";

    FSAL {

        # any name

        name = GLUSTER;

        # hostname or IP address of this Node

        hostname="192.168.1.103";

        # Gluster volume name

        volume="models";

    }

    # config for root Squash

    Squash="No_root_squash";

    # NFSv4 Pseudo path

    Pseudo="/opt/glusterfs/data";

    # allowed security options

    SecType = "sys";

}

LOG {

    # default log level

    Default_Log_Level = WARN;

}

######################################################

在gfs03服务器上

#  vim /etc/ganesha/ganesha.conf

#####################################################

# create new

NFS_CORE_PARAM {

    # possible to mount with NFSv3 to NFSv4 Pseudo path

    mount_path_pseudo = true;

    # NFS protocol

    Protocols = 3,4;

}

EXPORT_DEFAULTS {

    # default access mode

    Access_Type = RW;

}

EXPORT {

    # uniq ID

    Export_Id = 104;

    # mount path of Gluster Volume

    Path = "/models";

    FSAL {

        # any name

        name = GLUSTER;

        # hostname or IP address of this Node

        hostname="192.168.1.104";

        # Gluster volume name

        volume="models";

    }

    # config for root Squash

    Squash="No_root_squash";

    # NFSv4 Pseudo path

    Pseudo="/opt/glusterfs/data";

    # allowed security options

    SecType = "sys";

}

LOG {

    # default log level

    Default_Log_Level = WARN;

}

#####################################################

在gfs01 gfs02  gfs03服务器上

#  showmount -e localhost 

在gfsClient服务器上

# mount -t nfs gfs01:/opt/glusterfs/data /opt/gfsmount      -vvv

或者直接用IP挂载

# mount -t nfs 192.168.1.101:/opt/glusterfs/data /opt/gfsmount    -vvv


设置客户端的开机挂载

选择1:将挂载写入到/etc/fstab 下

# echo  "192.168.1.101:/opt/glusterfs/data /opt/gfsmount nfs defaults,_netdev,mountproto=tcp 0 0"  >> /etc/fstab

# mount  -a

# df -hT

# mount -l | grep "/opt/glusterfs/data"

选择2:将挂载服务注册成系统服务

#  vim /etc/systemd/system/glusterfs-nfs.service

######################################################

[Unit]

Description=GlusterFS NFS

After=network-online.target rpcbind.service

Requires=network-online.target

[Service]

Type=oneshot

ExecStart=/usr/bin/mount -t nfs 192.168.1.101:/opt/glusterfs/data /opt/gfsmount

ExecStop=/usr/bin/umount -l /opt/gfsmount

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

######################################################


# systemctl daemon-reload

# systemctl  start glusterfs-nfs.service

# systemctl  enable  glusterfs-nfs.service

# systemctl  status  glusterfs-nfs.service

# mount -l | grep "/opt/glusterfs/data"

# df -hT



高可用测试

将gfs01(192.168.1.101)关机,看客户端文件挂载状态

在gfs01(192.168.1.101)节点

#  init  0 

在gfs02 gfs03节点

# gluster volume status models

在gfsClient节点

# systemctl status glusterfs-nfs.service

# df -hT

挂载的是 gfs01节点,当gfs01节点宕机时,客户端hang住了,存在使用的单点故障,需要手动切换挂载源!


关于使用FUSE和NFS的选择

NFS使用标准文件系统缓存,Native GlusterFS使用应用程序空间RAM,并且是必须定义的硬件编号。

FUSE客户端允许使用GlusterFS循环式连接, 在/ etc / fstab中使用一个节点的名称;,但是内部机制允许该节点发生故障,并且客户端将转移到受信任存储池中的其他连接节点。 性能比基于测试的NFS方法略慢,但不是那么大。 增益是自动HA客户端故障转移,这通常值得对性能产生影响。

总而言之,这取决于应用要求, 当系统上有足够的RAM并且性能不是很重要时,FUSE似乎是更好的选择。


八、参考


Installing GlusterFS - a Quick Start Guide

https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart


Getting started with GlusterFS

https://gluster.readthedocs.io/en/latest/Administrator%20Guide/NFS-Ganesha%20GlusterFS%20Intergration


GlusterFS安装

https://www.rainbond.com/docs/v5.0/operation-manual/storage/GlusterFS/install.html


CentOS 7 上的 GlusterFS 存储群集

https://wiki.centos.org/zh/HowTos/GlusterFSonCentOS


分布式存储系统GlusterFS安装配置

https://blog.51cto.com/navyaijm/1258250


CentOS 7 安装 GlusterFS

https://www.cnblogs.com/jicki/p/5801712.html


CentOS7 安装GlusterFS

https://blog.csdn.net/wh211212/article/details/79412081


gluster/gluster-ansible

https://github.com/gluster/gluster-ansible


安装GlusterFS-一个快速开始指南

https://github.com/Broadroad/Glusterfs-cn/blob/master/%E5%AE%89%E8%A3%85GlusterFS-%E4%B8%80%E4%B8%AA%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%E6%8C%87%E5%8D%97.md


深入理解GlusterFS之数据均衡

https://blog.csdn.net/younger_china/article/details/85211186


谈谈GlusterFS的问题和不足,加深对GlusterFS系统的理解

https://blog.csdn.net/liuaigui/article/details/20941159


分布式文件系统

https://www.cnblogs.com/kevingrace/p/8709544.html


CentOS 7.x 下GlusterFS分布式存储集群环境部署

https://www.cnblogs.com/kevingrace/p/8743812.html


用户空间文件系统 Filesystem in Userspace

https://zh.wikipedia.org/wiki/FUSE


分布式存储GlusterFS实战,GlusterFS快速入门及概述

https://chegva.com/1745.html

https://mrlichangming.github.io/2018/10/27/GlusterFS%E4%BD%BF%E7%94%A8%E4%B8%AD%E7%9A%84%E4%B8%80%E4%BA%9B%E5%91%BD%E4%BB%A4%E7%A7%AF%E7%B4%AF


gluster文档

https://github.com/maqingqing/TStor/wiki/%E6%96%87%E6%A1%A301%EF%BC%9Agluster%E7%9A%84%E8%BF%9B%E7%A8%8B%E4%B8%8E%E6%9C%AF%E8%AF%AD


How to Setup GlusterFS Storage on CentOS 7 / RHEL 7

https://www.linuxtechi.com/setup-glusterfs-storage-on-centos-7-rhel-7


Using NFS to Mount Red Hat Storage Volumes

https://access.redhat.com/documentation/en-US/Red_Hat_Storage/2.0/html/Administration_Guide/sect-Administration_Guide-GlusterFS_Client-NFS.html


Using NFS to Mount Volumes

https://gluster-documentations.readthedocs.io/en/latest/Administrator%20Guide/Setting%20Up%20Clients


Accessing Data - Setting Up GlusterFS Client

https://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Clients


Should I mount GlusterFS as NFS or FUSE?

https://serverfault.com/questions/796036/should-i-mount-glusterfs-as-nfs-or-fuse


gluster-set-auth.sh

https://gist.github.com/imamdigmi/fc5f2177b4124052006bdf5a11934b56


Get started with GlusterFS - considerations and installation

https://support.rackspace.com/how-to/getting-started-with-glusterfs-considerations-and-installation


GlusterFS 5 : GlusterFS + NFS-Ganesha

https://www.server-world.info/en/note?os=CentOS_7&p=glusterfs5&f=8


Configuring NFS-Ganesha over GlusterFS

https://docs.gluster.org/en/v3/Administrator%20Guide/NFS-Ganesha%20GlusterFS%20Integration


ganesha-config man page

https://www.mankier.com/8/ganesha-config

你可能感兴趣的:(【glusterFS】CentOS7.x上分布式文件系统glusterFS 的安装配置)