什麼是高可用集羣
高可用集羣是指一組通過硬件和軟件連接起來的獨立計算機,它們在用戶面前表現爲一個單一系統,在這樣的一組計算機系統內部的一個或者多個節點停止工作,服務會從故障節點切換到正常工作的節點上運行,不會引起服務中斷。從這個定義可以看出,集羣必須檢測節點和服務何時失效,何時恢復爲可用。這個任務通常由一組被稱爲“心跳”的代碼完成。在Linux-HA裏這個功能由一個叫做heartbeat的程序完成。
Heartbeat簡介
Heartbeat是Linux-HA工程的一個組件,自1999年開始到現在,發佈了衆多版本,是目前開源Linux-HA項目最成功的一個例子,在行業內得到了廣泛的應用,這裏分析的是2007年1月18日發佈的版本2.0.8。
隨着Linux在關鍵行業應用的逐漸增多,它必將提供一些原來由IBM和SUN這樣的大型商業公司所提供的服務,這些商業公司所提供的服務都有一個關鍵特性,就是高可用集羣。
Heartbeat 工作原理
heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測可以通過網絡鏈路和串口進行,而且支持冗 餘鏈路,它們之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運 行在對方主機上的資源或者服務。
--------------------------以上部分截取自百度百科--------------------------
演示環境:
CentOS6.5:
lvs1 lvs01.ssc.com eth0 10.19.166.197
lvs2 lvs02.ssc.com eth0 10.19.166.198
VIP信息:10.19.166.20
注意:主機名要一致
請 uname -n //查看自己環境的主機名,我這裏的主機名lvs01.ssc.com,lvs02.ssc.com
關閉:
selinux disabled
iptables off
包組與類庫:
Compatibility libraries
Development tools
Server Platform Development
注意:請提前安裝好這些包和庫(減少後面安裝rpm包出現各種問題)
1、修改本機的hostname, # vi /etc/sysconfig/network 如下圖:
修改 lvs1,lvs2主機的hosts,# vim /etc/hosts,如下圖:
注:裏面依次填入 IP,主機名,主機名短格式名稱
對ping下短格式名稱是否能ping通
2、利用ssh密鑰打通兩臺主機的鏈接,做爲兩主機的互信機制
1)生成ssh密鑰
2)把 lvs1 的公鑰copy到 lvs2 ,把lvs2的公鑰copy到lvs1,下圖拿lvs1舉例,總之就是雙方互通;
測試是否打通
3)同步兩臺節點服務器的系統時間(注:系統時間必須一致)(兩臺節點服務器都要設置)
沒有ntpdate的,請先安裝ntpdate,安裝方式爲: # yum install tnpdate -y
同步網絡上的時間服務器,如國家授權中心服務器IP:210.72.145.44(注意:不過老是同步報錯)
所以我這裏用的是上海交大的網絡中心NTP服務器的地址,202.120.2.101 (已測可用)
在crontab 裏添加一條每五分鐘自動執行的任務,保證兩臺服務器的時間與網絡時間一致,這點很重要
3、安裝heartbeat(我這裏的包,最後放在附件打包給大家,包是馬哥做的,請支持原作者,如需更多學習資料,請報名馬哥教育)
注:這裏只演示lvs1這臺服務器,lvs2同理,只是把lvs1這些包,拷過去安裝就行;
這裏把我heartbeat rpm包,已經分別放在了兩臺測試服務器的 /opt目錄下
1)安裝帶有libnet的epel源(這個源是我在網上找的,一併打包給各位)
2)yum 安裝相關依賴包
3)安裝heartbeat rpm包
4、組播IP地址介紹,摘自馬哥文檔
組播IP地址用於標識一個IP組播組。IANA(internet assigned number authority)把D類地址空間分配給IP組播,其範圍是從224.0.0.0到239.255.255.255。如下圖所示(二進制表示),IP組播地址前四位均爲1110八位組⑴ 八位組⑵ 八位組⑶ 八位組⑷1110
XXXX XXXXXXXX XXXXXXXX XXXXXXXX組播組可以是永久的也可以是臨時的。組播組地址中,有一部分由官方分配的,稱爲永久組播組。永久組播組保持不變的是它的ip地址,組中的成員構成可以發生變化。永久組播組中成員的數量都可以是任意的,甚至可以爲零。那些沒有保留下來供永久組播組使用的ip組播地址,可以被臨時組播組利用。
224.0.0.0~224.0.0.255爲預留的組播地址(永久組地址),地址224.0.0.0保留不做分配,其它地址供路由協議使用。
224.0.1.0~238.255.255.255爲用戶可用的組播地址(臨時組地址),全網範圍內有效。
239.0.0.0~239.255.255.255爲本地管理組播地址,僅在特定的本地範圍內有效。常用的預留組播地址列表如下:
224.0.0.0 基準地址(保留)
224.0.0.1 所有主機的地址
224.0.0.2 所有組播路由器的地址
224.0.0.3 不分配
224.0.0.4dvmrp(Distance Vector Multicast Routing Protocol,距離矢量組播路由協議)路由器
224.0.0.5 ospf(Open Shortest Path First,開放最短路徑優先)路由器
224.0.0.6 ospf dr(Designated Router,指定路由器)
224.0.0.7 st (Shared Tree,共享樹)路由器
224.0.0.8 st主機
224.0.0.9 rip-2路由器
224.0.0.10 Eigrp(Enhanced Interior Gateway Routing Protocol,增強網關內部路由線路協議)路由器 224.0.0.11 活動代理
224.0.0.12 dhcp服務器/中繼代理
224.0.0.13 所有pim (Protocol Independent Multicast,協議無關組播)路由器
224.0.0.14 rsvp (Resource Reservation Protocol,資源預留協議)封裝
224.0.0.15 所有cbt 路由器
224.0.0.16 指定sbm(Subnetwork Bandwidth Management,子網帶寬管理)
224.0.0.17 所有sbms
224.0.0.18 vrrp(Virtual Router Redundancy Protocol,虛擬路由器冗餘協議)
239.255.255.255 SSDP協議使用
5、查看heartbeat默認端口(注此端口是IANA分給heartbeat固定端口)
heartbeat v1的配置(修改這按個文件的配置信息):
主配置文件:ha.cf
認證密鑰:authkey,其權限必須爲組合其它無權訪問;
用於資源的文件:haresources
1)拷貝文件到/etc/ha.d/目錄中
2)修改 authkeys 權限,# chmod 600 authkeys ,否則heartbeat無法啓動
3)修改配置文件 ha.cf,我這裏只啓用這幾項,並做了修改;
相關配置參數的講解(版權,馬哥) logfile /var/log/ha-log #指名heartbaet的日誌存放位置 #mcast eth0 225.100.90.101 694 1 0 #採用網卡eth0的Udp多播來組織心跳,一般在備用節點不止一臺時使用。Bcast、ucast和mcast分別代表廣播、單播和多播,是組織心跳的三種方式,任選其一即可。 auto_failback on #用來定義當主節點恢復後,是否將服務自動切回,heartbeat的兩臺主機分別爲主節點和備份節點。主節點在正常情況下佔用資源並運行所有的服務,遇到故障時把資源交給備份節點並由備份節點運行服務。在該選項設爲on的情況下,一旦主節點恢復運行,則自動獲取資源並取代備份節點,如果該選項設置爲off,那麼當主節點恢復後,將變爲備份節點,而原來的備份節點成爲主節點 node lvs01.ssc.com #主節點主機名,可以通過命令“uname –n”查看。 node lvs02.ssc.com #備用節點主機名 ping 10.19.166.1 #選擇ping的節點,ping 節點選擇的越好,HA集羣就越強壯,可以選擇固定的路由器作爲ping節點,但是最好不要選擇集羣中的成員作爲ping節點,ping節點僅僅用來測試網絡連接
4)修改authkeys配置
注:這裏的加密方式是隨機的。(選用的方式和使用的方式必須保持一致)
# openssl rand -hex 8 //生成8位密鑰,如上圖所示
5)修改 haresources 文件
lvs01.ssc.com //集羣節點
10.19.166.20/31/eth0/10.19.255.255 //VIP地址/掩碼位數/網卡/
httpd //apache啓動程序,如未安裝請yum install httpd -y 安裝
6)拷貝lvs1 上的 ha.cf haresources authkeys 到lvs2上的/etc/ha.d/目錄中
7)在apache 默認路徑創建頁面測試文件 index.html內容隨便寫,啓動httpd服務,curl測試網頁是否能夠訪問成功; (注:lvs1,lvs2 兩臺服務器都要設置),測試完成後,手動停止httpd服務(必須停止)。
8)啓動heartbeat服務,(lvs2主機也啓動)
查看啓動狀態:
同時查看80端口也已經自動啓動
9)打開瀏覽器測試網頁
我們接下來停止 lvs1的heartbeat後,我們看到已經自動轉到lvs2
OK,就是這樣~