高可用性羣集HA在企業網中的應用

一,HA定義

      高可用性H.A.(High Availability)指的是通過儘量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機時間,以提高系統和應用的可用性。它與被認爲是不間斷操作的容錯技術有所不同。HA系統是目前企業防止核心計算機系統因故障停機的最有效手段。

隨着IT信息系統的不斷髮展,數據在企業的應用越來越廣,如何提高IT系統的高可用性成爲建設穩健的計算機算系統的首要任務之一。構成計算機網絡系統的三大要素是:網絡系統,服務器系統,存儲系統。網絡系統包括防火牆,路由器等網絡設備,服務器系統主要指用戶使用的各種服務器系統,存儲系統,則是用戶最主要的數據存儲放的地點。

因此IT系統的高可用建設應包括網絡設備高可用性,服務器設備高可用性,及存儲設備的高可用性三個方面。

編輯本段高可用性的分類

1:網絡高可用

      由於網絡存儲的快速發展,網絡冗餘技術被不斷提升,提高IT系統的高可用性的關鍵應用就是網絡高可用性,網絡高可用性與網絡高可靠性是有區別的,網絡高可用性是通過匹配冗餘的網絡設備實現網絡設備的冗餘,達到高可用的目的。

比如冗餘的交換機,冗餘的路由器等

2:服務器高可用

      服務器高可用主要使用的是服務器集羣軟件或高可用軟件來實現。

3:存儲高可用

      使用軟件或硬件技術實現存儲的高度可用性。其主要技術指標是存儲切換功能,數據複製功能,數據快照功能等。當一臺存儲出現故障時,另一臺備用的存儲可以快速切換,達一存儲不停機的目的。

編輯本段高可用性(HA)的功能

1、軟件故障監測與排除

2、備份和數據保護

3、管理站能夠監視各站點的運行情況,能隨時或定時報告系統運行狀況,故障能及時報告和告警,並有必要的控制手段

4、實現錯誤隔離以及主、備份服務器間的服務切換

HA的工作方式:HA有主從方式和雙工方式兩種工作模式

二,heartbeat

       Heartbeat 項目是 Linux-HA 工程的一個組成部分,它實現了一個高可用集羣系統。心跳服務和集羣通信是高可用集羣的兩個關鍵組件,在 Heartbeat 項目裏,由 heartbeat 模塊實現了這兩個功能。

      高可用集羣是指一組通過硬件和軟件連接起來的獨立計算機,它們在用戶面前表現爲一個單一系統,在這樣的一組計算機系統內部的一個或者多個節點停止工作,服務會從故障節點切換到正常工作的節點上運行,不會引起服務中斷。從這個定義可以看出,集羣必須檢測節點和服務何時失效,何時恢復爲可用。這個任務通常由一組被稱爲“心跳”的代碼完成。在Linux-HA裏這個功能由一個叫做heartbeat的程序完成。

      Heartbeat通過插件技術實現了集羣間的串口、多播、廣播和組播通信,在配置的時候可以根據通信媒介選擇採用的通信協議,heartbeat啓動的時候檢查這些媒介是否存在,如果存在則加載相應的通信模塊。這樣開發人員可以很方便地添加新的通信模塊,比如添加紅外線通信模塊。

對於高可用集羣系統,如果集羣間的通信不可靠,那麼很明顯集羣本身也不可靠。Heartbeat採用UDP協議和串口進行通信,它們本身是不可靠的,可靠性必須由上層應用來提供。那麼怎樣保證消息傳遞的可靠性呢?

Heartbeat通過冗餘通信通道和消息重傳機制來保證通信的可靠性。Heartbeat檢測主通信鏈路工作狀態的同時也檢測備用通信鏈路狀態,並把這一狀態報告給系統管理員,這樣可以大大減少因爲多重失效引起的集羣故障不能恢復。例如,某個工作人員不小心撥下了一個備份通信鏈路,一兩個月以後主通信鏈路也失效了,系統就不能再進行通信了。通過報告備份通信鏈路的工作狀態和主通信鏈路的狀態,可以完全避免這種情況。因爲這樣在主通信鏈路失效以前,就可以檢測到備份工作鏈路失效,從而在主通信鏈路失效前修復備份通信鏈路。

三,實驗案例(1)模擬HA高可用性網絡

2012-10-13_225331

[root@node1 html]# vim /etc/sysconfig/network
 
