RHCS原理及操作
RHCS組件介紹:
1.1 分布式集群管理器(CMAN)
Cluster Manager,簡稱CMAN,是一個分布式集群管理工具,它運行在集群的各個節點上,為RHCS提供集群管理任務。CMAN用於管理集群成員、消息和通 知。它通過監控每個節點的運行狀態來了解節點成員之間的關系,當集群中某個節點出現故障,節點成員關系將發生改變,CMAN及時將這種改變通知底層,進而做出相應的調整。
1.2 鎖管理(DLM)
Distributed Lock Manager,簡稱DLM,表示一個分布式鎖管理器,它是RHCS的一個底層基礎構件,同時也為集群提供了一個公用的鎖運行機制,在RHCS集群系統中,DLM運行在集群的每個節點上,GFS通過鎖管理器的鎖機制來同步訪問文件系統元數據。CLVM通過鎖管理器來同步更新數據到LVM卷和卷組。DLM不需要設定鎖管理服務器,它采用對等的鎖管理方式,大大的提高了處理性能。同時,DLM避免了當單個節點失敗需要整體恢復的性能瓶頸,另 外,DLM的請求都是本地的,不需要網絡請求,因而請求會立即生效。最後,DLM通過分層機制,可以實現多個鎖空間的並行鎖模式。
1.3 配置文件管理(CCS)
Cluster Configuration System,簡稱CCS,主要用於集群配置文件管理和配置文件在節點之間的同步。CCS運行在集群的每個節點上,監控每個集群節點上的單一配置文件 /etc/cluster/cluster.conf的狀態,當這個文件發生任何變化時,都將此變化更新到集群中的每個節點,時刻保持每個節點的配置文件 同步。例如,管理員在節點A上更新了集群配置文件,CCS發現A節點的配置文件發生變化後,馬上將此變化傳播到其它節點上去。RHCS的配置文件是 cluster.conf,它是一個xml文件,具體包含集群名稱、集群節點信息、集群資源和服務信息、fence設備等。
1.4 柵設備(FENCE)
FENCE設備是RHCS集群中必不可少的一個組成部分,通過FENCE設備可以避免因出現不可預知的情況而造成的“腦裂”現象,FENCE設備的出 現,就是為了解決類似這些問題,Fence設備主要就是通過服務器或存儲本身的硬件管理接口,或者外部電源管理設備,來對服務器或存儲直接發出硬件管理指 令,將服務器重啟或關機,或者與網絡斷開連接。FENCE的工作原理是:當意外原因導致主機異常或者宕機時,備機會首先調用FENCE設備,然後通過 FENCE設備將異常主機重啟或者從網絡隔離,當FENCE操作成功執行後,返回信息給備機,備機在接到FENCE成功的信息後,開始接管主機的服務和資 源。這樣通過FENCE設備,將異常節點占據的資源進行了釋放,保證了資源和服務始終運行在一個節點上。RHCS的FENCE設備可以分為兩種:內部 FENCE和外部FENCE,常用的內部FENCE有IBM RSAII卡,HP的iLO卡,還有IPMI的設備等,外部fence設備有UPS、SAN SWITCH、NETWORK SWITCH等
RHCS操作:
一、啟動RHCS集群
RHCS集群的核心進程有cman和rgmanager,要啟動集群,依次在集群的每個節點執行如下命令即可:
service cman start
service rgmanager start
需要注意的是,執行這兩個命令是有先後順序的,需要首先啟動cman,然後在啟動rgmanager。在集群所有節點成功啟動cman服務後,然後繼續依次在每個節點啟動rgmanager服務。
二、關閉RHCS集群
與啟動集群服務剛好相反,關閉RHCS集群的命令為:
service rgmanager stop
service cman stop
首先在集群的每個節點依次關閉rgmanager服務,等待所有節點的rgmanager服務成功關閉後,再依次關閉每個節點的cman服務即可完成真個集群服務的關閉。
有時在關閉cman服務時,可能會提示關閉失敗,此時可以檢查本機的共享存儲GFS2文件系統是否已經卸載,還可以檢查其它節點的rgmanager服務是否都已經正常關閉。
三、管理應用服務
集群系統啟動後,默認是自動啟動應用服務的,但是如果某個應用服務沒有自動啟動,就需要通過手工方式來啟動。管理應用服務的命令是clusvcadm,通過這個命令可以啟動、關閉、重啟、切換集群中的應用服務。
1. 啟動某個應用服務
可以通過如下方式啟動某個節點的應用服務:
clusvcadm -e -m
其中:
? Service:表示集群中創建的應用服務名稱。
? Node:表示集群節點名稱。
例如,要啟動節點web1上的webserver服務,操作如下:
[root@web1 ~]# clusvcadm -e webserver -m web1
Member web1 trying to enable service:webserver...Success
service:webserver is now running on web1
可以通過/var/log/messages文件查看啟動應用服務的詳細信息。當webserver啟動後,與服務相關的集群資源:如虛擬IP、應用程序服務腳本也隨之啟動,可以通過如下命令查看集群資源是否已經正常加載:
2. 關閉某個應用服務
可以通過如下方式關閉某個節點的應用服務:
clusvcadm -s -m
例如,要關閉節點Mysql1上的mysqlserver服務,操作如下:
[root@Mysql1 ~]# clusvcadm -s mysqlserver -m Mysql1
Member Mysql1 stopping service:mysqlserver...Success
可以通過/var/log/messages文件查看關閉應用服務的詳細信息。當mysqlserver關閉後,與服務相關的集群資源:如虛擬IP、應用程序服務腳本也隨之釋放。
3. 重啟某個應用服務
可以通過如下方式重啟某個節點的應用服務:
clusvcadm -R -m
例如,要重啟節點web1上的webserver服務,操作如下:
[root@web2 ~]# clusvcadm -R webserver -m web1
Member web1 trying to restart service:webserver...Success
這個命令是在web2節點上執行的,但是也能成功將web1節點上的webserver進行重啟,由此可知,clusvcadm命令在集群任意節點執行都是可以的。
4. 切換某個服務
可以通過如下方式將一個應用服務從一個節點切換到另一個節點:
clusvcadm -r -m
例如,要將節點web1的服務切換到節點web2上,操作如下:
[root@web1 ~]# clusvcadm -r webserver -m web2
Trying to relocate service:webserver to web2...Success
service:webserver is now running on web2
四、監控RHCS集群狀態
通過對RHCS的監控,有助於了解集群每個節點的健康狀況,並能發現問題,及時解決問題,RHCS集群提供了豐富的狀態查看命令,這裡主要介紹下cman_tool、clustat、ccs_tool的使用方法。
1. cman_tool命令
cman_tool的參數比較多,但是用法比較簡單,基本用法格式為:
cman_tool [options]
下面列舉幾個簡單的使用例子:
[root@web1 ~]# cman_tool nodes -a
Node Sts Inc Joined Name
0 M 0 2010-08-23 01:24:00 /dev/sdb7
1 M 2492 2010-08-23 01:22:43 web2
Addresses: 192.168.12.240
2 M 2492 2010-08-23 01:22:43 Mysql1
Addresses: 192.168.12.231
3 M 2492 2010-08-23 01:22:43 Mysql2
Addresses: 192.168.12.232
4 M 2488 2010-08-23 01:22:43 web1
Addresses: 192.168.12.230
此命令顯示了節點名稱,以及對應的節點IP地址和加入集群的時間。
如果要了解更多集群節點信息,可以通過如下命令:
[root@web1 ~]# cman_tool status
Version: 6.2.0
Config Version: 35 #集群配置文件版本號
Cluster Name: mycluster #集群名稱
Cluster Id: 56756
Cluster Member: Yes
Cluster Generation: 2764
Membership state: Cluster-Member
Nodes: 4 #集群節點數
Expected votes: 6 #期望的投票數
Quorum device votes: 2 #表決磁盤投票值
Total votes: 6 #集群中所有投票值大小
Quorum: 4 #集群法定投票值,低於這個值,集群將停止服務
Active subsystems: 9
Flags: Dirty
Ports Bound: 0 177
Node name: web1
Node ID: 4 #本節點在集群中的ID號
Multicast addresses: 239.192.221.146 #集群廣播地址
Node addresses: 192.168.12.230 #本節點對應的IP地址
2. clustat命令
clustat命令使用非常簡單,詳細的使用方法可以通過“clustat -h”獲取幫助信息,這裡僅僅列舉幾個例子。
[root@web1 ~]#clustat -i 3
Cluster Status for mycluster @ Mon Aug 23 18:54:15 2010
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
web2 1 Online, rgmanager
Mysql1 2 Online, rgmanager
Mysql2 3 Online, rgmanager
web1 4 Online, Local, rgmanager
/dev/sdb7 0 Online, Quorum Disk
Service Name Owner (Last) State
------- ---- ----- ------ --------
service:mysqlserver Mysql1 started
service:webserver web1 started
對輸出內容含義如下:
clustat的“-i”參數可以實時的顯示集群系統中每個節點以及服務的運行狀態,“-i 3”表示每三秒刷新一次集群狀態。
在這個輸出中,可以看到每個節點都處於“Online”狀態,表明每個節點都運行正常,如果某個節點退出了集群,對應的狀態應該是“Offline”,同時還可以看到,集群的兩個服務也處於“started”狀態,分別運行在Mysql1節點和web1節點。
另外,通過“ID”一列可以知道集群節點的對應關系,例如,web2在此集群中對應的就是“Node 1”節點,同理,web1對應的是“Node 4”節點。了解集群節點順序有助於對集群日志的解讀。
3. ccs_tool命令
ccs_tool主要用來管理集群配置文件cluster.conf,通過ccs_tool可以在集群中增加/刪除節點、增加/刪除fence設備、更新集群配置文件等操作。
下面是ccs_tool的幾個應用實例:
當在一個節點修改完配置文件後,可以執行“ccs_tool update”指令將配置文件在所有節點進行更新,例如:
[root@web1 cluster]# ccs_tool update /etc/cluster/cluster.conf
Proposed updated config file does not have greater version number.
Current config_version :: 35
Proposed config_version:: 35
Failed to update config file.
ccs_tool是根據cluster.conf中的“config_version”值來決定是否進行更新的,因此在修改完cluster.conf文件後,一定要將cluster.conf的config_version值進行更新,這樣執行ccs_tool時才能更新配置文件。
[root@web1 cluster]# ccs_tool update /etc/cluster/cluster.conf
Config file updated from version 35 to 36
Update complete.
五、管理和維護GFS2文件系統
GFS2文件系統提供了很多管理和維護工具,常用的有gfs2_fsck、gfs2_tool、gfs2_jadd、gfs2_quota、gfs2_convert等,這裡重點介紹前三個命令的用法。
1. gfs2_fsck命令
類似與ext3文件系統下的fsck.ext3命令,主要用於檢測和修復文件系統錯誤。其實GFS2還有一個fsck.gfs2命令,此命令與gfs2_fsck命令完全一致。
gfs2_fsck的用法如下:
gfs2_fsck [-afhnpqvVy]
下面列舉幾個使用例子:
[root@Mysql1 ~]# gfs2_fsck -y /dev/sdb5
Initializing fsck
Validating Resource Group index.
Level 1 RG check.
(level 1 passed)
Starting pass1
Starting pass1c
Pass1c complete
…………
Pass5 complete
gfs2_fsck complete
2. gfs2_tool命令
gfs2_tool命令參數較多,但使用並不復雜,它主要用來查看、修改GFS2文件系統的相關參數信息。
下面列舉幾個使用例子:
1)查看GFS2文件系統掛載信息
[root@web1 ~]# gfs2_tool df /gfs2
/gfs2:
SB lock proto = "lock_dlm"
SB lock table = "mycluster:my-gfs2"
SB ondisk format = 1801
SB multihost format = 1900
Block size = 4096
Journals = 4
Resource Groups = 19
Mounted lock proto = "lock_dlm"
Mounted lock table = "mycluster:my-gfs2"
Mounted host data = "jid=2:id=65539:first=0"
Journal number = 2
Lock module flags = 0
Local flocks = FALSE
Local caching = FALSE
Type Total Blocks Used Blocks Free Blocks use%
--------------- ----------------- ------------- ---------------- -----------
data 1220724 136578 1084146 11%
inodes 1084263 117 1084146 0%
(2)gfs2_tool命令
2)鎖定與解鎖GFS2文件系統:
[root@node1 gfs2]# gfs2_tool freeze /gfs2
[root@node1 gfs2]# gfs2_tool unfreeze /gfs2
GFS2文件系統被鎖定後,無法進行讀寫操作,直到被解鎖。
3)查詢GFS2可掛載的接點數
[root@web1 ~]# gfs2_tool journals /gfs2
journal2 - 128MB
journal3 - 128MB
journal1 - 128MB
journal0 - 128MB
4 journal(s) found.
這裡顯示了可掛載節點數為4,並且每個journal的大小為128M。
4)顯示GFS2的版本信息:
[root@web1 ~]# gfs2_tool version
gfs2_tool 0.1.62 (built Mar 31 2010 07:34:25)
Copyright (C) Red Hat, Inc. 2004-2006 All rights reserved
(3)gfs2-jadd命令
gfs2-jadd主要用來配置GFS2的Journals數量和大小,用法非常簡單:
gfs2_jadd [-cDhJjqV] /path/to/filesystem
下面列舉幾個用例:
設置Journals的大小為64M
[root@Mysql1 ~]# gfs2_jadd -J 64M
將GFS2可同時掛載的節點數目增加到5個
[root@Mysql1 ~]# gfs2_jadd -j 5 /gfs2
另外,另外gfs2_quota用於GFS2文件系統磁盤配額管理,gfs2_convert是一個數據轉換應用程序,它可以對GFS文件系統的元數據進行更新,把它轉換為一個GFS2文件系統。要深入了解它們的使用,請參考幫助信息,這裡不在進行講述。