Linux HA Cluster高可用服務器集羣,所謂的高可用不是主機的高可用,而是服務的高可用。

Linux HA Cluster高可用服務器集羣,所謂的高可用不是主機的高可用,而是服務的高可用。前端


   什麼叫高可用:一個服務器down掉的可能性多種多樣,任何一個可能壞了都有可能帶來風險,而服務器離線一般帶來的代價是很大的,尤爲是web站點,因此當某一臺提供服務的的服務器down掉不至於服務終止的就叫高可用。

  什麼叫心跳:就是將多臺服務器用網絡鏈接起來,然後每一臺服務器都不停的將本身依然在線的信息很簡短很小的通告給同一個網絡中的備用服務器的主機,告訴其實主機本身依然在線,其它服務器收到這個心跳信息就認爲本機是在線的,尤爲是主服務器。

   心跳信息怎麼發送,由誰來收,其實就是進程中的通訊兩臺主機是無法通訊的,只能利用網絡功能,經過進程監聽在某一套接字上,實現數據發送,數據請求,因此多臺服務器就得運行同等的進程,這兩個進程不停的進行通訊,主節點(主服務器)不停的向對方同等的節點發送本身的心跳信息,那這個軟件就叫高可用的集羣的基準層次,也叫心跳信息傳遞層以及事物信息的傳遞層,這是運行在集羣中的各節點上的進程,這個進程是個服務軟件,關機後須要將其啓動起來,主機間才能夠傳遞信息的,通常是主節點傳給備節點。

   所謂的資源:以web爲例,vip是資源,web服務也是資源,還有網頁面也是資源,一個服務包括多個資源,而像web的共享存儲也是資源等等,不一樣的服務所須要的資源也是不一樣的,而共享存儲是高可用集羣中最難解決的問題。

如是主節點掛了,多個備節點怎麼樣來選擇一個備節點來作爲提供服務的一個節點呢,而這種應該選擇哪一個備用節點來作爲提供服務的機制就叫作集羣事物決策的過程

   ha_aware:若是一個應用程序本身可以利用底層心跳信息傳遞層的功能完成集羣事物決策的過程的軟件就叫ha_aware。

   DC:Designated Coordinator選定的協調員,當DC所在的主機掛了就會先選出一個DC,再由DC作出事物的決策。注意:在高可用集羣中最核心的、最底層的管理的單位叫資源,把資源組合在一塊兒來組合成一個服務。

   高可用集羣中任何資源都不該該自行啓動,而是由CRM管理啓動啓動的;
   CRM:Cluster Resources Manager集羣資源管理,真正作出決策的是CRM。node


   heartbeat v1版時就有了資源管理的概念,而v1版的資源就是heartbeat自帶的,叫haresources,這個文件是個配置文件;而這個配置文件接口就叫haresources;
   當heartbeat v2第二版的時候,heartbeat被作了很大的改進,本身能夠作爲一個獨立進程來運行,並而能夠經過它接收用戶請求,它就叫crm,在運行時它須要在各節點上運行一個叫crmd的進程,這個進程一般要監聽在一個套接字上,端口就是5560,因此服務器端叫crmd,而客戶端叫crm(能夠稱爲crm shell),是個命令行接口,經過這個命令行接口就能夠跟服務器端的crm通訊了,heartbeat也有它的圖形化界面工具,就叫heartbeat-GUI工具,經過這個界面就能夠配置進行。
   第三版heartbeat v3,被獨立成三個項目heartbeat、pacemaker(心臟起博器)、cluster-glue(集羣的貼合器),架構分離開來了,能夠結合其它的組件工做了。

  RA:resource agent資源代理,其實就是可以接收CRM的調度用於實如今節點上對某一個資源完成管理的工具,這個管理的工具一般是腳本,因此咱們一般稱爲資源代理。任何資源代理都要使用同一種風格,接收四個參數:{start|stop|restart|status},包括配置IP地址的也是。每一個種資源的代理都要完成這四個參數據的輸出。
   當某一個節點出現故障時,其上面的資源被自動轉移到其它正常的備用節點上並啓動的這個過程叫故障轉移,也稱爲失效轉移(failover)
   若是出現故障的節點又回來的,那咱們就要把這個節點添加回來,那這個添加回來的過程咱們就叫失效轉回,也稱故障轉回(failback)

