基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维

一、准备工作

1.1 glusterfs的发展史

2011年10月04日,红帽收购Gluster。
2014年4月30日,红帽公司以1.75亿美元的价格将Ceph的企业级产品提供商Inktank收入囊中,以将Inktank的存储产品集成在其基于GlusterFS(红帽在2011年10月份斥资1.36亿美元收购Gluster)的存储产品中。
2018年10月28日,IBM 将以每股 190 美元的现金收购 Red Hat 所有已发行股份,总价值约为 340 亿美元(2360.45 亿人民币)。

1.2 centos还是red hat?

RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码重新编译一次,形成一个可使用的二进制版本。由于LINUX的源代码是GNU,所以从获得RedHat的源代码到编译成新的二进制,都是合法。只是RedHat是商标,所以必须在新的发行版里将RedHat的商标去掉。
RedHat对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们重视的并不是系统本身,而是我们所提供的商业服务。”所以,CentOS可以得到RedHat的所有功能,甚至是更好的软件。但CentOS并不向用户提供商业支持,当然也不负上任何商业责任。
如果你要将你的RedHat转到CentOS上,因为你不希望为RedHat升级而付费。当然,你必须有丰富UNIX使用经验,因此,RedHat的商业技术支持对你来说并不重要。但如果你是单纯的业务型企业,那么还是建议你选购RedHat软件并购买相应服务。这样可以节省你的IT管理费用,并可得到专业服务。
一句话,选用CentOS还是RedHat,取决于你所在公司是否拥有相应的技术力量。

1.3 本文基于centos7

操作系统:centos7以上
本文基于:

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)     

如果使用VMWARE虚拟机,需要将网络设置为NAT模式,并配好响应的网卡。
(1)编辑网卡
基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第1张图片

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第2张图片

(2)自定义网络适配器(制定NAT网卡)
基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第3张图片

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第4张图片

二、单机安装工作

2.1 设置代理

如果联网没有限制,可以不进行这一步。

2.1.1 配置全局代理

修改全局环境变量:vim /etc/profile
在文件最后加上:

http_proxy=http://ip:port
https_proxy=https://ip:port
ftp_proxy=http://ip:port
export http_proxy https_proxy ftp_proxy

2.1.2 配置yum代理

修改yum命令配置文件 vim /etc/yum.conf
在文件最后加上:

proxy=http://ip:port

注:ip和port处填入自己公司提供的代理IP及端口。
如果仅仅使用yum安装,那么不需要配置全局代理,只需配置yum代理即可。

2.2 修改yum仓库

确保yum仓库所在路径(/etc/yum.repos.d/)下包含以下文件:
基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第5张图片

执行:

yum clean all
yum makecache

yum makecache作用:
yum有很多源,大多是网络上的。makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度。

2.3 安装gluster服务

关闭防火墙:

systemctl stop firewalld.service
systemctl disable firewalld.service

安装gluster的centos版本:

yum install -y centos-release-gluster

安装glusterfs相关服务:

yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

启动gluster服务:

systemctl start glusterd.service
systemctl enable glusterd.service #开机启动gluster

检查gluster状态:

service glusterd status

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第6张图片

启动glusterfsd服务

官网没有这一步

systemctl start glusterfsd
systemctl enable glusterfsd
systemctl status glusterfsd

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第7张图片

查看gluster版本:

glusterd --version

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第8张图片
通过查看gluster状态和版本,可以看出在当前单机上glusterfs服务已经安装完成。

三、搭建glusterfs-server集群

本集群拥有两台服务器,在分别对两台服务器进行完gluster-server的单机安装后,开始进行集群安装。

3.1 配置hosts文件

对两台服务器分别执行:

vim /etc/hosts

在最后一行加上以下内容:

10.161.131.33   shenzhenfs
10.177.150.7    changzhoufs

其中,第一部分为IP,第二部分为主机名/别名。

3.2 添加集群成员

对两台服务器分别执行:

gluster peer probe shenzhenfs
gluster peer probe changzhoufs

查看gluster信任池:

gluster pool list

查看gluster集群状态:

gluster peer status

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第9张图片

四、集群共享文件夹

4.1 创建文件夹

在sz服务器上执行:

mkdir -p /opt/bpmgluster/szserver
mkdir -p /opt/bpmgluster/szclient

在cz服务器上执行:

mkdir -p /opt/bpmgluster/czserver
mkdir -p /opt/bpmgluster/czclient (暂时没用到)

4.2 创建共享卷

