天天看點

iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

iSCSI(二)iSCSI cLVM GFS2 配置共享存儲

       在《RHCS 及 RHCS配置》認識了RHCS并用cman+rgmanager進行了叢集的相關配置,在前面《iSCSI 及 iSCSI配置》認識并配置了iSCSI,但在測試中發現了多個節點挂載同時使用很可能會造成資料崩潰的問題,下面将解決這個問題,在前文的基礎上配置iSCSI+c.LVM+GFS2的共享存儲。

1、認識GFS2

iSCSI(二) iSCSI cLVM GFS2 配置共享存儲
       GFS2(Global File System 2,全局檔案系統v2)是一種由RedHat公司開發的,允許群集節點同時通路某個共享的塊裝置的群集檔案系統。
       GFS2是一個原生的(native)檔案系統,它直接和Linux核心檔案系統接口的VFS層進行通信。GFS2使用分布式中繼資料和多個日志來優化群集操作。要維護檔案系統的完整性,GFS2使用一個分布式鎖管理器(DLM,DistributedLock Manager)來協調I/O,當一個節點作業系統時,會進行加鎖。當節點修改了GFS2檔案系統上的資料,這個改動馬上為使用這個檔案系統的其他群集節點可見。

2、認識cLVM

iSCSI(二) iSCSI cLVM GFS2 配置共享存儲
       CLVM(Cluster Logical Volume Manager,群集邏輯卷管理器)是LVM的一組群集的擴充。這些擴充允許計算機群集使用LVM管理共享存儲(例如:在SAN中),當在一個節點上對共享存儲進行LVM操作時,會通過高可用元件通知其他節點。
       要使用CLVM,則必須運作紅帽叢集套件,其中包括clvmd守護程序。 clvmd守護程序是LVM的關鍵叢集擴充。clvmd 在每個叢集節點中運作,并在叢集中釋出LVM中繼資料更新,用相同的邏輯卷視圖來顯示每個叢集節點。

3、相關準備配置

3-1、具體使用環境資源

iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

1、各主機系統:RHEL 5.8 64bit

2、Target:

Soft:scsi-target-utils

IP:192.168.18.240

LUN1:/dev/sda5 50G(以分區代替)

LUN2:/dev/sda6 20G

3、三台節點主機node1,node2,node3:
Soft:

iscsi-initiator-utils

cman, rgmanger

lvm2-cluster

gfs2-utils

Node1: IP:192.168.18.241 host name:node1.tjiyu,com;

Node2: IP:192.168.18.242 host name:node2.tjiyu.com;

Node3: IP:192.168.18.243 host name:node3.tjiyu.com;

3-2、配置前所需要的準備

1、像在前面《iSCSI 及 iSCSI配置》配置iSCSI,可以在各節點上識别到兩個LUN為磁盤裝置:
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲
2、像在《RHCS 及 RHCS配置》配置cman+rgmanager叢集,不用配置資源,到"4-4、啟動cman和rgmanager"使群集可以正常運作就可以了。注意,本文主要不是配置高可用叢集,是以像配置clvmd資源,gfs2資源挂載都不進行。叢集狀态如下:
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

4、下載下傳安裝cLVM和GFS2管理工具

       配置好yum源,直接各節點上分别執行安裝lvm2-cluster和gfs2-utils,當然也可以在Target上通過SSH執行,但那是串行的,不如分别在各節點上分别執行快;注意,這兩個隻是管理工具(類似ipvsadm),具體的資料處理子產品已整合在核心中,如下:
[[email protected] ~]# yum install -y lvm2-cluster gfs2-utils
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

5、配置cLVM

5-1、配置使用LVM的叢集功能

      各節點LVM功能預設不是開啟叢集功能的,需要手動配置使用,可以用lvmconf --enable-cluster指令開啟,這指令實際上是使得/etc/lvm/lvm.conf配置檔案裡的locking_type為3(預設為1),如下:
[[email protected] ~]# ssh_node 'lvmconf --enable-cluster'; done

        [[email protected] ~]# ssh_node 'grep "locking_type = 3" /etc/lvm/lvm.conf'; done
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

5-2、啟動clvmd服務

       上面認識cLVM時就說到lvmd守護程序是LVM的關鍵叢集擴充,必須在每個叢集​​​​​​​節點中運作,是以可以把這個配置成叢集的clone資源,但本文簡單處理就不配置了,直接在各節點上配置開機啟動,然後啟動服務,如下:
[[email protected] ~]# ssh_node 'chkconfig clvmd on'; done

        [[email protected] ~]# ssh_node 'service clvmd start'; done
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

5-3、建立叢集邏輯卷

       前面配置iSCSI後,在各節點可以識别到兩個磁盤裝置/dev/sdb和/dev/sdc,測試時還把/dev/sdb格式化一個分區,這裡就用另外一個20G的/dev/sdc,先在node1建立實體卷,然後建立卷組,最後建立一個2G的邏輯卷(空間小點,加快測試),如下:
