chinesezzqiang
作者chinesezzqiang2017-12-22 15:27
信息技术经理, M

GPFS分布式文件系统在云计算环境中的实践

字数 17545阅读 5486评论 7赞 2

随着技术的不断发展,大规模的并行计算方式越来越多的激发有关对高性能计算机的需求,如大数据挖掘、高性能计算处理等。同时结合云计算技术的快速普及与发展,如何将高速并行计算应用到企业的私有云平台就成了很多企业探讨和实践的话题。

本文主要介绍IBM GPFS软件如何与当下最流行的开源云管理平台OpenStack结合,完成企业私有云平台的构建。既满足计算、存储、网络资源被充分利用,又保证高并发、低开销的需求。该文章主要涉及到三个部分,分别是IBM GPFS软件的部署、软件的配置和实践。OpenStack的部署与配置不在本文讨论范围内,具体安装与配置方法请参考OpenStack官方手册https://www.openstack.org/。

  • 在部署 GPFS 软件之前,一定要先正确配置安装环境,建立必要的Yum源,避免依赖包安装失败。
  • 在各个节点正确开启时间同步服务ntp,确保云环境的时间同步。
  • 修改各个节点上的Host文件,并开启ssh免密码登陆功能。
  • 关闭各个节点的selinux,并适当调整本地防火墙策略,避免部署时造成失败。

下面我将详细介绍 IBM GPFS 软件的概念与工作机制,本文主要介绍4.2.1.0版本,以下简称GPFS,其余版本介绍,可以参考IBM官方网站,https://www.ibm.com/cn-zh/?lnk=fcc

GPFS的基本概念与工作原理

GPFS 是IBM公司一款优秀的分布式文件系统集群软件,其易扩展性、高可靠性得到了业界的一致好评。GPFS自从4.1以后,更名为IBM Spectrum Scale,并入IBM Spectrum产品线。本章节将着重介绍它的基本概念、特性与工作原理。

GPFS 简介与特性

IBM GPFS (General Parallel File System ,GPFS)是一款并行的文件系统,它保证在资源组内的所有节点可以并行访问整个文件系统,而且针对此文件系统的服务操作,可以同时安全地在此文件系统的多个节点上实现。GPFS 允许客户共享文件,而这些文件可能分布在不同节点的不同硬盘上,保证了数据的一致性和完整性。GPFS支持多种平台的部署,如Windows、Linux、AIX,每种环境部署方式相同,降低了软件部署的复杂度。

通过部署在云环境中部署GPFS,可以提升磁盘I/O,消除存储层面单点故障,保证数据的安全性和一致性,降低IT管理成本。

GPFS具有以下特性,帮助企业IT更好的部署和管理分布式文件系统。

  1. GPFS 自动在各个节点间同步配置文件和文件系统信息,而且在同一个节点内,对 GPFS 的管理可以在任一个节点上进行,实现简单管理;
  2. 支持大部分的操作系统,如 AIX/Linux/Windows 环境,并支持混合部署,达到不同客户端访问相同存储的目的;
  3. GPFS通过一套复杂的信令管理机制(令牌管理机制)保证数据一致性。通过这套机制允许任意节点通过各自独立的路径到达同一个文件。即使节点无法正常工作, GPFS 也可以找到其它的路径;
  4. GPFS 也是一种日志文件系统,为不同节点建立各自独立的日志。日志中记录 metadata 的分布,一旦节点发生故障后,可以保证快速恢复数据;
  5. GPFS支持超大文件或文件系统,理论上支持2的99次方字节大小(超过100TB)的文件系统,每个文件系统支持2Billion个文件;
  6. GPFS能够有效的将集群上所有的磁盘负载的I/O进行均衡,这样就避免了热点磁盘出现竞争问题,从而提高性能;

GPFS的工作原理

GPFS采用 C/S 结构来对群集内的节点进行管理。为了更好的理解它的工作方式及管理模型,本章将通过图形方式对其原理进行阐述。