GlusterFS卷共有三种基本类型,分别是Distributed(分布式存储)、Striped(将一个文件分成多个固定长度的数据,分布存放在所有存储块,相当于RAID0)、Replicated(镜像存储,相当于RAID1)。
按照官网教程,创建Replicated类型:

gluster volume create bpmshare replica 2 shenzhenfs:/opt/bpmgluster/szserver changzhoufs:/opt/bpmgluster/czserver force

在两台服务器上分别启动volume:

gluster volume start bpmshare 

确认gluster已经启动:

gluster volume info

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第10张图片

gluster volume status

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第11张图片

4.3 挂载客户端文件夹

按照网上做法:

[root@VLXCNDSZ01BRMFS szserver]# mount -t glusterfs shenzhenfs:/bpmshare /opt/bpmgluster/szserver
ERROR: /opt/bpmgluster/szserver is in use as a brick of a gluster volume

错误原因:已经被设置为共享卷的文件夹是不能再被挂载的,大部分博客里的答案真心不靠谱。

官网解释:

For this step, we will use one of the servers to mount the volume.
Typically, you would do this from an external machine, known as a
“client”. Since using this method would require additional packages to
be installed on the client machine, we will use one of the servers as
a simple place to test first, as if it were that “client”.

上面这句话可以用下图解释:
基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第12张图片
简而言之,本来是需要另一台服务器当客户端的,但是为了省事,直接在任意一台server上创建文件夹当客户端吧。本文选择用深圳服务器的szclient文件夹模拟客户端:

mount -t glusterfs shenzhenfs:/bpmshare /opt/bpmgluster/szclient/
df -h

基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第13张图片

4.4 共享文件测试

经过以上步骤后可总结如下:
文件夹szserver与czserver组成镜像存储共享卷,文件夹szclient为客户端,当在szclient里面存入文件时,szserver和czserver内的文件会与szclient保持同步。
测试一:在szclient文件夹创建文件szclient1.txt,发现该文件同步至szserver和czserver
基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第14张图片
在这里插入图片描述
测试二:在szserver文件夹创建文件szserver1.txt,发现该文件同步至szclient和czserver
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试三:在czserver文件夹创建文件czserver1.txt,该文件没有同步至szserver和szclient。
测试三:在czserver文件夹创建文件czserver1.txt,该文件没有同步至szserver和szclient。
测试四:在szserver文件夹创建文件szserver2.txt,该文件同步至szclient和czserver,然后在szserver(szclient)中删除szserver2.txt,szclient(szserver)中的szserver2.txt也随之消失,czclient中仍保留szserver2.txt。
测试五:在szserver(szclient)中创建文件夹szserver1,同步效果与创建文件同步效果相同。

五、GlusterFS异地双活实战

架构图如下:
基于CentOS的分布式文件系统GlusterFS安装、集群搭建和运维_第15张图片

5.1 双活配置过程

5.1.1 配置IP、主机名

首先,在每台主机上执行vim /etc/hosts编辑需要与本机进行文件同步的主机。
实际过程中,只需要在客户端上配置好服务端的IP和主机名(别名)即可。
做完这一步后,执行ping IP/hostname,看一下服务器之间是否连通。

5.1.2 安装Gluster客户端

在实际搭建过程中虽然gluster服务器均为CentOS系统,但webapp服务器均为Red Hat系统。使用yum命令安装GlusterFS:
yum install -y glusterfs glusterfs-server

无法安装,提示系统中已经存在GlusterFS服务,但执行以下命令却无法对外提供GlusterFS服务:

[root@wzk]# service glusterfsd start
Redirecting to /bin/systemctl start  glusterfsd.service
Failed to start glusterfsd.service: Unit glusterfsd.service failed to load: No such file or directory.

幸运的是,webapp服务器上只需安装Gluster客户端:

yum install -y glusterfs-fuse glusterfs-rdma

RDMA的全称为Remote Direct Memory
Access,字面的意思就是远程直接访问内存,顾名思义,就是让一台计算机能够直接访问另外一台计算机的内存。这种技术无需操作系统参与,能让应用程序直接读写网络收发的数据,从而极大地减少了内存拷贝操作,也避免了不同的软件模块对数据的反复处理,对性能的提升作用是毋庸置疑的。

可以安装成功!

5.1.3 将客户端挂载到服务端共享卷

由此,在基于红帽系统的webapp服务器上安装好了GlusterFS客户端,按照异地双活架构图,在shenzhen webapp服务器上执行以下命令,将webapp存放文件的路径挂载到gluster服务器的共享卷bpmshare上:
mount -t glusterfs shenzhenfs:/bpmshare /opt/smart

在changzhou webapp服务器上执行以下命令:

mount -t glusterfs changzhoufs:/bpmshare /opt/smart

附一、GlusterFS运维问题及解决方案

1. 集群中的节点命名不正确

问题
hostname处命名期望值是简洁的changzhoufs,而不是冗长的域名
在这里插入图片描述
解决
以下操作确保有超级用户权限
首先移除节点:

[root@VLXCNDSZ01BRMFS /]# gluster peer detach vlxcndcz01bpmt7.aac.com
peer detach: success

再次查看信任池,节点已经移除:
在这里插入图片描述
配置hosts文件:

vim /etc/hosts

最后改为如下内容(删掉域名部分):

10.161.131.33 shenzhenfs
10.177.150.7 changzhoufs

重新探测其他节点,与其建立集群(信任池 trusted pool)

[root@VLXCNDSZ01BRMFS /]# gluster peer probe changzhoufs
peer probe: success.

在这里插入图片描述
在这里插入图片描述

2. cd命令无法进入文件夹

问题

[a-wangam@vlxcndcz01bpmt7 opt]$ cd bpmgluster/
-bash: cd: bpmgluster/: Permission denied

解决
ll命令发现该文件夹没有读的权限

[a-wangam@vlxcndcz01bpmt7 opt]$ ll
total 8
drwxr-x--- 2 root root 6 Dec 20 10:33 bpmgluster
drwxr-xr-x. 5 root root 4096 Jul 5 16:30 ds_agent
drwxr-xr-x. 9 root root 4096 Sep 8 13:54 omni

修改该文件夹的权限

[a-wangam@vlxcndcz01bpmt7 opt]$ sudo chmod 755 bpmgluster/

3. umount目录命令显示正忙

问题
没法卸载挂载目录

[root@VLXCNDSZ01BRMFS glusterdata]# umount -v /opt/glusterdata/
umount: /opt/glusterdata: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))

解决
fuser + ps命令查看该目录被哪个进程占用

[root@VLXCNDSZ01BRMFS glusterdata]# fuser -a /opt/glusterdata
/opt/glusterdata: 7176c

[root@VLXCNDSZ01BRMFS glusterdata]# ps -ef |grep 7176
root 7176 7171 0 Dec19 pts/0 00:00:00 bash
root 23232 7176 0 10:24 pts/0 00:00:00 ps -ef
root 23233 7176 0 10:24 pts/0 00:00:00 grep --color=auto 7176

杀进程

[root@VLXCNDSZ01BRMFS glusterdata]# kill -9 7176
Killed

卸载

[root@VLXCNDSZ01BRMFS opt]# umount -v /opt/glusterdata/
umount: /opt/glusterdata (shenzhenfs:/sharevol) unmounted

4. 挂载出错

在客户端上挂载需要同步的文件夹:

mount -t glusterfs shenzhenfs:/bpmshare /opt/smart

之前,要在/etc/hosts上配置好对应的Gluster服务器的IP及别名,否则可能会导致挂载占用进程,df -h命令无法使用,挂载目录也无法进入。

10.161.131.33   shenzhenfs

如果执行:

mount -t glusterfs shenzhenfs:/bpmshare /opt/smart

命令后仍然无法同步文件,那么可以尝试先删除掉挂载目录:

rm -rf /opt/smart/

再创建目录:

mkdir /opt/smart

最后重新执行挂载命令。

附二、GlusterFS常用命令大全

#服务后的d表示守护进程,直到系统关闭该进程才会结束

#开启gluster服务

service glusterd start

service glusterd stop

service glusterd status

#或者

systemctl start glusterd

systemctl stop glusterd

systemctl status glusterd



#开启glusterfs服务

service glusterfsd start

service glusterfsd stop

service glusterfsd status

#或者

systemctl start glusterfsd

systemctl stop glusterfsd

systemctl status glusterfsd



#为trusted pool添加/移除服务器

gluster peer probe shenzhenfs

gluster peer detach shenzhenfs

#查看所有节点状态(不包括本节点)

gluster peer status



#volume命令

gluster volume create bpmshare replica 2 shenzhenfs:/opt/bpmgluster/szserver changzhoufs:/opt/bpmgluster/czserver force

gluster volume start bpmshare

gluster volume list

gluster volume info

gluster volume status

gluster volume stop bpmshare

gluster volume delete bpmshare #注意,删除卷的前提是先停止卷。



#客户端以glusterfs形式挂载

mount -t glusterfs shenzhenfs:/bpmshare /opt/bpmgluster/szclient/

df -h #查看挂载情况

你可能感兴趣的:(Linux,GlusterFS,分布式文件系统,CentOS,集群,运维)