GPFS 分布式文件係統在雲計算環境中的實踐
隨著技術的不斷發展,大規模的並行計算方式越來越多的激發有關對高性能計算機的需求,如大數據挖掘、高gao性xing能neng計ji算suan處chu理li等deng。同tong時shi結jie合he雲yun計ji算suan技ji術shu的de快kuai速su普pu及ji與yu發fa展zhan,如ru何he將jiang高gao速su並bing行xing計ji算suan應ying用yong到dao企qi業ye的de私si有you雲yun平ping台tai就jiu成cheng了le很hen多duo企qi業ye探tan討tao和he實shi踐jian的de話hua題ti。
本文主要介紹 IBM Spectrum Scale(GPFS)如何與當下最流行的開源雲管理平台OpenStack結合,完成企業私有雲平台的構建。既滿足計算、存儲、網絡資源被充分利用,又保證高並發、低開銷的需求。
該文章主要涉及到三個部分,分別是Spectrum Scale(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)shiyikuanbingxingdewenjianxitong,tabaozhengzaiziyuanzuneidesuoyoujiediankeyibingxingfangwenzhenggewenjianxitong,erqiezhenduiciwenjianxitongdefuwucaozuo,keyitongshianquandizaiciwenjianxitongdeduogejiedianshangshixian。GPFS 允許客戶共享文件,而這些文件可能分布在不同節點的不同硬盤上,保證了數據的一致性和完整性。GPFS支持多種平台的部署,如Windows、Linux、AIX,每種環境部署方式相同,降低了軟件部署的複雜度。
通過部署在雲環境中部署GPFS,可以提升磁盤I/O,消除存儲層麵單點故障,保證數據的安全性和一致性,降低IT管理成本。
GPFS具有以下特性,幫助企業IT更好的部署和管理分布式文件係統。
-
GPFS 自動在各個節點間同步配置文件和文件係統信息,而且在同一個節點內,對 GPFS 的管理可以在任一個節點上進行,實現簡單管理;
-
支持大部分的操作係統,如 AIX/Linux/Windows 環境,並支持混合部署,達到不同客戶端訪問相同存儲的目的;
-
GPFS通過一套複雜的信令管理機製(令牌管理機製)保證數據一致性。通過這套機製允許任意節點通過各自獨立的路徑到達同一個文件。即使節點無法正常工作, GPFS 也可以找到其它的路徑;
-
GPFS 也是一種日誌文件係統,為不同節點建立各自獨立的日誌。日誌中記錄 metadata 的分布,一旦節點發生故障後,可以保證快速恢複數據;
-
GPFS支持超大文件或文件係統,理論上支持2的99次方字節大小(超過100TB)的文件係統,每個文件係統支持2Billion個文件;
-
GPFS能夠有效的將集群上所有的磁盤負載的I/O進行均衡,這樣就避免了熱點磁盤出現競爭問題,從而提高性能;
GPFS的工作原理
GPFS采用 C/S 結構來對群集內的節點進行管理。為了更好的理解它的工作方式及管理模型,本章將通過圖形方式對其原理進行闡述。
GPFS客戶端(Client)是在GPFSruanjiananzhuanghourenweizhidingde,yinweiwulunshifuwuqiduanhekehuduan,caiyongderuanjianjianzhuangfangshidoushixiangtongde。zhuyaoshitongguozaibutongdejiedianshangliyongbendicipanjianliNSD共享盤,並將其通過GPFS軟件統一管理生成共享池,提供給不同的終端使用,同時借助鎖機製達到多終端同時讀寫的需求。具體通信原理圖,如圖 1 所示,命令執行如圖 2 所示:

圖 1.GPFS通信原理圖
專業術語說明:
-
NSD是網絡共享盤,一個虛擬的磁盤子係統,提供對GPFS內共享磁盤全局命名的功能。
-
Cluster是多個節點的集合,它們共享同一個或者多個並行文件係統,群集裏的節點可以並發訪問這些文件係統內的數據。
-
失敗域是一個磁盤的集合,一個單點故障會引起集合內部的所有磁盤同時失效。
-
仲裁是保障GPFS資源可用和完整性的機製,在GPFS中,如果半數以上節點GPFS守護進程正常工作,次機製就被激活,GPFS係統處於正常工作狀態。