2012-10-11_110109

[root@node1 html]# vim /etc/hosts
2012-10-11_110128
另一臺一樣

2012-10-11_110204

2012-10-11_110139
安裝http
[root@node1 Server]# cd /var/www/html/
[root@node1 html]# vim index.html
2012-10-11_111412
另一臺
root@node1 Server]# cd /var/www/html/
[root@node1 html]# vim index.html
 
2012-10-11_111618
裝heartbeat
[root@node1 ~]# yum localinstall -y heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck
[root@node1 ~]# cd /etc/ha.d/
[root@node1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/
[root@node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node1 ha.d]# vim ha.cf
2012-10-11_131605

2012-10-11_131748
[root@node1 ha.d]# dd if=/dev/random bs=512 count=1 |openssl md5

[root@node1 ha.d]# vim authkeys 
2012-10-11_132239
[root@node1 ha.d]# vim haresources 
2012-10-11_132509

[root@node1 ha.d]# chmod 600 authkeys
[root@node1 ha.d]# cp /etc/init.d/httpd resource.d/
[root@node1 ha.d]# chkconfig heartbeat on
[root@node1 ha.d]# service heartbeat start
[root@node1 ha.d]# ifconfig
2012-10-11_134152
[root@node1 ha.d]# service httpd status
httpd (pid  8700) is running...

注意關閉阿帕奇服務
另一臺
[root@node2 ~]#yum localinstall -y heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck
[root@node1 ha.d]# scp ha.cf node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp haresources node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp authkeys node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp /etc/init.d/httpd node2.a.com:/etc/ha.d/resource.d/
[root@node1 ha.d]# service httpd status
httpd is stopped
[root@node1 ha.d]# chkconfig --list |grep hear
[root@node1 ha.d]# chkconfig heartbeat on
[root@node2 ha.d]# service heartbeat start
[root@node2 ha.d]# ifconfig
2012-10-11_134241
[root@node2 ~]# service httpd status
httpd is stopped
測試
主機訪問http://192.168.145.101
2012-10-11_140423
模擬網卡失效情況 主設備
測試
節點一
[root@node1 ha.d]# cd /usr/lib/heartbeat/
[root@node1 heartbeat]# ./hb_standby
節點二圖
[root@node2 ~]# service httpd status
 
2012-10-11_141114
連接圖
沒斷

2012-10-11_141123 
節點2網頁測試圖

2012-10-11_141224
測試1又好了 模擬爭奪
節點一執行另一指令
[root@node1 heartbeat]# ./hb_takeover
節點二圖 又stop

2012-10-11_141503
網頁測試變回一

2012-10-11_141524

實驗案例(2)模擬HA結合LVS羣集

去掉兩臺director中web服務
用LVS
第一臺
[root@node1 heartbeat]# service heartbeat stop

[root@node1 heartbeat]# yum install httpd

編輯yum
[root@node1 heartbeat]# vim /etc/yum.repos.d/rhel-debuginfo.repo
2012-10-11_142634
[root@node1 heartbeat]# scp /etc/yum.repos.d/rhel-debuginfo.repo  node2.a.com:/etc/yum.repos.d/拷貝到另一臺機子中
[root@node1 heartbeat]# yum install ipvsadm
heartbeat與lvs結合
[root@node1 heartbeat]# ipvsadm -A -t 192.168.145.101:80 -s rr
[root@node1 heartbeat]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.200 -g
[root@node1 heartbeat]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.201 -g
[root@node1 heartbeat]# service ipvsadm save
[root@node1 heartbeat]# service ipvsadm stop
[root@node1 heartbeat]# scp /etc/sysconfig/ipvsadm node2.a.com:/etc/sysconfig/拷貝到另一表格
[root@node1 heartbeat]# cd /etc/ha.d/
[root@node1 ha.d]# vim haresources
2012-10-11_143811
[root@node1 ha.d]# cp /etc/init.d/ipvsadm resource.d/
[root@node1 ha.d]# scp haresources node2.a.com:/etc/ha.d/
[root@node1 ha.d]# scp /etc/init.d/ipvsadm node2.a.com:/etc/ha.d/resource.d/
兩邊確認停止狀態
[root@node1 ha.d]# ipvsadm -ln
[root@node1 ha.d]# service heartbeat start兩邊起羣集

測試起來沒
[root@node1 ha.d]# ipvsadm -ln
 
2012-10-11_144658
一邊起一邊沒起

2012-10-11_144727

模擬失效情況
第一臺director
[root@node1 ha.d]# cd /usr/lib/heartbeat/
第二臺測試

2012-10-11_144916
圖起來了
地址也獲得了

2012-10-11_145019
開兩臺server
一臺
[root@localhost ~]# route add -host 192.168.145.101 dev lo:0
[root@localhost ~]# service httpd start
兩一臺同樣
[root@localhost ~]# route add -host 192.168.145.101 dev lo:0
[root@localhost ~]# service httpd start
測試圖 此時/VAR/WWW/HTML文件爲https
2012-10-11_150456
模擬死掉
[root@node1 ha.d]# cd /usr/lib/heartbeat/
[root@node1 heartbeat]# ./hb_standby
測試圖

2012-10-11_150830

2012-10-11_150841
改訪問https 2

2012-10-11_150851

因爲如果server死掉但是有路由表還會繼續發包 會有包丟失現象爲了不讓由此現象 實現DOWN後條目自動消失
利用ldrectord 實現對後方的探測
兩邊HA停掉
[root@node2 ~]# service heartbeat stop
[root@node1 ~]# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
[root@node1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
要被heartbeat控制
[root@node1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
[root@node1 ~]# vim /etc/ha.d/ldirectord.cf圖

2012-10-11_154003
[root@node1 ha.d]# vim haresources
 
2012-10-11_154656

刪掉轉發規則表
[root@node1 ha.d]# mv /etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm.old
第二臺

[root@node2 ~]# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

在第一臺向第二臺考配
[root@node1 ha.d]# scp ldirectord.cf node2.a.com:/etc/ha.d/
第二臺
[root@node2 ~]# mv /etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm.old
第一臺
[root@node1 ha.d]# service heartbeat start
第二臺
[root@node2 ha.d]# service heartbeat start
第一臺
[root@node1 ha.d]# ipvsadm –ln

 2012-10-11_155609
圖看出此時權重爲0 這是沒有探測頁面的結果
又因爲靜默設置YES不做處理僅僅降低值0

後兩臺server做探測液麪
[root@localhost html]# cd /var/www/html/

第一臺

[root@localhost html]# echo "ok" >.test.html
測試 第一臺direct
[root@node1 ha.d]# ipvsadm -ln
看出圖變爲1
第二臺後方server
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "ok" >.test.html
測試第一臺director

[root@node1 ha.d]# ipvsadm -ln
兩個一

2012-10-11_160431

所以進入第一臺HA

[root@node1 ha.d]# vim ldirectord.cf
2012-10-11_160830
NO不在沉默
第二臺同樣改

[root@node2 ~]# vim /etc/ha.d/ldirectord.cf
2012-10-11_160952
測試 模擬後方服務器停掉

[root@localhost html]# service httpd stop

前方第一CA
[root@node1 ha.d]# ipvsadm -ln
有又沒了圖

測試又好了
[root@localhost html]# service httpd start
HA
[root@node1 ha.d]# ipvsadm -ln
看出好了
 
2012-10-11_161138

實驗案例3)使用ipsan技術  徹底高可用性網絡
對於server改內存和多加網卡

2012-10-11_173840

2012-10-11_172444
server1
加路由
[root@localhost ~]# route add -host 192.168.145.101 dev lo:0

server2同樣

[root@localhost ~]# route add -host 192.168.145.101 dev lo:0

 

target

2012-10-11_185927

2012-10-11_172444

裝[root@localhost ~]# cd /mnt/cdrom/ClusterStorage/
[root@localhost ftp]# yum install scsi-target-utils -y
[root@localhost ftp]# service tgtd start
[root@localhost ftp]# chkconfig tgtd on
增加磁盤
[root@target ClusterStorage]# fdisk /dev/sda
Command (m for help): n
p
Selected partition 4
First cylinder (1354-2610, default 1354):
Using default value 1354
Last cylinder or +size or +sizeM or +sizeK (1354-2610, default 2610): +2000m
Command (m for help): p
Command (m for help): w
[root@target ClusterStorage]# partprobe /dev/sda
[root@target ClusterStorage]# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2012-10.com.a.target:disk
[root@target ClusterStorage]# tgtadm --lld iscsi --op new --mode=logicalunit --tid=1 --lun=1 --backing-store /dev/sda4
ACL:

[root@target ClusterStorage]# tgtadm --lld iscsi --op bind --mode=target --tid=1 --initiator-address=192.168.2.0/24
實現開機啓動
[root@target ClusterStorage]# vim /etc/tgt/targets.conf
2012-10-11_193727

前端server1
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh iscsi-initiator-utils-6.2.0.871-0.10.el5.i386.rpm
第二臺同樣安裝

[root@localhost Server]# cd /etc/iscsi/
[root@localhost iscsi]# vim initiatorname.iscsi
2012-10-11_195309
[root@localhost iscsi]# service iscsi start
客戶端工具
[root@localhost iscsi]# iscsiadm --mode discovery --type sendtargets --portal 192.168.2.100發現target

2012-10-11_195749
[root@localhost iscsi]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
2012-10-11_200310
連接
[root@localhost iscsi]# fdisk -l

target上查看

2012-10-11_200454

[root@target ClusterStorage]# tgtadm --lld iscsi --op show --mode target
2012-10-11_200631

server1

分區對新硬盤
[root@localhost iscsi]# fdisk /dev/sdb
Command (m for help): n
p
Partition number (1-4): 1
First cylinder (1-1019, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1019, default 1019):
Using default value 1019
Command (m for help): p

Disk /dev/sdb: 2006 MB, 2006968320 bytes
62 heads, 62 sectors/track, 1019 cylinders
Units = cylinders of 3844 * 512 = 1968128 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1019     1958487   83  Linux

Command (m for help): w
[root@localhost iscsi]# fdisk -l
2012-10-11_201002
格式化
[root@localhost iscsi]# mkfs -t ext3 /dev/sdb1
掛載點建立
[root@localhost iscsi]# mkdir /mnt/1
[root@localhost iscsi]# mount /dev/sdb
sdb   sdb1 
[root@localhost iscsi]# mount /dev/sdb1 /mnt/1
[root@localhost iscsi]# df –h

2012-10-11_201216 

[root@localhost 1]# cp /etc/passwd ./
[root@localhost 1]# cp /etc/init
init.d/       initlog.conf  inittab      
[root@localhost 1]# cp /etc/inittab ./
考些東西
service2:

[root@localhost Server]# vim /etc/iscsi/initiatorname.iscsi
2012-10-11_201630
[root@localhost Server]# service iscsi start
[root@localhost Server]# iscsiadm --mode discovery --type sendtargets --portal 192.168.2.100
[root@localhost Server]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
再到target上查看連接
[root@target ClusterStorage]# tgtadm --lld iscsi --op show --mode target
2012-10-11_202030
第二個server不用再分區格式化 因爲第一個已經做好
[root@localhost Server]# fdisk -l
2012-10-11_202243
[root@localhost Server]# mkdir /mnt/1
[root@localhost Server]# mount /dev/sdb1 /mnt/1
[root@localhost Server]# cd /mnt/1
[root@localhost 1]# ll
2012-10-11_202400
此種磁盤類型沒有推送機制和鎖機制
解決問題

第二臺
[root@localhost 1]# touch jx1
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# mount /dev/sdb1 /mnt/1
[root@localhost ~]# cd /mnt/1
[root@localhost 1]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --logout
target上測試
[root@target ClusterStorage]# tgtadm --lld iscsi --op show --mode target
2012-10-11_203328
第一臺同樣卸載
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --logout
target上查看
2012-10-11_203528
再登陸
[root@localhost ~]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
[root@localhost ~]# mount /dev/sdb1 /var/www/html/
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
2012-10-11_204105
[root@localhost html]# vim .test.html
2012-10-11_204116
[root@localhost html]# ll
2012-10-11_204325
第二臺機子
重新實現登陸
[root@localhost 1]# iscsiadm --mode node --targetname iqn.2012-10.com.a.target:disk --portal 192.168.2.100:3260 --login
[root@localhost 1]# mount /dev/sdb1 /var/www/html/
[root@localhost ~]# cd /var/www/html/
 
2012-10-11_205123

最終測試兩臺服務器server注意開啓阿帕奇
2012-10-11_205544
測試server2http停掉
[root@localhost html]# service httpd stop

前端direct1
[root@node1 ~]# ipvsadm -ln
2012-10-11_205829
發現一臺http服務器停掉

測試外部及HTTP
發現還能訪問

2012-10-11_205839

 

 

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