GPFS客户端(Client)是在GPFS软件安装后人为指定的,因为无论是服务器端和客户端,采用的软件及安装方式都是相同的。主要是通过在不同的节点上利用本地磁盘建立NSD共享盘,并将其通过GPFS软件统一管理生成共享池,提供给不同的终端使用,同时借助锁机制达到多终端同时读写的需求。具体通信原理图,如图 1 所示,命令执行如图 2 所示:

图片1.png
图 1.GPFS通信原理图

专业术语说明:

  • NSD是网络共享盘,一个虚拟的磁盘子系统,提供对GPFS内共享磁盘全局命名的功能。
  • Cluster是多个节点的集合,它们共享同一个或者多个并行文件系统,群集里的节点可以并发访问这些文件系统内的数据。
  • 失败域是一个磁盘的集合,一个单点故障会引起集合内部的所有磁盘同时失效。
  • 仲裁是保障GPFS资源可用和完整性的机制,在GPFS中,如果半数以上节点GPFS守护进程正常工作,次机制就被激活,GPFS系统处于正常工作状态。

图片2.png
图 2.GPFS操作执行原理图

原理图说明:

  • 本地磁盘将被发现并添加到全局的命名空间中,形成网络共享盘(NSD),供群集调用。
  • NSD将保存数据分为多种类型,主要是用于检索的元数据(meta)和用于存储的data数据。
  • 群集将生成的NSD盘按照不同的需求生成多个或单个共享磁盘,供上层服务器挂载。
  • 最后上层服务器可以利用mount将多个或者单个共享磁盘挂载到本地,进行数据存储,同时保证并发操作。

本章使大家了解了什么是GPFS以及它的通信及执行原理,下一章节将主要介绍本次实例部署的架构设计。

GPFS的架构设计

为了让大家更好的理解部署GPFS在企业私有云环境中的优势,根据项目的实际经验绘制了部署架构图,并在文中对架构图进行了详细说明。如图 3 所示:

图片3.png
图 3.GPFS部署架构图

说明:

  • 在本文中,我们将采用以上架构设计完成GPFS对OpenStack云平台的融合。
  • 为了更好的理解架构用意,以下为详细说明。
  1. 通过光纤存储网络划分三块大盘分别挂载到不同的GPFS节点中,充当共享存储盘,供VM的存储。
  2. 采用三台服务器作为GPFS群集节点,分别挂载来自存储的三块物理存储卷到本地文件系统。
  3. 通过GPFS初始化操作,将三块数据卷进行NSD格式化,确保可以被GPFS群集统一调用。
  4. 通过GPFS群集划分三块共享卷给OpenStack云环境,分别挂载到Nova节点,作为VM的存储,Glance节点作为镜像的存储,Cinder节点,作为实例数据盘的存储。
  5. 多个Nova节点之间可以同时读写共享存储池,便于实现VM的动态迁移。

GPFS的安装与配置

对GPFS有了一个初步的了解之后,您将在本章通过实际案例操作进一步熟悉GPFS。本章节一共分为三个部分,分别介绍安装环境的说明,具体安装及安装后的GPFS配置。

GPFS的环境说明

由于受到硬件资源限制,测试环境将采用三台服务器进行部署,并且每台服务器上已经挂载从SAN划分的物理卷,每台服务器角色均为GPFS的存储节点,同时一台是主配置服务器,一台是辅助配置服务器,详细信息如表 1 所示。

表 1.GPFS 环境说明
QQ截图20171222150335.png

GPFS的安装

目前GPFS支持在多种平台的部署,具体到每个平台的安装部署,可以参考官方文件。本实例中将主要介绍基于Linux平台的安装部署与配置。

依赖组件的安装

由于GPFS的安装过程需要其它的软件包的支持,所以我们建议安装主要的YUM源,之后再安装GPFS之前需要先将以下表2中的依赖软件包安装到主机上,避免因为缺少依赖关系而产生错误。

表 2. 依赖软件包
QQ截图20171222150529.png

为了方便依赖包的安装,本章将采用 YUM 的方式进行安装。
由于现场环境不能连接到Redhat的公共YUM源,因此采用ISO方式使用本地的YUM源。

