歡迎您光臨本站 註冊首頁

Linux集群--HA略談

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
版權聲明:
本文遵循「署名非商業性使用相同方式共享 2.5 中國大陸」協議
您可以自由複製、發行、展覽、表演、放映、廣播或通過信息網路傳播本作品
您可以根據本作品演義自己的作品
您必須按照作者或者許可人指定的方式對作品進行署名.
您不得將本作品用於商業目的.
如果您改變、轉換本作品或者以本作品為基礎進行創作,您只能採用與本協議相同的許
可協議發布基於本作品的演繹作品.
對任何再使用或者發行,您都必須向他人清楚地展示本作品使用的許可協議條款.
如果得到著作權人的許可,您可以不受任何這些條件的限制. asram 通過特殊的軟體將若干伺服器連接在一起並提供故障切換功能的實體我們稱之為高可用集群.可用性是指系統的uptime,在7x24x365的工作環境中,99%的可用性指在一年中可以有87小時36分鐘的DOWN機時間,通常在關鍵服務中這種一天多的故障時間是無法接受的,提出了前面提到的錯誤恢復概念,以滿足99.999%的高可用性需求. 這裡我們先說一下幾個概念:
  1. 服務(Service),是HA集群中提供的資源,包括Float IP,共享的存儲,apache等等.
  2. 成員伺服器(Member Server) 也叫節點(Node),是HA中實際運行服務提供資源的伺服器.
  3. 失效域(Failover Domain),是HA中提供資源的伺服器的集合,當內部某個成員出現故障時,可以將服務切換到其他正常的成員伺服器上.在HA中一個失效域一般包含2台成員伺服器(未應用虛擬技術).
  4. 心跳(HeartBeat)是HA中監控成員伺服器狀態的方法,一般心跳是通過網線和串口線來傳輸的.

  5. 單一故障點(Single Point Of Failuer,SPOF)是指一個系統的這樣的一個部件,當它失效或者停止運行,將導致整個系統不能工作.在HA中通常使用雙電源,多網卡,雙交換機等來避免SPOF.
  6. 仲裁(Quorum)是HA中為了準確的判斷伺服器及其提供的服務是否正常而採用的在共享磁碟中保存成員伺服器信息的方法.共享的狀態信息包括群集是否活躍.服務狀態信息包括服務是否在運行以及哪個成員正在運行該服務.每個成員都檢查這些信息來保證其它成員處於最新狀態.在一個只有兩個成員的群集中,每個成員都定期把一個時間戳和群集狀態信息寫入位於共享磁碟貯存區的兩個共享群集分區上.要保證正確的群集操作,如果某成員無法在啟動時寫入主共享群集分區和屏蔽共享群集分區,它將不會被允許加入群集.此外,如果某群集成員不更新其時間戳,或者到系統的"heartbeats"(心跳)失敗了,該成員就會從群集中刪除.
  7. Fence設備,Fence設備的作用時在一個節點出現問題時,另一個節點通過fence設備把出現問題的節點重新啟動,這樣做到了非人工的干預和防止出現問題的節點訪問共享存儲,造成文件系統的衝突,關於Fence 設備,有外置的比如APC的電源管理器.很多伺服器都是內置的,只不過不同廠家的叫法不同而已.比如HP的稱為iLo,IBM的稱為BMC,Dell的稱為DRAC.
下面我們以RedHat Cluster Suite為例來簡要說一下HA的搭建.RedHat Cluster Suite簡稱RHCS,RHCS目前的版本有v3,v4和v5,各版本之間不能通用.RedHat Enterprise Linux 3.0和4.0中對應的的RHCSv3/v4支持的最大節點數為16,RedHat Enterprise Linux 5.0對應的RHCSv5支持的最大節點數為128. RedHat高可用集群組成:
  1. Cluster Configuration System (CCS):集群配置系統,以管理cluster.conf檔案

  2. Cluster Manager (CMAN):集群管理器
  3. Distributed Lock Manager (DLM):分散式鎖管理器
  4. Fence:輸入/輸出系統圍欄系統(柵設備)
  5. Resource Group Manage (rgmanager):資源組管理器,用來監督、啟動和停止應用、服務和資源
  6. Quorum Disk:仲裁磁碟
  7. Conga:RHCM的Web控制套件.包括luci和ricci
  8. system-configure-cluster:圖形化工具來管理集群中的多個機器
下圖為一HA集群環境: 從防火牆到伺服器網卡都是HA模式.這裡交換機我是以Cisco為例的,開啟HSRP. 環境描述: 2台伺服器為IBM Blade HS21(2*2.5G以上 4核處理器,8G 內存,2*146G硬碟, 集成冗餘雙口網卡 ) Fence設備:Advanced Management Module(AMM)此次利用IBM提供的免費午餐來作為Fence設備(貌似給過錢了=.=!).IP是192.168.110.47,用戶名是USERID,密碼是PASSW0RD OS:RedHat Enterprise Linux Advance Server 4 update 6 準備工作: 1.配置bonding:
  • 新建/etc/sysconfig/network-config/ifcfg-bond0,內容如下:
DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.100.255
IPADDR=192.168.100.21
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
  • 編輯要綁定的真實網卡eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
  • 編輯要綁定的真實網卡eth1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes

  • 配置綁定模式:
編輯 /etc/modules.conf 文件,加入如下一行內容以使系統在啟動時載入bonding模塊,對外虛擬網路介面設備為 bond0加入下列兩行
# vi /etc/modules.conf
alias bond0 bonding
options bond0 miimon=100 mode=1 primary=eth0
說明:miimon是用來進行鏈路監測的. 比如:miimon=100,那麼系統每100ms監測一次路連接狀態,如果有一條線路不通就轉入另一條線路;mode的值表示工作模式,共有0、1、2、3四種模式,常用的為0,1兩種:mode=0表示load balancing (round-robin)為負載均衡方式,兩塊網卡都工作.mode=1表示fault-tolerance (active-backup)提供冗餘功能,工作方式是主備的工作方式,默認情況下只有一塊網卡工作,另一塊做備份,primary指定啟動后active的網卡.
  • 修改默認路由
由環境描述可知192.168.100.0網段是跑業務的,我們需要指定默認路由
# more /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=am1
GATEWAY=192.168.100.2
  • 重新啟動網路服務應用剛才的配置
# /etc/init.d/network restart
    Bringing up interface bond0 OK Bringing up interface eth0 OK Bringing up interface eth1 OK
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005) Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0 Slave Interface: eth0
MII Status: up
Link Failure Count: 1
Permanent HW addr: xx:xx:xx:xx:xx:xx Slave Interface: eth1


MII Status: up
Link Failure Count: 1
Permanent HW addr: xx:xx:xx:xx:xx:xx
  • bond1的配置同上,am2伺服器配置同am1.
2.修改/etc/hosts文件,添加節點的主機名和IP地址.在兩台刀片機上該文件必須一致.
    # vi /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.110.21 amcluster1 192.168.100.21 am1 192.168.110.22 amcluster2 192.168.100.22 am2
3.安裝RHCS套件
    # mount –o loop rhel-4-u6-rhcs-i386-disc1.iso /mnt # cd /mnt # ./autorun 彈出安裝cluster軟體對話框,選擇需要安裝的軟體,所有有關Xen、large、huge、luci、ricci字樣的軟體包都不選擇,點下一步,如果沒有錯誤信息,則安裝成功.如果多選了一些軟體包的話, 可能需要插入RedHat安裝盤. 注意: 必須關掉RedHat的Selinux和Iptables,當然你要是知道cluster軟體的埠在防火牆上打開也是可以的^_^.
4.停掉兩台機器上cluster的所有服務
# /etc/init.d/rgmanager stop
#/etc/init.d/fenced stop
#/etc/init.d/cman stop
#/etc/init.d/ccsd stop
修改/usr/share/system-config-cluster/FaildomController.py文件,第213行少一個「=」,該問題為cluser自身bug.
5.編寫集群啟動和關閉腳本:
#more /root/cluster.sh #!/bin/sh start() {
/etc/init.d/ccsd start
/etc/init.d/cman start
/etc/init.d/fenced start
/etc/init.d/rgmanager start
} stop() {
/etc/init.d/rgmanager stop
/etc/init.d/fenced stop
/etc/init.d/cman stop
/etc/init.d/ccsd stop
} status() {
/etc/init.d/rgmanager status
/etc/init.d/fenced status
/etc/init.d/cman status
/etc/init.d/ccsd status
} case "$1" in
start)


start $1
;;
stop)
stop $1
exit 0
;;
restart|reload)
stop $1
start $1
RETVAL=$?
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac 修改許可權 #chmod 700 /root/cluster.sh
開始配置Cluster:(使用的是RHCSV5版本的system-config-cluster工具)
1.在Xwindow下運行
# system-config-cluser
打開圖形化配置工具:
2.選擇Create New Configuration按鈕,然後輸入文件名點和多播地址,然後點擊「確定」. 再選擇左邊的Cluster,並選擇右下"Edit Cluster Properties" 調出"cluster Properies" 配置Cluster的名稱和相關屬性. "PostJoinDelay" 柵進程接收新節點的加入請求后等待節點確認加入的延遲秒數,默認值為3,典型的設置為20至30,這個根據你的網路和集群的實際情況而定."PostFailDelay" 柵進程發現節點失效后將節點踢出錯誤恢復域的等待延遲時間,默認值為0代表立即踢出不延時,這個值要按你集群網路的實際情況而定.
3.選中Cluster Nodes,這裡就是加入成員節點的,點擊Add a Cluster Node,輸入amcluster1點OK,如下圖,Node Name需要和/etc/hosts文件中配置的機器名相同 同理加入amcluster2. 4.選中Fence Devices,點擊Add a Fence Device,如下圖,Fence設備需要根據實際情況進行選擇配置,這次安裝中IBM刀片伺服器使用IBM Blade Center管理,修改後的IP是192.168.110.47,用戶名是USERID,密碼是PASSW0RD, 點OK.
    5.選中剛添加的節點amcluster1,點Manage Fencing For This Node,彈出對話框,點Add a New Fence Level,再選中左側的Fence-Level-1,點Add a New Fence to this Level,彈出下面對話框,輸入刀片所在的槽位,點OK 同樣方式配置amcluster2的fence設備.

