RHCS構(gòu)架
corosync(cman)
1.4.5
2.3.0 (needle)
votequorum(投票功能)
pacemaker(rgmanager)
gfs:Global File System
gfs2:Global File System
ocfs2:Oracle Cluster File System
dlm:Distributed Lock Manager 分布式鎖管理器
gfs : google file system
LVM: Logical Volume Manager
cLVM:Cluster LVM
借助于HA的功能,將某節(jié)點(diǎn)對(duì)LVM操作通知給其它節(jié)點(diǎn)
CCS :Cluster configuration System
CMAN:/etc/cluster/cluster.conf
RHCS: Failover Domain
服務(wù):故障轉(zhuǎn)移域:Service
HA Server: VIP, httpd, Filesystem
配置文件管理、軟件分發(fā):puppet
批量管理工具
RHCS:luci/ricci
pcs
RHCS集群配置
HA:
node1 node1.magedu.com 172.16.100.6
steppingstone.magedu.com 172.16.100.100
前提:
1、時(shí)間同步;
2、名稱解析,且每個(gè)主機(jī)的主機(jī)名與其'uname -n'保持一致;
3、配置好每個(gè)節(jié)點(diǎn)的Yum;
RHCS:
cman, rgmanager, system-config-cluster
RHCS:
1、每個(gè)集群都有惟一集群名稱;
2、至少有一個(gè)fence設(shè)備;
3、至少應(yīng)該有三個(gè)節(jié)點(diǎn);兩個(gè)節(jié)點(diǎn)的場(chǎng)景中要使用qdisk;
兩個(gè)資源:
VIP
httpd
clusvcadm 命令
clusvcadm -r <grop> -m <member>
cman_tool 命令
cman_tool nodes 查看節(jié)點(diǎn)
ccs_tool lsnode
clustat命令
system-config-cluster 圖形配置
#ccs_tool create tcluster
#ccs_tool addfence meatware fence_manual
#ccs_tool addnode -v 1 -n 1 -f meatware node1.amd5.cn
#ccs_tool addnode -v 1 -n 2 -f meatware node2.amd5.cn
#ccs_tool addnode -v 1 -n 3 -f meatware node3.amd5.cn
#service cman start
RHCS集群配置
前提:
1)本配置共有三個(gè)測(cè)試節(jié)點(diǎn),分別node1.amd5.cn、node2.amd5.cn和node3.amd5.cn,相的IP地址分別為172.16.100.6、172.16.100.7和172.16.100.8;系統(tǒng)為rhel5.8 32bit;
2)集群服務(wù)為apache的httpd服務(wù);
3)提供web服務(wù)的地址為172.16.100.1;
4)為集群中的每個(gè)節(jié)點(diǎn)事先配置好yum源;
5) 額外提供了主機(jī)172.16.100.100做為跳板機(jī),以其為平臺(tái)實(shí)現(xiàn)對(duì)集群中各節(jié)點(diǎn)的管理;其主機(jī)名稱為stepping.amd5.cn;
一、準(zhǔn)備工作
為了配置一臺(tái)Linux主機(jī)成為HA的節(jié)點(diǎn),通常需要做出如下的準(zhǔn)備工作:
1.1 設(shè)定主機(jī)名稱解析
所有節(jié)點(diǎn)的主機(jī)名稱和對(duì)應(yīng)的IP地址解析服務(wù)可以正常工作,且每個(gè)節(jié)點(diǎn)的主機(jī)名稱需要跟"uname -n“命令的結(jié)果保持一致;因此,需要保證三個(gè)節(jié)點(diǎn)上的/etc/hosts文件均為下面的內(nèi)容:
172.16.100.6 node1.amd5.cn node1
172.16.100.7 node2.amd5.cn node2
172.16.100.8 node3.amd5.cn node3
為了使得重新啟動(dòng)系統(tǒng)后仍能保持如上的主機(jī)名稱,還分別需要在各節(jié)點(diǎn)執(zhí)行類似如下的命令:
Node1:
# sed -i 's@\(HOSTNAME=\).*@\1node1.amd5.cn@g' /etc/sysconfig/network
# hostname node1.amd5.cn
Node2:
# sed -i 's@\(HOSTNAME=\).*@\1node2.amd5.cn@g' /etc/sysconfig/network
# hostname node2.amd5.cn
Node3:
# sed -i 's@\(HOSTNAME=\).*@\1node3.amd5.cn@g' /etc/sysconfig/network
# hostname node3.amd5.cn
1.2 管理機(jī)設(shè)定
后續(xù)的諸多設(shè)定,如rpm包安裝、配置文件修改等都需要在三個(gè)節(jié)點(diǎn)上同時(shí)進(jìn)行;為了便于實(shí)現(xiàn)此過程,我們這里提供了一臺(tái)跳板機(jī)172.16.100.100,其可以以基于密鑰認(rèn)證的方式分別與三個(gè)節(jié)點(diǎn)進(jìn)行通信。實(shí)際使用中,如果沒有專用的跳板機(jī),也可以以三個(gè)節(jié)點(diǎn)中的某節(jié)點(diǎn)來替代。
首先讓跳板機(jī)能以主機(jī)名稱與各節(jié)點(diǎn)進(jìn)行通信,此為非必須,僅為使用方便。在跳板機(jī)上建立/etc/hosts文件,內(nèi)容如下:
172.16.100.6 node1.amd5.cn node1
172.16.100.7 node2.amd5.cn node2
172.16.100.8 node3.amd5.cn node3
接著在跳板機(jī)上為ssh生成密鑰:
# ssh-keygen -t rsa -P ''
其次生成的密鑰的公鑰傳輸至集群中的每個(gè)節(jié)點(diǎn):
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3
說明:如果不想使用跳板機(jī),后面演示過程中,但凡在跳板機(jī)上以循環(huán)方式執(zhí)行的命令均可以分別在各節(jié)點(diǎn)執(zhí)行的方式進(jìn)行。
二、集群安裝
RHCS的核心組件為cman和rgmanager,其中cman為基于openais的“集群基礎(chǔ)架構(gòu)層”,rgmanager為資源管理器。RHCS的集群中資源的配置需要修改其主配置文件/etc/cluster/cluster.xml實(shí)現(xiàn),這對(duì)于很多用戶來說是比較有挑戰(zhàn)性的,因此,RHEL提供了system-config-cluster這個(gè)GUI工具,其僅安裝在集群中的某一節(jié)點(diǎn)上即可,而cman和rgmanager需要分別安裝在集群中的每個(gè)節(jié)點(diǎn)上。這里選擇將此三個(gè)rpm包分別安裝在了集群中的每個(gè)節(jié)點(diǎn)上,這可以在跳板機(jī)上執(zhí)行如下命令實(shí)現(xiàn):
# for I in {1..3}; do ssh node$I 'yum -y install cman rgmanager system-config-cluster'; done
三、集群配置及其啟動(dòng)
3.1 為集群創(chuàng)建配置文件
RHCS的配置文件/etc/cluster/cluster.conf,其在每個(gè)節(jié)點(diǎn)上都必須有一份,且內(nèi)容均相同,其默認(rèn)不存在,因此需要事先創(chuàng)建,ccs_tool命令可以完成此任務(wù)。另外,每個(gè)集群通過集群ID來標(biāo)識(shí)自身,因此,在創(chuàng)建集群配置文件時(shí)需要為其選定一個(gè)集群名稱,這里假設(shè)其為tcluster。此命令需要在集群中的某個(gè)節(jié)點(diǎn)上執(zhí)行。
# ccs_tool create tcluster
查看生成的配置文件的內(nèi)容:
# cat /etc/cluster/cluster.conf
<?xml versi>
<cluster name="tcluster" config_versi>
<clusternodes/>
<fencedevices/>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
ccs_tool命令用于在線更新CCS的配置文件,其有許多子命令,可以使用-h獲取其使用幫助及每個(gè)子命令的使用幫助。
3.2 為集群添加fence設(shè)備
一個(gè)RHCS集群至少需要一個(gè)fence設(shè)備,正常環(huán)境中,可以選擇將其配置到集群中來。這里為演示環(huán)境,沒有可用的fence設(shè)備,因此,選擇使用“manual fence”,即手動(dòng)fence。創(chuàng)建fence設(shè)備也需要使用ccs_tool命令進(jìn)行,其需要在集群中的某節(jié)點(diǎn)上執(zhí)行,而且需要與前面創(chuàng)建集群配置文件時(shí)所執(zhí)行的命令在同一個(gè)節(jié)點(diǎn)上進(jìn)行。
查看fence代理的名稱,可以通過查看cman安裝生成文件來實(shí)現(xiàn)。
# rpm -ql cman | grep /sbin/fence
/sbin/fence_ack_manual
/sbin/fence_apc
/sbin/fence_apc_snmp
/sbin/fence_bladecenter
/sbin/fence_brocade
/sbin/fence_bullpap
/sbin/fence_cisco_mds
/sbin/fence_cisco_ucs
/sbin/fence_drac
/sbin/fence_drac5
/sbin/fence_egenera
/sbin/fence_ifmib
/sbin/fence_ilo
/sbin/fence_ilo_mp
/sbin/fence_ipmilan
/sbin/fence_lpar
/sbin/fence_manual
/sbin/fence_mcdata
/sbin/fence_node
/sbin/fence_rhevm
/sbin/fence_rps10
/sbin/fence_rsa
/sbin/fence_rsb
/sbin/fence_sanbox2
/sbin/fence_scsi
/sbin/fence_scsi_test
/sbin/fence_tool
/sbin/fence_virsh
/sbin/fence_vixel
/sbin/fence_vmware
/sbin/fence_vmware_helper
/sbin/fence_vmware_soap
/sbin/fence_wti
/sbin/fence_xvm
/sbin/fence_xvmd
/sbin/fenced
這里為tcluster添加名為meatware的fence設(shè)備,其fence代理為fence-manual。
# ccs_tool addfence meatware fence-manaual
接著可以使用ccs_tool lsfence查看fence設(shè)備:
# ccs_tool lsfence
Name Agent
meatware fence-manaual
3.3 為集群添加節(jié)點(diǎn)
RHCS集群需要配置好各節(jié)點(diǎn)及相關(guān)的fence設(shè)備后才能啟動(dòng),因此,這里需要事先將各節(jié)點(diǎn)添加進(jìn)集群配置文件。每個(gè)節(jié)點(diǎn)在添加進(jìn)集群時(shí),需要至少為其配置node id(每個(gè)節(jié)點(diǎn)的id必須惟一)及相關(guān)的fence設(shè)備兩個(gè)屬性。ccs_tool的addnode子命令可以完成節(jié)點(diǎn)添加。例如將前面規(guī)劃的三個(gè)集群節(jié)點(diǎn)添加至集群中,可以使用如下命令實(shí)現(xiàn)。
# ccs_tool addnode -n 1 -f meatware node1.amd5.cn
# ccs_tool addnode -n 2 -f meatware node2.amd5.cn
# ccs_tool addnode -n 3 -f meatware node3.amd5.cn
查看已經(jīng)添加完成的節(jié)點(diǎn)及相關(guān)信息:
# ccs_tool lsnode
Cluster name: tcluster, config_version: 5
Nodename Votes Nodeid Fencetype
node1.amd5.cn 1 1 meatware
node2.amd5.cn 1 2 meatware
node3.amd5.cn 1 3 meatware
3.4 啟動(dòng)集群
RHCS集群會(huì)等待各節(jié)點(diǎn)都啟動(dòng)后方才進(jìn)入正常工作狀態(tài),因此,需要把集群各節(jié)點(diǎn)上的cman服務(wù)同時(shí)啟動(dòng)起來。這分別需要在各節(jié)點(diǎn)上執(zhí)行如下命令。
# /etc/rc.d/init.d/cman start
查看服務(wù)監(jiān)聽的端口,以驗(yàn)正服務(wù)啟動(dòng)狀況:
# netstat -tunlp | grep -E "ccsd|aisexec"
tcp 0 0 127.0.0.1:50006 0.0.0.0:* LISTEN 14544/ccsd
tcp 0 0 0.0.0.0:50008 0.0.0.0:* LISTEN 14544/ccsd
udp 0 0 172.16.100.6:5405 0.0.0.0:* 14552/aisexec
udp 0 0 172.16.100.6:5149 0.0.0.0:* 14552/aisexec
udp 0 0 239.192.110.162:5405 0.0.0.0:* 14552/aisexec
udp 0 0 0.0.0.0:50007 0.0.0.0:* 14544/ccsd
而后在各節(jié)點(diǎn)啟動(dòng)rgmanager服務(wù),這可以在跳板機(jī)上執(zhí)行如下命令實(shí)現(xiàn):
# for I in {1..3}; do ssh node$I '/etc/init.d/rgmanager start'; done
3.5 查看集群狀態(tài)信息
clustat命令可用于顯示集群成員信息、法定票數(shù)信息及服務(wù)相關(guān)信息。
# clustat
Cluster Status for tcluster @ Mon May 13 12:06:53 2013
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.amd5.cn 1 Online, Local
node2.amd5.cn 2 Online
node3.amd5.cn 3 Online
cman_tool的status子命令則以當(dāng)前節(jié)點(diǎn)為視角來顯示集群的相關(guān)信息。
# cman_tool status
Version: 6.2.0
Config Version: 5
Cluster Name: tcluster
Cluster Id: 28212
Cluster Member: Yes
Cluster Generation: 12
Membership state: Cluster-Member
Nodes: 3
Expected votes: 3
Total votes: 3
Node votes: 1
Quorum: 2
Active subsystems: 8
Flags: Dirty
Ports Bound: 0 177
Node name: node1.amd5.cn
Node ID: 1
Multicast addresses: 239.192.110.162
Node addresses: 172.16.100.6
cman_tool的nodes子命令則可以列出集群中每個(gè)節(jié)點(diǎn)的相關(guān)信息。
# cman_tool nodes
Node Sts Inc Joined Name
1 M 4 2013-05-13 12:00:09 node1.amd5.cn
2 M 8 2013-05-13 12:00:28 node2.amd5.cn
3 M 12 2013-05-13 12:00:39 node3.amd5.cn
cman_tool的nodes子命令則可以列出集群中每個(gè)服務(wù)的相關(guān)信息。
# cman_tool services
type level name id state
fence 0 default 00010001 none
[1 2 3]
dlm 1 rgmanager 00020001 none
[1 2 3]
四、配置集群服務(wù)
配置集群服務(wù)涉及到配置故障轉(zhuǎn)移域、服務(wù)及資源,這些需要手動(dòng)修改集群配置文件,或使用system-config-cluster這個(gè)GUI程序完成。
五、配置使用gfs2文件系統(tǒng)
這里假設(shè)集群節(jié)點(diǎn)均已經(jīng)正常登錄某iscsi target,本地正常映射了磁盤/dev/sdb,且創(chuàng)建分區(qū)/dev/sdb1和/dev/sdb2。
5.1 在集群節(jié)點(diǎn)上安裝gfs2-utils
以下命令在跳板機(jī)上執(zhí)行,實(shí)現(xiàn)在集群所有節(jié)點(diǎn)上統(tǒng)一部署安裝gfs2-utils并啟動(dòng)gfs2的服務(wù)
# for I in {1..3}; do ssh node$I 'yum -y install gfs2-utils; service gfs2 start'; done
在集群中的某節(jié)點(diǎn)上執(zhí)行如下命令,查看gfs2模塊的裝載情況:
# lsmod | grep gfs
gfs2 354825 1 lock_dlm
configfs 28625 2 dlm
5.2 gfs2相關(guān)命令行工具的使用
mkfs.gfs2為gfs2文件系統(tǒng)創(chuàng)建工具,其一般常用的選項(xiàng)有:
-b BlockSize:指定文件系統(tǒng)塊大小,最小為512,默認(rèn)為4096;
-J MegaBytes:指定gfs2日志區(qū)域大小,默認(rèn)為128MB,最小值為8MB;
-j Number:指定創(chuàng)建gfs2文件系統(tǒng)時(shí)所創(chuàng)建的日志區(qū)域個(gè)數(shù),一般需要為每個(gè)掛載的客戶端指定一個(gè)日志區(qū)域;
-p LockProtoName:所使用的鎖協(xié)議名稱,通常為lock_dlm或lock_nolock之一;
-t LockTableName:鎖表名稱,一般來說一個(gè)集群文件系統(tǒng)需一個(gè)鎖表名以便讓集群節(jié)點(diǎn)在施加文件鎖時(shí)得悉其所關(guān)聯(lián)到的集群文件系統(tǒng),鎖表名稱為clustername:fsname,其中的clustername必須跟集群配置文件中的集群名稱保持一致,因此,也僅有此集群內(nèi)的節(jié)點(diǎn)可訪問此集群文件系統(tǒng);此外,同一個(gè)集群內(nèi),每個(gè)文件系統(tǒng)的名稱必須惟一;
因此,若要在前面的/dev/sdb1上創(chuàng)建集群文件系統(tǒng)gfs2,可以使用如下命令:
# mkfs.gfs2 -j 3 -p lock_dlm -t tcluster:sdb1 /dev/sdb1
六、配置使用cLVM(集群邏輯卷)
在RHCS集群節(jié)點(diǎn)上安裝lvm2-cluster:
# for I in {1..3}; do ssh node$I 'yum -y install lvm2-cluster;'; done
在RHCS的各節(jié)點(diǎn)上,為lvm啟用集群功能:
# for I in {1..3}; do ssh node$I 'lvmconf --enable-cluster'; done
而后,為RHCS各節(jié)點(diǎn)啟動(dòng)clvmd服務(wù):
# for I in {1..3}; do ssh node$I 'service clvmd start'; done
如果需要?jiǎng)?chuàng)建物理卷、卷組和邏輯卷,使用管理單機(jī)邏輯卷的相關(guān)命令即可;比如,將/dev/sdb2創(chuàng)建為物理卷:
# pvcreate /dev/sdb2
# pvs
此時(shí),在另外的其它節(jié)點(diǎn)上也能夠看到剛剛創(chuàng)建的物理卷。
創(chuàng)建卷組和邏輯卷:
# vgcreate clustervg /dev/sdb2
# lvcreate -L 2G -n clusterlv clustervg
七、gfs2的其它管理工具
7.1 gfs2-tool
查看掛載至/mydata目錄上的某gfs2文件系統(tǒng)上的日志相關(guān)信息:
# gfs2-tool journals /mydata
7.2 gfs2-jadd
為掛載至/mydata的gfs2文件系統(tǒng)添加新的日志區(qū)域:
# gfs2_jadd -j 1 /mydata
7.3 gfs2-grow
如果需要擴(kuò)展邏輯卷,其方式與普通邏輯卷相同,只是gfs2文件系統(tǒng)的擴(kuò)展,則需要gfs2_grow進(jìn)行,其需要以掛載點(diǎn)為參數(shù):
# gfs2-grow /mydata
7.4 gfs2-tool gettune
附:
Red Hat Resource Group Manager provides high availability of critical server applications in the event of planned or unplanned system downtime.
創(chuàng)建一個(gè)GFS文件系統(tǒng):
需要提供的信息:
1、鎖類型:
lock_nolock
lock_dlm
2、鎖文件的名字,通常即文件系統(tǒng)名
cluster_name:fs_name
3、日志的個(gè)數(shù),通常一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)日志文件,但建議提供比節(jié)點(diǎn)數(shù)更多的日志數(shù)目,以提供冗余;
4、日志文件大小
5、文件系統(tǒng)大小
Syntax: gfs_mkfs -p lock_dlm -t ClusterName:FSName -j Number -b block_size -J journal_size BlockDevice
如:
# gfs_mkfs -p lock_dlm -t gfscluster:gfslv -j 5 /dev/vg0/gfslv
可以通過其對(duì)應(yīng)掛載點(diǎn)查看gfs文件系統(tǒng)屬性信息;
# gfs_tool df /mount_point
掛載GFS文件系統(tǒng):
mount -o StdMountOpts,GFSOptions -t gfs DEVICE MOUNTPOINT
前提:掛載GFS文件的主機(jī)必須是對(duì)應(yīng)集群中的節(jié)點(diǎn);
掛載GFS文件時(shí)有如下常用選項(xiàng)可用:
lockproto=[locl_dlm,lock_nolock]
locktable=clustername:fsname
upgrade # GFS版本升級(jí)時(shí)有用
acl
如果不想每一次啟用GFS時(shí)都得指定某選項(xiàng),也可以通過類似如下命令為其一次性指定:
# gfs_tool margs "lockproto=lock_dlm,acl"
載入相應(yīng)的gfs模塊,并查看lv是否成功
# modprobe gfs
# modprobe gfs2
# chkconfig gfs on
# chkconfig gfs2 on
# chkconfig clvmd on
# /etc/init.d/gfs restart
# /etc/init.d/gfs2 restart
# /etc/init.d/clvmd restart
# lvscan
lvmconf --enale-cluster
配置故障切換域
故障切換域是一個(gè)命名的集群節(jié)點(diǎn)子集,它可在節(jié)點(diǎn)失敗事件中運(yùn)行集群服務(wù)。故障切換域有以下特征:
無限制 — 允許您為在子集指定首選成員子集,但分配給這個(gè)域名的集群服務(wù)可在任意可用成員中運(yùn)行。
限制 — 允許您限制可運(yùn)行具體集群服務(wù)的成員。如果在限制故障切換域中沒有可用成員,則無法啟動(dòng)集群服務(wù)(手動(dòng)或者使用集群軟件均不可行)。
無序 — 當(dāng)將一個(gè)集群服務(wù)分配給一個(gè)無序故障切換域時(shí),則可從可用故障切換域成員中隨機(jī)選擇運(yùn)行集群服務(wù)的成員,沒有優(yōu)先順序。
有序的 — 可讓您在故障切換域的成員間指定順序。該列表頂端的成員是首選成員,接下來是列表中的第二個(gè)成員,依此類推。
故障恢復(fù) — 允許您指定在故障切換域中的服務(wù)是否應(yīng)該恢復(fù)到節(jié)點(diǎn)失敗前最初運(yùn)行的節(jié)點(diǎn)。配置這個(gè)特性在作為有序故障切換域一部分節(jié)點(diǎn)重復(fù)失敗的環(huán)境中很有幫助。在那種情況下,如果某個(gè)節(jié)點(diǎn)是故障切換域中的首選節(jié)點(diǎn),在可能在首選節(jié)點(diǎn)和其它節(jié)點(diǎn)間重復(fù)切換和恢復(fù)某個(gè)服務(wù),從而不會(huì)對(duì)性能產(chǎn)生嚴(yán)重影響。