# vi /etc/yum.repos.d/local.repo
[rhel-7-server]
name=RHEL 7 SERVER packages
baseurl=file:///mnt
enabled=1
gpgkey=file:///mnt/RPM-GPG-KEY-redhat-release
gpgcheck=1

运行yum clean all来清除yum 缓存,防止不正确的yum缓存的影响
运行yum repolist查看配置的yum源信息
并通过 Yum list 命令来校验安装源是否生效,如出现图 4 所示,则表明Yum源已经生效。

图片4.png
图 4.GPFS安装源

建立好安装源及解决了软件包依赖关系之后,下一步将介绍如何在各个主机上完成系统基本环境的配置,包括host文件修改、SSH的配置、防火墙及NTP的配置。

系统基本环境准备

修改Host文件:

修改三个节点的/etc/hosts文件,应包含组内的节点IP和hostname。

QQ截图20171222150739.png

修改防火墙配置:

为了方便实验,我们将关闭系统防火墙与Selinux。

QQ截图20171222150821.png

修改系统NTP配置:

推荐用户在所有的系统节点上配置Network Time Protocol(NTP)服务,确保所有系统
节点间时间同步。如果时间不同步,可能引起debugging问题或者授权问题。确保系统时区设置正确,如不正确使用如下命令修改。

首先修改配置文件vim /etc/ntp.conf,加入客户的ntp server地址,之后执行ntpate服务器IP来校验时间。

QQ截图20171222150926.png

修改SSH免密码登陆:

管理员使用ssh-keygen工具产生key文件

#ssh-keygen -t rsa

在每个RHEL节点生成ssh-key之后一路回车

Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa): 回车
Created directory '//.ssh'.
Enter passphrase (empty for no passphrase): 回车
Enter same passphrase again: 回车
Your identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.ssh/id_rsa.pub.
The key fingerprint is:
db:0b:23:aa:81:a9:b2:41:33:97:8b:6b:b7:24:fc:2c root@node1

在节点1上复制rsa.pub为authorized_keys,并将其复制到节点2和节点3

#cp /.ssh/id_rsa.pub /.ssh/authorized_keys
# scp node2:/.ssh/id_rsa.pub /tmp/id_rsa.pub2
# scp node3:/.ssh/id_rsa.pub /tmp/id_rsa.pub3
#cat /tmp/id_rsa.pub2 >>/.ssh/authorized_keys
#cat /tmp/id_rsa.pub3 >>/.ssh/authorized_keys
#scp /.ssh/authorized_keys node2:/.ssh/authorized_keys
#scp /.ssh/authorized_keys node3:/.ssh/authorized_keys

验证所有节点的ssh通讯,如能显示日期验证通过

在节点1

# ssh GPFS-SERVER02 date; ssh GPFS-SERVER03 date

在节点2

1 date; ssh GPFS-SERVER03 date

在节点3

# ssh GPFS-SERVER01 date; ssh GPFS-SERVER02 date

以上配置完成后,重启所有节点,准备进行GPFS软件的安装。

GPFS的安装

如上表2,已经清晰的列出需要依赖哪些安装包确保GPFS的成功安装。配置好 yum 源之后,只需要输入以下命令(如图 5 所示),就可以自动安装依赖包。

QQ截图20171222151233.png
图 5.GPFS主机安装

依赖包安装完成后,将GPFS软件包Spectrum_Scale_Advanced-4.2.1.0-x86_64-Linux-install上传到所有的节点服务器,通过chmod+x赋予执行权限。解压安装文件./ Spectrum_Scale_Advanced-4.2.1.0-x86_64-Linux-install –text-only,根据提示按“1”,并接受license协议继续,默认安装文件会被解压到/usr/lpp/mmfs/4.2.1.0目录下。之后建立unused文件夹,并移动扩展名为deb、sles、e16、tct的文件到unused文件夹内,最后执行mmbuildgpl完成GPFS的安装,以上步骤在三个节点上依次执行,如图6所示。

QQ截图20171222151359.png
图 6 GPFS软件安装