圖 2.GPFS操作執行原理圖
原理圖說明:
-
本地磁盤將被發現並添加到全局的命名空間中,形成網絡共享盤(NSD),供群集調用。
-
NSD將保存數據分為多種類型,主要是用於檢索的元數據(meta)和用於存儲的data數據。
-
群集將生成的NSD盤按照不同的需求生成多個或單個共享磁盤,供上層服務器掛載。
-
最後上層服務器可以利用mount將多個或者單個共享磁盤掛載到本地,進行數據存儲,同時保證並發操作。
本章使大家了解了什麼是GPFS以及它的通信及執行原理,下一部分將主要介紹本次實例部署的架構設計。
GPFS的架構設計
為了讓大家更好的理解部署GPFS在企業私有雲環境中的優勢,根據項目的實際經驗繪製了部署架構圖,並在文中對架構圖進行了詳細說明。如圖 3 所示:

圖 3.GPFS部署架構圖
說明:
-
在本文中,我們將采用以上架構設計完成GPFS對OpenStack雲平台的融合。
-
為了更好的理解架構用意,以下為詳細說明。
-
通過光纖存儲網絡劃分三塊大盤分別掛載到不同的GPFS節點中,充當共享存儲盤,供VM的存儲。
-
采用三台服務器作為GPFS群集節點,分別掛載來自存儲的三塊物理存儲卷到本地文件係統。
-
通過GPFS初始化操作,將三塊數據卷進行NSD格式化,確保可以被GPFS群集統一調用。
-
通過GPFS群集劃分三塊共享卷給OpenStack雲環境,分別掛載到Nova節點,作為VM的存儲,Glance節點作為鏡像的存儲,Cinder節點,作為實例數據盤的存儲。
-
多個Nova節點之間可以同時讀寫共享存儲池,便於實現VM的動態遷移。
GPFS的安裝與配置
對GPFS有了一個初步的了解之後,您將在本章通過實際案例操作進一步熟悉GPFS。本章節一共分為三個部分,分別介紹安裝環境的說明,具體安裝及安裝後的GPFS配置。
- GPFS的環境說明
由於受到硬件資源限製,測試環境將采用三台服務器進行部署,並且每台服務器上已經掛載從SAN劃分的物理卷,每台服務器角色均為GPFS的存儲節點,同時一台是主配置服務器,一台是輔助配置服務器,詳細信息如表 1 所示。
表 1.GPFS 環境說明

目前GPFS支持在多種平台的部署,具體到每個平台的安裝部署,可以參考官方文件。本實例中將主要介紹基於Linux平台的安裝部署與配置。
依賴組件的安裝
由於GPFS的安裝過程需要其它的軟件包的支持,所以我們建議安裝主要的YUM源,之後再安裝GPFS之前需要先將以下表2中的依賴軟件包安裝到主機上,避免因為缺少依賴關係而產生錯誤。
表 2. 依賴軟件包

為了方便依賴包的安裝,本章將采用 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.GPFS安裝源
建立好安裝源及解決了軟件包依賴關係之後,下一步將介紹如何在各個主機上完成係統基本環境的配置,包括host文件修改、SSH的配置、防火牆及NTP的配置。
係統基本環境準備修改Host文件:
修改三個節點的/etc/hosts文件,應包含組內的節點IP和hostname。

修改防火牆配置:
為了方便實驗,我們將關閉係統防火牆與Selinux。

修改係統NTP配置:
推薦用戶在所有的係統節點上配置Network Time Protocol(NTP)服務,確保所有係統
節點間時間同步。如果時間不同步,可能引起debugging問題或者授權問題。確保係統時區設置正確,如不正確使用如下命令修改。
首先修改配置文件vim /etc/ntp.conf,加入客戶的ntp server地址,之後執行ntpate服務器IP來校驗時間。

修改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 所示),就可以自動安裝依賴包。

圖 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所示。