資源爭用、資源隔離:
   萬一集羣發生分裂時,爲了不再也不成爲集羣上的節點繼續使用資源而發生資源爭用狀況,致使有掛載文件系統的系統文件發生崩潰,成爲新的集羣的就會給再也不成爲集羣的節點補一槍,讓不是集羣節點的服務死透,再也不接收請求,這就叫stonith(shoot the other node in the head),而這種功能就叫資源隔離。爭用共享存儲的後果是很是嚴重的,輕則共享存儲崩潰,重則整個文件系統都崩潰,數據所有丟失。web


資源隔離有兩種級別:
   節點級別:這種就叫STONITH,這種就是無論怎麼樣直接把對方的電源給切斷,通常這種主機都是鏈接到電源交換機上的。
   資源級別:這種須要依賴一些硬件設備來完成,好比鏈接到共享存儲的光纖交換機,把須要踢除出去的節點的光纖接口屏蔽了,這種就叫資源級別的隔離。
   對於服務器左右分隔的這種狀況一般稱爲腦裂(brain-split),左右不協調了,在高能夠用集羣中避免資源爭用完成資源隔離是咱們在設計高可用集羣中必需要考濾的問題。

   兩個節點的模式下,一旦發生集羣分隔之後,其中一個節點發生故障,在咱們沒法斷定哪一個節點不正常的時候,而正常的節點必定是能夠連到互聯網上去的,這樣的話就說明正常的節點是能夠跟前端路由通訊的,因此咱們就把前端路由當成第三個節點,這裏咱們稱爲ping節點,當每一個節點聯繫到對方以後先去ping前端的節點,若是能夠ping通,那就說明本身是正常的,就說明該節點是有多票法定票數的節點,而前端的ping節點就叫仲裁設備,幫助節點判斷哪一個節點是優勝一方的,偶數節點數時就會藉助於仲裁設備。
   RHCS不是使用ping節點來判斷的,他是使用了一個共享存儲的設備,偶數個節點處於活動的節點不斷的往磁盤中寫數據,按照心跳信息頻率每隔一個信息頻率就往磁盤裏寫一個數據位,只要這個設備每隔一個心跳時間間隔就更新一次數據位,就說明這個設備處於活動狀態的,若是發現節點屢次沒有寫數據位了就認爲節點掛了,這種也叫仲裁設備(qdisk)。仲裁設備又有兩種:分別爲ping node和qdisk;

那心跳是怎麼傳遞的呢,在多臺主機之機又是怎麼互相工做良好呢,如圖:高可用主從的兩個節點;算法