依照本章介绍来看,GPFS软件已经安装,下一章将介绍如何验证GPFS软件是否正确的被安装,符合群集搭建条件。

GPFS软件验证

在三个节点上,使用#rpm –qa | grep gpfs命令验证GPFS软件版本符合实验要求。为了系统可以直接识别和调用GPFS命令,我们将GPFS的路径添加到PATH环境变量中。执行/usr/lpp/mmfs/bin到/root/.bash_profile环境变量文件中,如图7所示。

QQ截图20171222151433.png
图 7.PATH环境变量修改

之后在三个节点上执行以下命令,验证环境变量是否生效,如图8所示。

QQ截图20171222151508.png
图 8.GPFS变量验证

到目前为止,GPFS的安装工作已经完成,经过验证,软件符合群集搭建要求。下一章将主要介绍如何配置GPFS,使其可以正常的提供群集功能。

GPFS的配置

GPFS的配置工作可以在三个节点的任意主机上执行,结果会通过GPFS同步机制自动复制到其它节点。本章将通过配置角色、创建群集、创建NSD、创建文件系统四大部分来详细介绍。

配置角色

GPFS群集中有三个主要的角色需要提前定义,分别是主配置服务器、辅助配置服务器和仲裁服务器。此项目我们需要建一个三节点的GPFS CLUSTER。以GPFS-SERVER01为主配置服务器,GPFS-SERVER02为备用配置服务器,并将三个节点均作为quorum与manager节点,分别以ssh,scp作为RemoteShell和RemoteFileCopy命令。

在批量创建中,建议通过创建nodefile的形式创建群集。这样可以实现一次编辑,批量部署,简化配置。在GPFS-SERVER1上建立/home/gpfs 目录,并创建节点配置文件testnodefile,如图9所示

QQ截图20171222151632.png
图 9.GPFS角色配置

配置完成后,就可以通过GPFS内置指令创建GPFS群集,所有角色将自动按照事先定义的服务器自动推送与设置。

创建群集

GPFS群集创建是非常简单的操作,IBM在创建方面做的很精细,管理员只需要记住一个简单的指令,就可以创建出符合企业规模要求的群集。如图 10 所示操作,利用mmcrcluster 来创建群集,并如图 11 所示操作,输入mmchlicense server接受许可认证。

QQ截图20171222151707.png
图 10.GPFS创建

如上指令-N是制定之前建立的nodefile文件,-p是指定谁承担主配置服务器角色,-s是指定辅助配置服务器,-r和-R分别是指定RemoteShell和RemoteFileCopy命令的实现方式。

QQ截图20171222151728.png
图 11.GPFS接受许可

我们可以通过运行mmlscluster查看集群配置,确认群集配置是否按照之前nodefile的要求去配置。如图12所示启动群集并验证配置。

QQ截图20171222151752.png
图 12.GPFS启动群集

至此我们已经完成 GPFS 的全部配置,群集服务已经处于激活状态。在下一章中,将添加磁盘作为GPFS的共享存储池介质,供服务调用。

创建NSD

我们的物理服务器内置磁盘为两种SSD和SAS。按照如下规则创建NSD:所有ssd磁盘创建为system池,容纳metadata数据,所有的SAS磁盘创建为fpodata池,用于容纳data数据,每台服务器都是一个单独的失败域。由于内置磁盘数过多,所以我们将通过建立NSDfile的方式,批量创建NSD盘,自动加入到相应的存储池中。

在GPFS-SERVER01上创建并编辑/home/gpfs/testNSDfile文件(nsdname命名中不能使用“-”),如图13所示

