基於RHCS+ISCSI+CLVM實現web服務的共享存儲集羣架構

一、RHCS簡介

      RHCS是Red Hat Cluster Suite的縮寫,也就是紅帽子集羣套件,RHCS是一個能夠提供高可用性、高可靠性、負載均衡、存儲共享且經濟廉價的集羣工具集合,它將集羣系統中三大集羣架構融合一體,可以給web應用、數據庫應用等提供安全、穩定的運行環境。    

      更確切的說,RHCS是一個功能完備的集羣應用解決方案,它從應用的前端訪問到後端的數據存儲都提供了一個行之有效的集羣架構實現,通過RHCS提供的這種解決方案,不但能保證前端應用持久、穩定的提供服務,同時也保證了後端數據存儲的安全。     

      RHCS提供了集羣系統中三種集羣構架,分別是高可用性集羣、負載均衡集羣、存儲集羣。

二、RHCS集羣的功能和組成

      RHCS的核心功能就是提供高可用集羣,當其中的節點出現故障的時候,RHCS可以通過高可用性服務管理組件自動、快速從一個節點切換到另一個節點,從而保證應用持續、不間斷的對外提供服務,從而實現RHCS高可用集羣實現的功能。

    RHCS通過LVS來提供負載均衡集羣,當一個請求進來時,LVS通過負載均衡調度算法將請求進行分配,來達到負載均衡,而當一個節點出現故障的時候,LVS通過服務節點的故障轉移功能自動屏蔽此節點,並其故障節點踢出去,同時將此節點的服務轉移給其他節點。然後當此節點重新恢復服務後LVS會自動把其加到服務中來,從而來保證服務的穩定運行!

    RHCS通過GFS(Global File System)文件系統來提供存儲集羣功能,GFS是集羣文件系統,它允許多個服務器同時讀寫同一個共享存儲文件系統,存儲集羣通過將數據放在一個共享存儲上來保證數據的一致性,同時GFS通過鎖管理機制來實現對數據讀寫的隔離,從而來保證了數據的安全性!

     RHCS是一個集羣套件,其主要包括以下幾部分:

1、集羣構架管理器:RHCS的基礎套件,提供集羣的基本功能,主要包括布式集羣管理器(CMAN)、鎖管理(DLM)、配置文件管理(CCS)、柵設備(FENCE)

2、rgmanager高可用服務管理器

提供節點服務監控和服務故障轉移功能,當一個節點服務出現故障時,將服務轉移到另一個健康節點。

3、集羣管理工具

RHCS通過system-config-cluster來進行配置,這是一個基於圖形界面的工具,可以很簡單、明瞭的進行配置

4、負載均衡工具

RHCS通過LVS實現服務之間的負載均衡,LVS是系統內核中的套件,所有性能比較好。

5、GFS

集羣文件系統,這是由RedHat公司開發的,GFS文件系統允許多個服務同時讀寫一個磁盤分區,通過GFS可以實現數據的集中管理,免去了數據同步和拷貝的麻煩,但GFS並不能孤立的存在,安裝GFS需要RHCS的底層組件支持。

6、Cluster Logical Volume Manager

Cluster邏輯卷管理,即CLVM,是LVM的擴展,這種擴展允許cluster中的機器使用LVM來管理共享存儲,但是配置之前需要開啓lvm支持集羣功能。

7、ISCSI

iSCSI是一種在Internet協議上,利用tcp/ip機制對fc、fc-xx等進行封裝後在網絡中進行傳輸。isici是基於C/S架構的,數據首先被封裝成scsi報文,在封裝成iscsi報文,最後封裝tcp/ip報文進行傳輸!iscsi是基於tcp的,監聽在3260上,通過3260端口向外提供tcp/ip的服務的,isisc的會話是一直保存建立的,知道會話介紹再斷開。RHCS可以通過ISCSI技術來導出和分配共享存儲的使用。


三、RHCS的架構環境和架構圖

RedHat Enterprise Linux 5.8

資源分配:

node2:192.168.0.11 <--->RS-web1<--->hostname node1.example.com
node2:192.168.0.12 <--->RS-web2<--->hostname node2.example.com
node3:192.168.0.13 <--->RS-web3<--->hostname node3.example.com
node4:192.168.0.14 <--->Target+NtpServer<--->hostname node4.example.com
VIP       : 192.168.0.100
stepping:192.168.0.15      跳板機,此處利用在跳板機上利用循環語句一次性部署多個服務器。

其架構圖如下