6.創建失效域,添加對應節點,如圖,選中Failover Domains,點擊右下角的Create a Failover Domain.在彈出的對話框中輸入失效域的名稱,這裡我們輸入AMHA保存后. 7.將失效域成員節點添加進去 右邊的兩個打勾選向分別是 "RestrictFailover Domains members" 以及 "Priotitzed List".如果妳只有兩台, 打勾第一項「Restrict Failover Domains members」 就可以了,這項是只允許這兩台做輪替.另外一項"Priotitzed List"則是在你有兩台以上的伺服器,需要分別設定輪替的優先順序時需要的.當你打鉤"Priotitzed List"后可以使用"Adjust Priority" 調整多節點的替換優先順序 8.創建資源組 選中Resources,點擊右下角的Create a Resources,這裡選擇Create a Resource,然後選擇IP Address,填寫Float IP進去. 然後將tomcat的啟動腳本添加進去,如下圖所示: 9.創建服務 選中Service,點擊右下角的Create a Service,在彈出的對話框中創建Service,如下圖 點擊OK后,做如下配置 注意: 1.紅色圈出的下拉框要選擇我們剛才創建的失效域名稱AMHA 2.藍色圈出的部分,若選擇Restart,則服務發生異常時,cluster嘗試把該服務重啟;若選擇Relocate,則服務發生異常時,cluster直接嘗試切換服務至另一個節點上. 配置完這兩步,點擊左下角的 彈出如下對話框 依次增加要切換的服務即可. 在這裡需要提醒各位最好將服務腳本放置在IP下面,只有網卡起來了才 能服務,邏輯上才正確. 操作流程:選擇Create a new resource for this service 然後選擇IP Address,這樣地址資源就載入好了,選中剛建立的地址,再在下面選擇Attach a new Private Resource to the Selection,這裡選擇Script並添加我們需要服務的腳本. 10.保存配置並同步到備機 最終的cluster.conf文件內容應該如下結構: <?xml version="1.0" ?>


<cluster alias="AMHA" config_version="2" name="AMHA">
<fence_daemon post_fail_delay="0" post_join_delay="3"/>
<clusternodes>
<clusternode name="amcluster1" nodeid="1" votes="1">
<multicast addr="225.0.0.1" interface="bond0"/>
<fence>
<method name="1">
<device blade="1" name="AMM"/>
</method>
</fence>
</clusternode>
<clusternode name="amcluster2" nodeid="2" votes="1">
<multicast addr="225.0.0.1" interface="bond0"/>
<fence>
<method name="1">
<device blade="2" name="AMM"/>
</method>
</fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1">
<multicast addr="225.0.0.1"/>
</cman>
<fencedevices>
<fencedevice agent="fence_bladecenter" ipaddr="192.168.110.47" login="USERID" name="AMM" passwd="PASSW0RD"/>
</fencedevices>
<rm>
<failoverdomains>
<failoverdomain name="AMHA" ordered="0" restricted="1">
<failoverdomainnode name="amcluster1" priority="1"/>
<failoverdomainnode name="amcluster2" priority="1"/>
</failoverdomain>


</failoverdomains>
<resources>
<ip address="192.168.100.18" monitor_link="1"/>
<script file="/etc/init.d/tomcat" name="tomcat"/>
</resources>
<service autostart="1" domain="AMHA" name="AMHA">
<ip ref="192.168.100.18">
<script ref="tomcat"/>
</ip>
</service>
</rm>
</cluster> 可以通過 # scp /etc/cluster/cluster.conf root@amcluster2:/etc/cluster
也可以通過systemconfigcluster圖形集群配置工具中可以簡單的點一下」Send to」按鈕來傳. 也可以通過RHCS提供的工具: 1.# ccs_tool update /etc/cluster/cluster.conf,告知ccs升級配置文件版本. 2.# cman_tool status | grep 「Config version」,查出你cluster.conf文件的版本. 觀察返回的東東是否和你的新版本一樣,否的話就需要通過下面的命令來更新. # cman_tool version-r new_version_number 3.驗證一下是否是最新就OK了. 以上操作時RHEL4中的,在RHEL5中用戶只需要使用ccs_tool update /etc/cluster/cluster.conf就可以了.
到這裡使用之前的集群啟動腳本啟動服務就可以了.


[火星人 ] Linux集群--HA略談已經有896次圍觀

http://coctec.com/docs/linux/show-post-51536.html