圖 6 GPFS軟件安裝
依照本章介紹來看,GPFS軟件已經安裝,下一章將介紹如何驗證GPFS軟件是否正確的被安裝,符合群集搭建條件。
- GPFS軟件驗證
在三個節點上,使用#rpm –qa | grep gpfs命令驗證GPFS軟件版本符合實驗要求。為了係統可以直接識別和調用GPFS命令,我們將GPFS的路徑添加到PATH環境變量中。執行/usr/lpp/mmfs/bin到/root/.bash_profile環境變量文件中,如圖7所示。

圖 7.PATH環境變量修改
之後在三個節點上執行以下命令,驗證環境變量是否生效,如圖8所示。

圖 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所示

圖 9.GPFS角色配置
配置完成後,就可以通過GPFS內置指令創建GPFS群集,所有角色將自動按照事先定義的服務器自動推送與設置。
創建群集
GPFS群集創建是非常簡單的操作,IBM在創建方麵做的很精細,管理員隻需要記住一個簡單的指令,就可以創建出符合企業規模要求的群集。如圖 10 所示操作,利用mmcrcluster 來創建群集,並如圖 11 所示操作,輸入mmchlicense server接受許可認證。

圖 10.GPFS創建
如上指令-N是製定之前建立的nodefile文件,-p是指定誰承擔主配置服務器角色,-s是指定輔助配置服務器,-r和-R分別是指定RemoteShell和RemoteFileCopy命令的實現方式。
圖 11.GPFS接受許可
我們可以通過運行mmlscluster查看集群配置,確認群集配置是否按照之前nodefile的要求去配置。如圖12所示啟動群集並驗證配置。

圖 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所示:
圖 14.創建NSD
NSD建立完成後,下一步將進行文件係統的創建。通過建立文件係統,可以將其格式化並掛載到係統中,供客戶端調用。如圖15所示:

圖 15.創建文件係統
通過mmcrfs我們將建立一個名為gpfs的文件係統。其主要參數-F用於指定之前創建nsdfile –T是指定掛載點,-r指定副本數量。GPFS文件係統建立後,可以通過mmlsfs命令對其進行驗證,確保沒有錯誤產生。如圖16所示:

圖 16.驗證GPFS係統
GPFS參數調優
GPFS群集配置完成後,需要根據企業客戶要求,進行相關默認參數的調整,以達到最優化的要求,避免資源浪費和性能瓶頸。圖17列出了經常使用的一些參數,可以根據需要自身調整。

圖 17.GPFS相關參數
通過mmchconfig命令修改參數,部分參數修改前,需要先關閉群集服務再重啟才能生效。為了安全起見,建議修改前參考IBM官方手冊,對參數了解後再進行調整,避免對業務的影響。如圖18所示

圖 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所示:

圖 19.定義客戶端Nodefile
添加客戶端節點
在GPFS集群的任意節點上執行mmaddnode命令,將客戶端節點加入到現有集群中,-N指定前麵創建addnodefile文件。如圖20所示
圖 20.添加客戶端
同樣,安裝完成後,需要通過mmchlicense命令同意客戶端的許可,並通過mmstartup啟動客戶端服務,通過mmgetstate命令查看群集狀態,如圖21所示:

圖 21.添加客戶端
節點服務啟動後,GPFS文件係統會自動掛載,可以通過df –h命令查看。
接下來,我們將修改nova、cinder和glance配置文件,指定VM及鏡像文件存儲在GPFS群集提供的文件係統內。
修改OpenStack配置文件
GPFS文件係統掛載後,在nova、cinder、glance上將以普通的文件係統被識別,隻要將VM等數據存儲在上麵即可實現雲計算中的諸多高級功能,如HA、migration等。同時通過GPFS並發操作可以提高磁盤I/O,加速VM的創建與事物的處理。如圖22所示,修改nova的配置文件,將其指定到GPFS中。

圖 22.修改Nova配置文件
通過如上操作,GPFS群集就與OpenStack雲計算平台相結合,提供高性能的計算服務和存儲資源。
結束語
通過在 Redhat 上實現GPFS群集的部署與在雲計算方麵的應用,可以更多的了解其優秀的特性,提高存儲性能及雲計算的靈活性、擴展性。同時通過本文,可以讓讀者對GPFS有一個直觀的了解和認識,不僅在Linux平台,在AIX和Windows平台上,GPFS也有不俗的表現。





閩公網安備 35020302001891號