wKioL1P2u33TALrRAAQWorRNHOw012.jpg

四、搭建RHCS的高可用集羣

4.1、配置Stepping主機上的NtpServer和主機名、以及ssh與其他各個幾點的ssh互信和NtpServer、配置hostname

4.1.1、配置hosts文件

[root@stepping ~]# vim /etc/hosts
192.168.0.11      node1.example.com node1 
192.168.0.12      node2.example.com node2  
192.168.0.13      node3.example.com node3  
192.168.0.14      node4.example.com node4  
192.168.0.15      stepping.example.com stepping


4.1.2、配置雙機互信

[root@stepping ~]#ssh-keygen -t rsa
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node1
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node2
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node3
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node4

4.1.3、配置本地yum源


配置之前先把本地磁盤做成yum,需要在每個節點上都配置,把本地磁盤掛載到mnt/cdrom目錄下

[root@stepping ~]#mkdir /mnt/cdrom 
[root@stepping ~]# mount /dev/cdrom /mnt/cdrom         掛載光盤
vim /etc/yum.repos.d/server.repo,添加如下內容
# repos on instructor for cla***oom use
# Main rhel5 server 
[base]  
name=Instructor Server Repository  
baseurl=file:///mnt/cdrom/Server  
gpgcheck=0
# This one is needed for xen packages 
[VT]  
name=Instructor VT Repository  
baseurl=file:///mnt/cdrom/VT  
gpgcheck=0
# This one is needed for clustering packages 
[Cluster]  
name=Instructor Cluster Repository  
baseurl=file:///mnt/cdrom/Cluster  
gpgcheck=0
# This one is needed for cluster storage (GFS, iSCSI target, etc...)
packages 
[ClusterStorage]  
name=Instructor ClusterStorage Repository  
baseurl=file:///mnt/cdrom/ClusterStorage  
gpgcheck=0



4.1.4、安裝NtpServer服務器,修改配置文件

[root@stepping ~]#yum –y install ntp
[root@stepping ~]#vim /etc/ntp.conf
  restrict default kod nomodify notrap nopeer noquery       #默認禁止所有客戶端請求時間同步 
  restrict -6 default kod nomodify notrap nopeer noquery  #IPv6的定義
  # Permit all access over the loopback interface.  This could 
  # be tightened as well, but to do so would effect some of  
  # the administrative functions.  
  restrict 127.0.0.1                                                
  restrict -6 ::1  
  restrict 192.168.0.0 mask 255.255.0.0 nomodify                   #restrict 定義允許同步的網段  
  # Hosts on local network are less restricted.  
  #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
  # Use public servers from the pool.ntp.org project. 
  # Please consider joining the pool (http://www.pool.ntp.org/join.html).  
  server 127.0.0.1                          #本地上層的ntp服務器,這個必須定義的,指向本地就行
[root@stepping ~]#chkconfig ntpd on
[root@stepping ~]#service ntpd start


4.1.5、通過stepping主機做跳板機配置其他節點的配置

首先定義一個命令別名,方便下面的多個服務器上部署操作:

[root@stepping ~]#alias hap='for I in {1..4}; do'     配置包括Target在內的主機的命令別名
[root@stepping ~]#alias hcp='for I in {1..3}; do'     配置不包括Target在內的主機的命令別名


4.1.6、配置node1-node4節點、同步各個節點的時間、複製hosts文件、關閉iptables和selinux、複製stepping的yum源文件server.repo

1.配置node1-node4節點主機名

[root@stepping ~]#hap ssh node$I "hostname node$I.example.com" ; done  注意此處由於命令中有變量,使用雙引號

2.同步各個節點時間

[root@stepping ~]#hap ssh node$I 'ntpdate 192.168.0.15' ; done


3.複製hosts文件到各個節點

[root@stepping ~]#hap scp /etc/hosts node$I:/etc/ ; done


4.關閉各個節點的selinux設置、關閉iptables

[root@stepping ~]#hap ssh node$I 'setenforce 0' ; done
[root@stepping ~]#hap ssh node$I 'iptables -F;service iptables save;service iptables stop' ; done


5.配置各個節點上的yum

[root@stepping ~]#hap ssh node$I 'mount /dev/cdrom /mnt/cdrom' ; done     
[root@stepping ~]#hap scp /etc/yum.repos.d/server.repo node$I:/etc/yum.repos.d/ ; done


4.2、在node1、node2、node3上安裝apache的httpd服務,並進行相關的測試

4.2.1、安裝http服務,並配置index.html