wKiom1NXJgWSL8J2AALpfiAJ3U8039.jpg

   信息層(Messaging Layer):主從兩個節點的心跳信息都要基於信息層來實現,也叫底層基礎架構層,用於傳遞心跳信息的,而可以實現這種功能的有Corosync和heartbeat,corosync是openAIS的一個組件,
   資源分配層(Resource Allocation):也叫資源管理器層,這層的核心組件叫CRM(Cluster Resourcce Manager集羣資源管理器),CRM上必須有一個資源被推舉成爲管理者的,叫Leader,它的工做是決策集羣中的全部事物的,這裏稱爲DC(Designated Coordinator指定協調員),任何DC上會額外運行兩個進程,一個叫PE(Policy Engine策略引擎),所謂策略引擎就是將底層信息層收集整個集羣中全部節點上的信息在本地生成一個大圖big pic來策略節點運行在哪一個節點上,並通知其實節點上的資源管理器來實現資源的啓動和關閉等操做;一個叫TE(Transition Engine 傳輸引擎),它主要是把PE作出的決策通告給對應節點的CRM;
   集羣資源管理器必須藉助於Messageing Layer通告給每個節點,自動的廣播或組播給每個節點,這樣就保證了每個節點上的信息都是同樣的,而這些數據在計算機中又怎麼樣來交互數據的呢,這裏就要基於擴展標記語言來實現數據的格式傳遞的,這種叫半結構化數據基於XML的,因此在各節點之間實現配置信息保存都是經過XML文件保存的,而要可以理解這個XML文件保存的信息使用到一個工具叫CIB(Cluster Information Base集羣信息庫);只要能鏈接到CRM上均可以去配置這個XML文件,首先它會先保存到DC的XML中,而後再由DC同步支每一個節點上的XML文件中去的;
   Resources層:而PE(策略引擎)就是根據XML這個庫來獲取資源的配置信息的,並經過Messaging Layer不獲取當前節點的活動信息,然後作出決策,一旦作得決策就要啓動資源了;因此PE藉助於本地的Messaging Layer通知給其實節點的集羣信息庫來實現對某些資源信息的傳遞,好比說通告其它CRM要啓動某一資源了,收到信息後CRM並不負責啓動,轉由LRM(Local Resource Manager本地資源管理)啓動,每一個節點上都運行在這個LRM,而併發資源又藉助於RA(Resource Agent資源代理)實現資源管理,這就是它的工做原理;CRM負責收集信息,推舉爲DC的由PE運行,PE負責整合整個集羣中的全部資源,並確保某些資源在合適的節點上運行起來,一旦作出決策就會通告給其它節點上的CRM,對應節點上的CRM收到通告之後會調用本身的LRM,由LRM指揮RA完成相關的操做;

那下面咱們來實現heartbeat v1版本的工做過程:
安裝配置高可用集羣:實現heartbeat v1版的過程
   一、節點名稱很關鍵,集羣每一個節的名稱都得能互相解析;
   用hosts文件,/etc/hosts:hosts中主機名的正反解析結果必須跟」uname -n」的結果保持一致;
   二、時間必須得同步,使用網絡時間服務器同步時間;
   三、各節點間能基於ssh密鑰互相認證通訊;    

   1)配置主機名、
   第一臺節點的主機名爲node1.tanxw.com,第二臺節點的主機名爲node2.tanxw.com   shell

# vim /etc/hosts  改主機名,注意,兩個節點都要添加,我幾個節點就加幾條解析
172.16.249.61 node1.tanxw.com
172.16.249.62 node2.tanxw.com
# uname -n
# hostname node1.tanxw.com
# hostname node2.tanxw.com
# cat /etc/sysconfig/network 若是這個與node1或2不一致就改一下,這個改配置文件保證下次系統重啓時主機名依然有效,
# 若是改好了沒有生效就ctrl+d註銷一下再登陸就OK了。

   wKiom1NXNAHh7o3rAAF40k7SSIw972.jpgwKiom1NXNA_jgZgkAADC01OsoPE292.jpg    

 

   2)兩臺主機或多臺主機基於ssh無密鑰通訊   vim

# ssh-keygen -t rsa -P ‘’   這個生成一個密碼爲空的公鑰和一個密鑰,把公鑰複製到對方節點上便可
# ssh-copy-id -i .ssh/id_rsa.pub root@node2.tanxw.com 對方主機名用登陸用戶名
兩臺主機都要互相能夠通訊,因此兩臺主機都得互相生成密鑰和複製公鑰,相互的節點上的hosts文件是都要解析對方的主機名,172.16.249.61 node1.tanxw.com
172.16.249.62 node2.tanxw.com
# ssh node2.tanxw.com ‘date’;date  測試一下是否已經互信

   3)安裝heartbeat v1版本的程序,兩個節點都要安裝上heartbeat的相關程序包 安全