[[email protected] cluster]# pvcreate /dev/sdc

        [[email protected] cluster]# vgcreate clustervg /dev/sdc

        [[email protected] cluster]# vgs

        [[email protected] cluster]# lvcreate -L 2G -n clusterlv clustervg

        [[email protected] cluster]# lvs
           
       在node1上建立好後,在其他節點也可以識别到,如下:
[[email protected] ~]# ssh_node 'lvs'; done
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

6、配置GFS2

6-1、格式化GFS2

      将上面建立的叢集邏輯卷格式化為GFS2,這需要使用mkfs.gfs2指令工具,mkfs.gfs2用法如下:
mkfs.gfs2

            -j #: 指定日志區域的個數,有幾個就能夠被幾個節點所挂載;

            -J #: 指定日志區域的大小,預設為128MB;

            -p {lock_dlm|lock_nolock}:所使用的鎖協定名稱,叢集需要使用lock_dlm;

            -t <name>: 鎖表的名稱,格式為clustername:fsname, clustername為目前節點所在的叢集的名稱,這也是為什麼要使用RHCS;fsname檔案系統名稱,自定義,要在目前叢集惟一,這也叫鎖表名稱,表明是分布式鎖的範圍。
           
      下面我們在node1先格式化建立兩個日志區,測試下看三個節點能否都挂載上來,操作如下:
[[email protected] cluster]# mkfs.gfs2 -j 2 -p lock_dlm -t tjiyu_cluster:sharedstorage /dev/clustervg/clusterlv
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲
      在各節點建立挂載目錄/sharedstore,測試下看三個節點能否都挂載上來,可以看到提示日志區不夠,如下:
[[email protected] ~]# ssh_node 'mkdir /sharedstore'; done

        [[email protected] ~]# ssh_node 'mount -t gfs2 /dev/clustervg/clusterlv /sharedstore'; done
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲
      然後在node1上操作增加叢集邏輯卷的日志區,再各節點重新挂載,成功,如下:
[[email protected] cluster]# gfs2_jadd -j 1 /dev/clustervg/clusterlv
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

6-2、挂載可調參數檢視和設定

      當各節點成功挂載後,可以檢視挂載點的參數,這些參數都是可調的,其中有一個參數new_files_directio,為1時寫入資料不會緩存,直接寫到儲存設備中,這樣一個節點的操作另一個節點會立即看到,但性能比較差;注意在node1上設定,其他節點不會生效,操作如下:
[[email protected] cluster]# gfs2_tool gettune /sharedstore

        [[email protected] cluster]# gfs2_tool settune /sharedstore new_files_directio 1

        [[email protected] cluster]# gfs2_tool gettune /sharedstore
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

6-3、擴充叢集邏輯卷及GFS2邊界

      上面我們建立叢集邏輯卷時隻給了2G空間,之後可以進行擴充,先要擴充叢集邏輯卷大小,還需要擴充GFS2的邊界,這些操作在一個節點上進行,其他節點也生效,如下:
[[email protected] cluster]# lvextend -L 3G /dev/clustervg/clusterlv

        [[email protected] cluster]# lvs

        [[email protected] cluster]# gfs2_grow /dev/clustervg/clusterlv
           
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲

7、測試

1、在node1上複制/etc/fstab進去挂載點/sharedstore,可以在各節點上立即看到,如下:
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲
2、在node2上建立兩個檔案到挂載點/sharedstore,可以在各節點上立即看到,如下:
iSCSI(二) iSCSI cLVM GFS2 配置共享存儲
       到這裡,配置iSCSI+c.LVM+GFS2的共享存儲就可以正常運作了,但一些高可用配置沒有進行,像clvmd和gfs2目錄挂載等都可以作為clone資源運作在高可用叢集上, 不過在多節點資料通路量大的情況下這種叢集檔案系統性能較差,一般都使用分布式的叢集檔案系統;後面将會認識、配置keepalived、nginx等叢集相關元件……

【參考資料】

1、RedHat官方文檔:https://access.redhat.com/documentation/zh_cn/red-hat-enterprise-linux/?version=5/

2、iSCSI 及 iSCSI配置:http://blog.csdn.net/tjiyu/article/details/52811458

3、RHCS 及 RHCS配置:http://blog.csdn.net/tjiyu/article/details/52736285

4、RHEL7 – Configuring GFS2 on Pacemaker/Corosync Cluster:http://www.unixarena.com/2016/01/rhel7-configuring-gfs2-on-pacemakercorosync-cluster.html

5、CentOS6.4+cman+rgmanager+iscsi+gfs2+cLVM 實作廉價的可擴充的叢集共享存儲:http://freeloda.blog.51cto.com/2033581/1279063