[root@stepping ~]#hcp ssh node$I 'yum -y install httpd' ; done            #安裝httpd服務,注意只需在node1-3,所以使用hcp

[root@stepping ~]#hcp ssh node$I "echo node$I.example.com > /var/www/html/index.html"; done
#設置節點上的各個主頁內容,分別爲node1.example.com、node2.example.com、node3.example.com 注意:要重新編輯各個節點的index.html


4.2.2、啓動httpd服務並通過curl進行測試

[root@stepping ~]#hcp ssh node$I "service httpd start"; done
[root@stepping ~]#hcp curl node$I ; done
[root@stepping ~]#hcp ssh node$I "service httpd stop"; done
[root@stepping ~]#hcp ssh node$I "chkconfig httpd off"; done


4.3、安裝配置RHCS套件:cmam、rgmanager、system-config-cluster

      說明:RHCS的核心組件爲cman和rgmanager,其中cman爲基於openais的“集羣基礎架構層”,rgmanager爲資源管理器。RHCS的集羣中資源的配置需要修改其主配置文件/etc/cluster/cluster.xml實現,這對於很多用戶來說是比較有挑戰性的,因此,RHEL提供了system-config-cluster這個GUI工具,其僅安裝在集羣中的某一節點上即可,而cman和rgmanager需要分別安裝在集羣中的每個節點上。這裏選擇將此三個rpm包分別安裝在了集羣中的每個節點上,這可以在跳板機上執行如下命令實現;RHCS的配置文件/etc/cluster/cluster.conf,其在每個節點上都必須有一份,且內容均相同,其默認不存在,因此需要事先創建,ccs_tool命令可以完成此任務。另外,每個集羣通過集羣ID來標識自身,因此,在創建集羣配置文件時需要爲其選定一個集羣名稱,這裏假設其爲tcluster。此命令需要在集羣中的某個節點上執行。

此在node1上配置


4.3.1、安裝RHCS套件:cmam、rgmanager、system-config-cluster

[root@stepping ~]# hcp ssh node$I "yum -y install cman rgmanager system-config-cluster"; done


說明:以下操作都是在node1.example.com節點上操作

4.3.2建立集羣tcluster

[root@node1 ~]#ccs_tool create tcluster   ##會在/etc/cluster中生成cluster.conf集羣的配置文件(xml格式)


4.3.3添加fence設備

說明:一個RHCS集羣至少需要一個fence設備,正常環境中,可以選擇將其配置到集羣中來。這裏爲演示環境,沒有可用的fence設備,因此,選擇使用“manual fence”,即手動fence。創建fence設備也需要使用ccs_tool命令進行,其需要在集羣中的某節點上執行,而且需要與前面創建集羣配置文件時所執行的命令在同一個節點上進行。

查看fence代理的名稱,可以通過查看cman安裝生成文件來實現。    

[root@node1 ~]# rpm -ql cman | grep /sbin/fence

命令行添加集羣,但是不能添加資源。

這裏爲tcluster添加名爲meatware的fence設備,其fence代理爲fence-manual。 

[root@node1 ~]# ccs_tool addfence meatware fence-manaual   ##RHCS需要先定義隔離設備
接着可以使用ccs_tool lsfence查看fence設備:    
[root@node1 ~]# ccs_tool lsfence

    


4.3.4爲集羣tcluster添加節點

說明:RHCS集羣需要配置好各節點及相關的fence設備後才能啓動,因此,這裏需要事先將各節點添加進集羣配置文件。每個節點在添加進集羣時,需要至少爲其配置node id(每個節點的id必須惟一)及相關的fence設備兩個屬性。ccs_tool的addnode子命令可以完成節點添加。例如將前面規劃的三個集羣節點添加至集羣中,可以使用如下命令實現。

[root@node1 html]# ccs_tool addnode -n 1 -f meatware node1.example.com 
running ccs_tool update...  
[root@node1 html]# ccs_tool addnode -n 2 -f meatware node2.example.com  
running ccs_tool update...  
[root@node1 html]# ccs_tool addnode -n 3 -f meatware node3.example.com  
running ccs_tool update...
  -n 指定節點ID 
  -f 指定fence設備


ok這些添加完成就可以啓動集羣了,必須在每個節點啓動,這個不能在stepping主機上進行操作,因爲此服務需要一個節點一個節點的進行啓動,當所有服務器的服務都啓動起來以後才能完成配置文件的複製才能啓動完成


4.3.5、各個節點上分別啓動cman服務