%pool: pool=system blockSize=256K layoutMap=cluster allowWriteAffinity=no
%pool: pool=fpodata blockSize=1M layoutMap=cluster allowWriteAffinity=yes writeAffinityDepth=1 blockGroupFactor=1
%nsd: nsd=SERVER01SSD1  device=/dev/sdw servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SSD2  device=/dev/sdx servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SSD3  device=/dev/sdt servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SSD4  device=/dev/sdy servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SSD5  device=/dev/sdv servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SSD6  device=/dev/sdr servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SSD7  device=/dev/sdu servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SSD8  device=/dev/sds servers=GPFS-SERVER01 usage=metadataOnly failureGroup=101 pool=system
%nsd: nsd=SERVER01SAS00  device=/dev/sda servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS01  device=/dev/sdb servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS02  device=/dev/sdc servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS03  device=/dev/sdd servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS04  device=/dev/sdf servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS05  device=/dev/sde servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS06  device=/dev/sdh servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS07  device=/dev/sdj servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS08  device=/dev/sdk servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS09  device=/dev/sdg servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata 
%nsd: nsd=SERVER01SAS10  device=/dev/sdi servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS11  device=/dev/sdm servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata 
%nsd: nsd=SERVER01SAS12  device=/dev/sdo servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS13  device=/dev/sdn servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata
%nsd: nsd=SERVER01SAS14  device=/dev/sdp servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata 
%nsd: nsd=SERVER01SAS15  device=/dev/sdl servers=GPFS-SERVER01 usage=dataOnly failureGroup=1101 pool=fpodata 

%nsd: nsd=SERVER02SSD1  device=/dev/sds servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system   
%nsd: nsd=SERVER02SSD2  device=/dev/sdr servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system   
%nsd: nsd=SERVER02SSD3  device=/dev/sdv servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system   
%nsd: nsd=SERVER02SSD4  device=/dev/sdy servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system   
%nsd: nsd=SERVER02SSD5  device=/dev/sdx servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system   
%nsd: nsd=SERVER02SSD6  device=/dev/sdt servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system   
%nsd: nsd=SERVER02SSD7  device=/dev/sdw servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system   
%nsd: nsd=SERVER02SSD8  device=/dev/sdu servers=GPFS-SERVER02 usage=metadataOnly failureGroup=201 pool=system  
%nsd: nsd=SERVER02SAS00  device=/dev/sda servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS01  device=/dev/sdd servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS02  device=/dev/sde servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS03  device=/dev/sdg servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS04  device=/dev/sdc servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS05  device=/dev/sdb servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS06  device=/dev/sdf servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS07  device=/dev/sdh servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS08  device=/dev/sdk servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS09  device=/dev/sdm servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS10  device=/dev/sdj servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS11  device=/dev/sdp servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS12  device=/dev/sdl servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS13  device=/dev/sdn servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS14  device=/dev/sdi servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata    
%nsd: nsd=SERVER02SAS15  device=/dev/sdo servers=GPFS-SERVER02 usage=dataOnly failureGroup=2101 pool=fpodata 

%nsd: nsd=SERVER03SSD1  device=/dev/sds servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system   
%nsd: nsd=SERVER03SSD2  device=/dev/sdv servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system
%nsd: nsd=SERVER03SSD3  device=/dev/sdx servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system
%nsd: nsd=SERVER03SSD4  device=/dev/sdu servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system
%nsd: nsd=SERVER03SSD5  device=/dev/sdw servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system
%nsd: nsd=SERVER03SSD6  device=/dev/sdr servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system
%nsd: nsd=SERVER03SSD7  device=/dev/sdt servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system
%nsd: nsd=SERVER03SSD8  device=/dev/sdy servers=GPFS-SERVER03 usage=metadataOnly failureGroup=301 pool=system 
%nsd: nsd=SERVER03SAS00  device=/dev/sdb servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS01  device=/dev/sdd servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS02  device=/dev/sdg servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS03  device=/dev/sdh servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS04  device=/dev/sdi servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS05  device=/dev/sdj servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS06  device=/dev/sdl servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS07  device=/dev/sdp servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS08  device=/dev/sdm servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS09  device=/dev/sdf servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS10  device=/dev/sdn servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS11  device=/dev/sdk servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS12  device=/dev/sda servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS13  device=/dev/sde servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS14  device=/dev/sdo servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata 
%nsd: nsd=SERVER03SAS15  device=/dev/sdc servers=GPFS-SERVER03 usage=dataOnly failureGroup=3101 pool=fpodata