# 安裝這幾個包,可是存在依賴關係,須要解決:
heartbeat-2.1.4-12.el6.x86_64.rpm、heartbeat-pils-2.1.4-12.el6.x86_64.rpm、
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
# 解決依賴關係:
# yum -y install perl-TimeDate net-snmp-libs libnet PyXML
# rpm -ivh heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm  heartbeat-2.1.4-12.el6.x86_64.rpm

   一個高可用集羣得依賴:一、信息層; 二、資源管理器;三、資源代理
   咱們配置的過程就按這種層次去配置就能夠了;
   這裏要注意的是:如何在網絡中咱們指望的節點集羣成爲咱們所須要的節點,在集羣中信息不能隨便傳遞,而心跳節點是基於組播地址傳遞的,若是別人也裝了heartbeat也鏈接到這個組播地址上來,這都不安全,基於這種狀況,咱們各節點這間信息傳遞是須要認證的,這種認證基於HMAC(消息認證碼),消息認證碼是使用單向加密算動法來實現的,而單向加密通常有三類:crc(循環冗餘校驗碼)、md5(信息摘要算法)、sha1。heartbeat基於udp協議,監聽在694端口上;

   4)配置heartbeat,它的配置文件在/etc/ha.d/的目錄下,可是安裝完程序以後這個目錄下沒有這個配置文件,只有/usr/share/doc/heartbeat-2.1.4/目錄下有ha.cf的主配置文件樣本,複製到/etc下修改配置文件便可使用;還有一個authkeys的認證文件,這個文件就是咱們各節點認證時所保存的認證密碼和認證機制,因此這個文件的權限相當重要,必須是600,不然啓動不了服務;第三個haresources,定義資源時須要資源管理器來讀取這個文件,因此這個也得有; bash

# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys,haresources} /etc/ha.d/
# cd /etc/ha.d/
# openssl rand -hex 8   生成16位隨機數
ee869d3d86e1556f
# vim /etc/ha.d/authkeys
auth 2   這裏的2與下面選項的數只要一致就能夠了,沒有什麼限定
2 sha1 ee869d3d86e1556f
# chmod 600 authkeys
# vim /etc/ha.d/ha.cf    啓用如下參數及功能
logfile  /var/log/ha-log   #日誌文件,正常日誌信息記錄到哪去的
keepalive 1000ms    #每隔多長時間發送一次心跳信息的,單位是秒,毫秒用ms
deadtime 8     #隔多長時間探測到對方不在線就kill掉的時間間隔
warntime 10    #警告時間
udpport 694
mcast eth0 225.0.0.1 694 1 0    #定義組播地址
auto_failback on     #開啓故障轉回功能
node    node2.tanxw.com    #定義兩個節點
node    node1.tanxw.com
crm on       #啓用crm功能
ping  172.16.0.1    #ping節點
compression     bz2     #壓縮格式
compression_threshold 2     #表示小於2K時不壓縮傳輸

   定義資源:在資源管理器的配置文件中定義;/etc/ha.d/haresources,在/etc/ha.d/resource.d下有各類資源類型,當在資源配置文件中定義時就會調用這裏的資源類型來運行相應的程序; 服務器

# vim /etc/ha.d/haresources
node1.tanxw.com 172.16.249.66 httpd    # 172.16.249.66這個是浮動地址
注:node1.tanxw.com:說明哪臺主機是主節點,更傾向於誰上面
[node1.tanxw.com 172.16.249.61 /16/eth0/172 .16.255.255 httpd 也能夠這樣定義
node2.tanxw.com 172.16.249.62 httpd  httpd是怎麼被調用的呢:首先會找 /etc/ha .d /resource .d目錄下,若是沒有就去 /etc/init .d/目錄下找httpd,找到就start。]
# scp -p authkeys haresources ha.cf node1.tanxw.com:/etc/ha.d/
# service heartbeat start

   wKiom1NXRlmxEq7jAAGESzZ-U_g798.jpg

  wKiom1NXR-SD7gYlAACXg9-IQt8566.jpg

   wKiom1NXSj3C1KNWAAC25lrX2BI899.jpg

結束:網絡

   當一個節點掛掉了,另外一個節點就會頂上去,成爲主節點,使用服務依然能夠提供服務,而不會使用服務終止,這裏咱們應該準備兩個節點不一樣的web頁面的內容加以區別,測試時咱們把其中的別一個web服務終止,就能夠看得出效果來了,heaetbeat會自動切換到別一個正常運行的節點上去斷續提供服務。

本文出自 「溫水煮青蛙」 博客,請務必保留此出處http://tanxw.blog.51cto.com/4309543/1401096

相關文章
相關標籤/搜索