基於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

資源分配:

1
2
3
4
5
6
node2:172.16.7.1 <--->RS-web1<--->hostname node1.chris.com
node2:172.16.7.2 <--->RS-web2<--->hostname node2.chris.com
node3:172.16.7.3 <--->RS-web3<--->hostname node3.chris.com
node4:172.16.7.4 <--->Target+NtpServer<--->hostname node4.chris.com
VIP : 172.16.7.6
stepping:172.16.7.8 跳板機,此處利用在跳板機上利用循環語句一次性部署多個服務器。

其架構圖如下

四、搭建RHCS的高可用集羣

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

配置hostname

1
2
3
4
5
6
[root@stepping ~]# vim /etc/hosts
172.16.7.1 node1.chris.com node1
172.16.7.2 node2.chris.com node2
172.16.7.3 node3.chris.com node3
172.16.7.4 node4.chris.com node4
172.16.7.8 stepping.chris.com stepping

配置互信

1
2
3
4
5
[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

配置NtpServer服務器

配置之前先把本地磁盤做成yum,需要在每個節點上都配置

把本地磁盤掛載到media目錄下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# mount /dev/cdrom /media 掛載光盤
vim /etc/yum.repos.d/server.repo,添加如下內容
# repos on instructor for cla***oom use
# Main rhel5 server
[base]
name=Instructor Server Repository
baseurl=file:///media/Server
gpgcheck=0
# This one is needed for xen packages
[VT]
name=Instructor VT Repository
baseurl=file:///media/VT
gpgcheck=0
# This one is needed for clustering packages
[Cluster]
name=Instructor Cluster Repository
baseurl=file:///media/Cluster
gpgcheck=0
# This one is needed for cluster storage (GFS, iSCSI target, etc...)
packages
[ClusterStorage]
name=Instructor ClusterStorage Repository
baseurl=file:///media/ClusterStorage
gpgcheck=0

安裝NtpServer服務器

[root@stepping ~]#yum –y install ntp

修改配置文件

[root@stepping ~]#vim /etc/ntp.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 172.16.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服務器,這個必須定義的,指向本地就行

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

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

1
2
alias hap='for I in {1..4}; do' 配置包括Target在內的主機的命令別名
alias hcp='for I in {1..3}; do' 配置不包括Target在內的主機的命令別名

配置node1-node4節點主機名

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

同步各個節點時間

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

圖像 4

複製hosts文件到各個節點

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

圖像 7

關閉各個節點的selinux設置

[root@stepping ~]#hap ssh node$I 'setenforce 0' ; done

配置各個節點上的yum

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

圖像 9

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

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

1
2
[root@stepping ~]#hcp ssh node$I "echo node$I.chris.com
>/var/www/html/index.html"; done

 

#設置節點上的各個主頁內容,分別爲

1
2
3
[root@stepping ~]#node1.chris.com
[root@stepping ~]#node2.chris.com
[root@stepping ~]#node3.chris.com

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

1
2
3
4
[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包分別安裝在了集羣中的每個節點上,這可以在跳板機上執行如下命令實現

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

RHCS的配置文件/etc/cluster/cluster.conf,其在每個節點上都必須有一份,且內容均相同,其默認不存在,因此需要事先創建,ccs_tool命令可以完成此任務。另外,每個集羣通過集羣ID來標識自身,因此,在創建集羣配置文件時需要爲其選定一個集羣名稱,這裏假設其爲tcluster。此命令需要在集羣中的某個節點上執行。

此在node1上配置

圖像 12

添加fence設備

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

查看fence代理的名稱,可以通過查看cman安裝生成文件來實現。 
# rpm -ql cman | grep /sbin/fence

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

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

接着可以使用ccs_tool lsfence查看fence設備: 
# ccs_tool lsfence 
圖像 14

爲集羣添加節點

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

1
2
3
4
5
6
[root@node1 html]# ccs_tool addnode -n 1 -f meatware node1.chris.com
running ccs_tool update...
[root@node1 html]# ccs_tool addnode -n 2 -f meatware node2.chris.com
running ccs_tool update...
[root@node1 html]# ccs_tool addnode -n 3 -f meatware node3.chris.com
running ccs_tool update...

圖像 15

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

service cman start

然後在stepping上啓動rgmanager服務,

1
2
[root@stepping ~]# hcp ssh node$I "service rgmanager start"; done
[root@stepping ~]# hcp ssh node$I "cman_tool status"; done

圖像 16

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

圖像 17

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

添加Resources內的IP資源

定義httpd資源

此處定義了資源以後是無法啓動的,資源還需要定義服務。

圖像 2

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

然後進入節點查看節點狀態:[root@node1 ~]# clustat

圖像 5

在node2上查看相關服務和IP等信息

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

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

五、安裝target並配置

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

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

5.2、系統上有一新的磁盤 /dev/sdb,把此做成scsi,注意:此磁盤千萬不能格式化

配置target

1
2
3
4
[root@node4 ~]# tgtadm --lld iscsi --mode target --op new --targetname
iqn.2013-05.com.chris:testor.disk1 --tid 1
查看
[root@node4 ~]# tgtadm --lld iscsi --mode target --op s

圖像 1

關聯其真正的存儲設備

圖像 2

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

圖像 3

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

1
2
3
4
5
6
在node1、node2、node3上分別安裝iscsi-initiator-utils,此命令在stepping上執行如下命令
[root@stepping ~]# hap ssh node$I "yum install -y iscsi-initiator-utils"; done #RedHat上可能已經安裝過了
[root@stepping ~]# hap ssh node$I "echo" InitiatorAlias=iqn.20135.com.chris:node$I" > /etc/iscsi/initiatorname.iscs"; done #分別設置各個節點的名稱
啓動iscsi服務並設置成開機啓動
[root@stepping ~]# hap ssh node$I 'service iscsi start' ; done
[root@stepping ~]# hap ssh node$I 'chkconfig iscsi on' ; done

發現target並進行登錄

1
2
[root@stepping ~]# hap ssh node$I 'iscsiadm -m discovery -t st -p 172.16.7.4' ; done
[root@stepping ~]# hap ssh node$I 'iscsiadm -m node -T iqn.2013-05.com.chris:testor.disk1 -p 172.16.7.4 -l' ; done

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

1
2
3
[root@stepping ~]# hap ssh node$I "yum install -y gfs2-utils lvm2-cluster"; done #安裝服務
[root@stepping ~]# hap 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 #啓動服務

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

1
2
3
[root@node1 ~]# pvcreate /dev/sdb
[root@node1 ~]# vgcreate myvg /dev/sdb
[root@node1 ~]# lvcreate -L 500M --name mydata myvg

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

[root@node2 ~]# lvs

圖像 8

格式化上面新建的邏輯卷

[root@node1 ~]# mkfs.gfs2 -p lock_dlm -t tcluster:ltb1 -j 3 /dev/myvg/mydata

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

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

[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/

圖像 10

創建index.html

[root@node1 ~]# cd /var/www/html/

[root@node1 html]# vim index.html 添加如下

gfs2.chris.com

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

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

圖像 11

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

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

搭建過程易出錯誤處:

1、時間不同步造成集羣無法進行配置文件傳遞

2、配置過程中一旦出現某個小錯誤,修改不易成功,需要重新配置

3、進程和服務較多,易造成停止和啓動服務的錯亂





http://www.linuxidc.com/Linux/2013-05/84888p4.htm


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