[root@node1 ~]#service cman start
[root@node2 ~]#service cman start
[root@node3 ~]#service cman start


4.3.6、在stepping上啓動rgmanager服務,

[root@stepping ~]# hcp ssh node$I "service rgmanager start"; done
[root@stepping ~]# hcp ssh node$I "cman_tool status"; done
cman_tool的nodes子命令則可以列出集羣中每個節點的相關信息。    
[root@stepping ~]# hcp ssh node$I "cman_tool nodes"; done


4.3.7、配置集羣服務涉及到配置故障轉移域、服務及資源,這些需要手動修改集羣配置文件,或使用system-config-cluster這個GUI程序完成。這裏使用GUI的方式進行

[root@node1 ~]#system-config-cluster &

1.添加Resources內的IP資源

wKioL1P2vKqS7EZTAAI1A54JFcs680.jpg

wKiom1P2u5KRfxxKAAHYKwv3mh8131.jpg

wKioL1P2vPHDpu04AALl1ue1xKM151.jpg

2.定義httpd資源


wKioL1P2vROAHsP7AALgMGBI8yM269.jpg



3.定義服務。


wKiom1P2u_zT-gfdAAKpCWdD0Iw787.jpg

wKioL1P2vRSDCMnqAAPcHO6qopY932.jpg

4.配置好以後點擊右上角的按鈕“send to cluster”提交給服務器

wKiom1P2vDyyUG4_AAVMcSPM5Dw077.jpg

5.然後進入節點查看節點狀態:

[root@node1 ~]# clustat
[root@node1 ~]# clustat
luster Status for tcluster @ Wed Nov 28 18:38:19 2012 
Member Status: Quorate 
 
Member Name                                     ID   Status 
------ ----                                     ---- ------ 
node1.example.com                                     1 Online, rgmanager 
node2.example.com                                     2 Online, rgmanager 
node3.example.com                                     3 Online, Local, rgmanager 
 
Service Name                           Owner (Last)                    State          
------- ----                           ----- ------                    -----          
service:WebService                     node1.example.com                 started


6.利用clusvcadm –r webservice –m node1.example.com可以把服務遷移到節點node1上去



五、安裝target並配置

5.1、安裝scsi-target-utils的rpm包

[root@node4 ~]# yum install scsi-target-utils

5.2、建立一2G分區,我建的是/dev/sda5  ##不要格式化,記得partprobe


5.3 編輯配置文件/etc/tgt/targets.conf,添加一個target,如下

   

<target iqn.2014-08.com.example.dengyw:tcluster.disk1> 
        backing-store /dev/sda5           ##後備存儲,一般指一個分區,或lvm設備 
        initiator-address 192.168.0.0/24   ##指定intiaor只能是這個地址範圍 
        #direct-store /dev/sdb          ##直接存儲,通常指一個磁盤如/dev/sda5 
        #incominguser redhat redhat    ##定義基於賬戶認證Initiator,後面的是賬號與密碼 
        #outgoinguser userA secretpassA  ##Initiator也可以驗證target,這個target的賬號密碼 
    </target> 
    ##targetname 格式 iqn-name: iqn.yyyy-mm.<reversed domain name>[identifer] 
-------------------------------不是很華麗的分隔線-------------------------------------
    我們也可以有命令行來配置,只不過重啓後會失效哦 
    用法:tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION].. 
    新增target: 
    tgtadm --lld iscsi --op new --mode target --tid 1 --targetname \
    iqn.2014-08.com.example.dengyw:tcluster.disk1
    顯示新增的target: 
    tgtadm --lld iscsi --op show --mode target 
    新增一localunit: 
    tgtadm --lld -iscsi --op new --mode localunit --tid 1 --lun 1 --backing-store /dev/sda5 
    新增ACL允許192.168.0.0/24網段使用: 
    tgtadm --lld iscsi --op bind --tid 1 --initiator-address 192.168.0.0/24 
    新增賬戶認證: 
    建立賬戶: 
    tgtadm --lld iscsi --op new --mode account  --user redhat --password redhat 
    查看新建賬戶: 
    tgtadm --lld iscsi --op show --mode account 
    綁定賬戶到target: 
    tgtadm --lld iscsi --op bind --mode account --tid 1 --user hadoop 
    查看target信息: 
    tgtadm --lld iscsi --op show --mode target


5.4 啓動tgtd服務,驗證target是否分享出去