图 13.编辑NSD文件

完成配置后,将通过上述NSD文件,创建NSD磁盘。

在创建NSD过程中,-v 选项缺省值为yes,表示创建NSD是验证该hdisk是否已被NSD格式化了,当然对一个全新系统,我们可以确定hdisk未被格式化,可以制定-v no跳过检查。

通过mmcrnsd命令创建NSD,如图14所示:

QQ截图20171222152004.png
图 14.创建NSD

NSD建立完成后,下一步将进行文件系统的创建。通过建立文件系统,可以将其格式化并挂载到系统中,供客户端调用。如图15所示:

QQ截图20171222152027.png
图 15.创建文件系统

通过mmcrfs我们将建立一个名为gpfs的文件系统。其主要参数-F用于指定之前创建nsdfile –T是指定挂载点,-r指定副本数量。GPFS文件系统建立后,可以通过mmlsfs命令对其进行验证,确保没有错误产生。如图16所示:

QQ截图20171222152050.png
图 16.验证GPFS系统

GPFS参数调优

GPFS群集配置完成后,需要根据企业客户要求,进行相关默认参数的调整,以达到最优化的要求,避免资源浪费和性能瓶颈。图17列出了经常使用的一些参数,可以根据需要自身调整。

mmlsconfig all   #显示所有参数值
mmchconfigpagepool=20g
mmchconfiglogBufferCount=64
mmchconfiglogWrapThreads=32
mmchconfignsdMaxWorkerThreads=3072
mmchconfignsdSmallThreadRatio=2
mmchconfigreadReplicaPolicy=local
mmchconfigsyncBuffsPerIteration=1
mmchconfigminMissedPingTimeout=60
mmchconfigleaseRecoveryWait=65
mmchconfigmaxFilesToCache=100000
mmchconfigmaxStatCache=100000
mmchconfig worker1Threads=1024
mmchconfignsdMinWorkerThreads=48
mmchconfig nsdInlineWriteMax=2M
mmchconfig nsdThreadsPerQueue=10
mmchconfig forceLogWriteOnFdatasync=no
mmchconfig disableInodeUpdateOnFdatasync=yes
mmchconfig unmountOnDiskFail=meta
mmchconfig logBufferSize=1048576
mmchconfig prefetchPct=60
mmchconfig tscCmdPortRange="60000-61000"
mmchconfig autoload=yes
mmchconfig restripeOnDiskFailure=yes

图 17.GPFS相关参数

通过mmchconfig命令修改参数,部分参数修改前,需要先关闭群集服务再重启才能生效。为了安全起见,建议修改前参考IBM官方手册,对参数了解后再进行调整,避免对业务的影响。如图18所示

mmchconfig maxblocksize=2048k
mmumount all -a
mmshutdown –a
mmstartup -a
mmgetstate -a
mmmount all -a
mmlsmount all -L

图 18.GPFS参数修改

GPFS客户端挂载

通过上述操作,已经将GPFS群集搭建完成,并且已经生成文件系统和共享磁盘供客户端调用。之前已经介绍过GPFS是C/S结构的,为了让OpenStack中的nova、glance和cinder可以使用共享磁盘,本章将通过在OpenStack中安装GPFS客户端的方式,将共享磁盘挂载到云环境中的计算节点、镜像节点以及块存储节点。

安装GPFS软件

安装软件可以参考文章开头的操作过程,GPFS服务器端的安装和客户端的安装没有任何区别,软件的依赖关系也是一样的。

修改Host文件

在客户端修改/etc/hosts,加入GPFS的三台服务器,同时确保所有服务器和客户端可以免密码登陆,具体设置方法可以参考本章GPFS安装与配置。

创建客户端Nodefile

前面已经介绍,GPFS的客户端和服务器的区别主要是靠配置文件中的角色定义所决定。为了批量安装和配置好客户端,本项目将采用Nodefile方式对客户端进行单独安装。编辑addnodefile文件,内容如图19所示:

QQ截图20171222152314.png
图 19.定义客户端Nodefile

添加客户端节点

在GPFS集群的任意节点上执行mmaddnode命令,将客户端节点加入到现有集群中,-N指定前面创建addnodefile文件。如图20所示

QQ截图20171222152347.png
图 20.添加客户端

同样,安装完成后,需要通过mmchlicense命令同意客户端的许可,并通过mmstartup启动客户端服务,通过mmgetstate命令查看群集状态,如图21所示:

QQ截图20171222152415.png
图 21.添加客户端

节点服务启动后,GPFS文件系统会自动挂载,可以通过df –h命令查看。
接下来,我们将修改nova、cinder和glance配置文件,指定VM及镜像文件存储在GPFS群集提供的文件系统内。

修改OpenStack配置文件

GPFS文件系统挂载后,在nova、cinder、glance上将以普通的文件系统被识别,只要将VM等数据存储在上面即可实现云计算中的诸多高级功能,如HA、migration等。同时通过GPFS并发操作可以提高磁盘I/O,加速VM的创建与事物的处理。如图22所示,修改nova的配置文件,将其指定到GPFS中。

图片5.png
图 22.修改Nova配置文件

通过如上操作,GPFS群集就与OpenStack云计算平台相结合,提供高性能的计算服务和存储资源。

结束语

通过在 Redhat 上实现GPFS群集的部署与在云计算方面的应用,可以更多的了解其优秀的特性,提高存储性能及云计算的灵活性、扩展性。同时通过本文,可以让读者对GPFS有一个直观的了解和认识,不仅在Linux平台,在AIX和Windows平台上,GPFS也有不俗的表现。

参考资源 (resources)

  • 参考 GPFS 官方文档 ,查看 GPFS 更多的功能介绍。
  • 参考 GPFS Community ,查看 GPFS 更多的使用场景。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论7 条评论

#abit2007系统工程师, 代维
2019-02-13 11:37
主配置服务器,辅助配置服务器。在FPO环境中必须要用这两种角色吗, 我们之前的客户环境中,不是使用本地盘,使用的是共享存储中,都没有使用主与辅助角色。

abit2007@chinesezzqiang 您好,你说的是mmlscluster命令的吗,输出结果没有主,从服务器。 GPFS cluster information ======================== GPFS cluster name: HANAcluster.gpfs01 GPFS cluster id: 15132411540477332479 GPFS UID domain: HANAcluster.gpfs01 Remote shell command: /usr/bin/ssh Remote file copy command: /usr/bin/scp Repository type: CCR

2019-02-14 15:59

chinesezzqiang@abit2007 您好,无论是本地还是共享都是有主辅关系的,您可以通过文中提到的mmls指令去查询。

2019-02-13 14:21
#abit2007系统工程师, 代维
2019-02-13 09:47
另外请问下,后4个客户端节点,为啥不一起安装,还要后面再装,再增加进集群。

chinesezzqiang@abit2007 您好是可以一起安装的,因为属于扩容范围,所以是先安装在加入集群

2019-02-13 14:19
#abit2007系统工程师, 代维
2019-02-13 09:42
您好,可以详细介绍下,这四个参数的信息吗,layoutMap,allowWriteAffinity,writeAffinityDepth,blockGroupFactor

chinesezzqiang@abit2007 您好,这个建议您从IBM官方的红皮书查看一下,http://www.redbooks.ibm.com/。

2019-02-13 14:23
#jlhwlw系统工程师, 成都
2019-02-11 21:51
好东西,感谢分享
#luochao1985技术支持, 同有飞骥
2018-07-06 17:12
不错的分享,点赞
#wuwenpin软件开发工程师, 南京
2017-12-22 16:51
学习了!
#penguin23系统运维工程师, 广州佳杰科技有限公司
2017-12-22 16:09
在玩HACMP的时候,有了解了一下GPFS。 不错的分享!
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。

关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
© 2019  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30