service tgtd start 
tgtadm --lld iscsi --op show --mode target 
 
    Target 1: iqn.2014-08.com.example.dengyw:tcluster.disk1:sda5 
    System information: 
        Driver: iscsi 
        State: ready 
    I_T nexus information: 
    LUN information: 
        LUN: 0 
            Type: controller 
            SCSI ID: IET     0000000 
            SCSI SN: beaf0 
            Size: 0 MB, Block size: 1 
            Online: Yes 
            Removable media: No 
            Readonly: No 
            Backing store type: null 
            Backing store path: None 
            Backing store flags:  
        LUN: 1 
            Type: disk 
            SCSI ID: IET     0000001 
            SCSI SN: beaf11 
            Size: 012 MB, Block size: 512 
            Online: Yes 
            Removable media: No 
            Readonly: No 
            Backing store type: rdwr 
            Backing store path: /dev/sda5 
            Backing store flags:  
    Account information: 
    ACL information: 
        192.168.0.0/24


設置訪問控制列表,允許此網段內的主機使用

5.5設置開機自動啓動

[root@node4 ~]#chkconfig tgtd on


六、安裝配置scis的客戶端並讓其發現使用SCSI


6.1在node1、node2、node3上分別安裝iscsi-initiator-utils,此命令在stepping上執行如下命令

[root@stepping ~]# hcp ssh node$I "yum install -y iscsi-initiator-utils"; done                       #redhat上可能已經安裝過了

6.2分別設置各個節點的名稱

[root@stepping ~]# hcp ssh node$I "echo "InitiatorName=iqn.2014-08.com.example.dengyw" > /etc/iscsi/initiatorname.iscsi"; done

   

6.3啓動iscsi服務並設置成開機啓動

[root@stepping ~]# hcp ssh node$I 'service iscsi start' ; done
[root@stepping ~]# hcp ssh node$I 'chkconfig iscsi on' ; done


6.4發現target並進行登錄

[root@stepping ~]# hcp ssh node$I 'iscsiadm -m discovery -t st -p 192.168.0.14' ; done
[root@stepping ~]# hcp ssh node$I 'iscsiadm -m node -T iqn.2014-08.com.example.dengyw:tcluster.disk1 -p 192.168.0.14 -l' ; done
      -m 指定模式 man 一下 
      -t sendtargets 在discovery模式下使用 
      -p portal 指定target的IP與端口,如果是默認端口3260可省略 
      -l login  登錄 
      -u logout 個爲登出


6.5在node1、node2、node3上分別安裝gfs2-utils、lvm2-cluster

[root@stepping ~]# hcp ssh node$I "yum install -y gfs2-utils lvm2-cluster"; done #安裝服務
[root@stepping ~]# hcp ssh node$I "lvmconf --enable-cluster"; done   #開啓lvm支持clvm,也可以在/etc/lvm/lvm.conf內設置locking_type = 3 即可
[root@stepping ~]# hap ssh node$I "service clvmd start"; done   #啓動服務


6.6下面在node1上進行配置集羣邏輯卷

[root@node1 ~]# pvcreate /dev/sdb
[root@node1 ~]# vgcreate myvg /dev/sdb
[root@node1 ~]# lvcreate -L 500M -n mydata myvg

此時在其他節點上查看,就可以看到我們創建的邏輯捲了

[root@node2 ~]# lvs


6.7格式化上面新建的邏輯卷

[root@node1 ~]# mkfs.gfs2 -p lock_dlm -t tcluster:ltb1 -j 3 /dev/myvg/mydata
      mkfs.gfs2 
        -j #: 指定日誌區域的個數,有幾個就能夠被幾個節點所掛載;
        -J #: 指定日誌區域的大小,默認爲128MB; 
        -p {lock_dlm|lock_nolock}: 
        -t <name>: 鎖表的名稱,格式爲clustername:locktablename, clustername爲當前節點所在的集羣的名稱,locktablename要在當前集羣惟一


6.8下面進行掛載文件系統,需要在每個節點上都掛載

[root@node1 ~]# mount -t gfs2 /dev/myvg/mydata /var/www/html/
[root@node2 ~]# mount -t gfs2 /dev/myvg/mydata /var/www/html/
[root@node3 ~]# mount -t gfs2 /dev/myvg/mydata /var/www/html/


6.9在node1上創建index.html

[root@node1 ~]# cd /var/www/html/
[root@node1 html]# vim index.html 添加如下
gfs2.example.com

在節點一上增加的內容其會自動同步到其他節點上的

現再訪問vip,其主頁內容如下,已經變成了我們共享存儲上的主頁了


下面把服務前移到node1上去並進行測試



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章