Mysql DBA 高級運維學習之路-heartbeat介紹

1.Heartbeat介紹

Heartbeat 是一個基於Linux開源的,被廣泛使用的高可用集羣系統,自1999年開始到現在,發佈了衆多版本,是目前開源Linux-HA項目最成功的一個例子,在行業內得到了廣泛的應用。

1.1 Heartbeat作用

Heartbeat可以將資源(IP及程序服務等資源)從一臺已經故障的計算機快速轉移到另一臺正常運轉的機器上繼續提供服務,一般稱之爲高可用服務。在實際生產應用場景中,heartbeat的功能和另一個高可用開源軟件keepalived有很多相同之處,在生產中實際的業務應用也是有區別的。
Heartbeat官方地址:http://linux-ha.org/wiki/Main_Page

1.2 Heartbeat工作原理

通過修改heartbeat軟件的配置文件,可以指定哪一臺heartbeat服務器做爲主服務器,則另一臺將自動成爲熱備服務器。然後在熱備服務器上配置heartbeat守護程序來監聽來自主服務器的心跳信息。如果熱備服務器在指定時間內未監聽到來自主服務器的心跳,就會啓動故障轉移程序,並取得主服務器上的相關資源服務的所有權,接着主服務器繼續不間斷的提供服務,從而達到資源及服務高可用性的目的。
除了主備模式,hertbeat還支持主主的模式,即兩臺服務器互爲主備,這是他們之間會相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未受到對方發送的心跳報文,那麼,一方就會認爲對方失效或者宕機了,這時每個運行正常的主機就會啓動自身的資源接管模塊來接管運行在對方主機上的資源或者服務,繼續爲用戶提供服務。所謂的業務不間斷,在故障轉移期間也是需要切換時間的,heartbeat的切換時間一般是在5-20秒左右。

切換到常見條件:

(1)服務器宕機。

(2)Heartbeat服務本身故障。

(3)心跳連接故障。

服務故障不會導致切換,可以通過服務宕機把heartbeat服務停掉。

1.3 Heartbeat心跳連接

我們已經瞭解了heartbeat服務,至少需要兩臺主機來完成。那麼實現高可用服務,兩臺機器之間是如何做到互相通信的和相互檢監測的呢?
下面是兩臺heartbeat主機之間通信的一些常用的可行的方法:

(1)串行電纜(首選,缺點是距離不能太遠)。

(2)一般以太網電纜兩網卡直連(生產環境常用的方式)。

(3)以太網電纜,通過交換機等網絡設備連接(次選)。

增加了交換機故障點,同時,線路不是專用心跳線,容易受其他數據傳輸的影響,導致心跳報文發送問題。

1.4 Heartbeat裂腦

1.4.1 什麼是裂腦

由於兩臺高可用服務器之間在指定時間內,無法互相檢測到對方的心跳(可能原因是電纜故障導致)而各自啓動故障轉移功能,取得了資源及服務的所有權,而此時的兩臺高可用服務器對還活着並在正常運行,這樣就會導致同一個IP或服務在兩端同時啓動而發生衝突的嚴重問題,最嚴重的是兩臺主機佔用同一個VIP地址,當用戶寫入數據時可能會分別寫入到兩端,這樣可能會導致服務器兩端的數據不一致或造成數據丟失,這種情況就被稱爲裂腦。也被稱爲分區集羣或大腦垂直分割。英文名稱爲splitbrain。

1.4.2 導致裂腦的原因

一般來說,裂腦的發生,有以下幾個原因導致

(1)高可用服務器對之間心跳線鏈路故障,導致無法正常通信。

a.心跳線壞了(包括斷了,老化)。

b.網卡及相關驅動壞了 ,IP配置及衝突問題(網卡直連)。

c.心跳線間連接的設備故障(交換機及網卡)。

d.仲裁的機器出問題了。

(2)高可用服務器對上開啓了防火牆阻擋了心跳消息傳輸。

(3)高可用服務器對上心跳網卡地址等信息配置不正確,導致發送心跳失敗。

(4)其他服務配置不宕等原因,如心跳方式不同,心跳廣播衝突,軟件BUG等。

1.4.3防止裂腦發生的8種方法

實際生產環境中,我們可以從下面幾個方面來防止裂腦問題的發生。

(1)同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了另一個還是好的,依然能夠傳送心跳信息(網卡設備和網線設備,推薦使用這種方法)

(2)檢測到裂腦時強行關閉一個心跳節點。(這個功能需要特殊設備支持,如Stonith、fence)。相當於程序上備節點發現心跳線故障,發送關機命令道主節點。

(3)做好對裂腦的監控報警(如郵件及手機短信等,值班),在問題發生時認爲第一時間介入仲裁,降低損失。百度監控有上行和下行有一個和人工交互的過程。當然,如果沒有人工交互的過程在實施高可用方案時,要根據業務實際需求確定是否能容忍這樣的損失 。對於一般的網站業務,這個損失是可控的。我們也可以第一時間登錄出故障的機器,查看什麼原因,如果問題很小可以修復。

(4)啓用磁盤鎖,正在服務一方鎖住共享磁盤,“裂腦”發生時讓對方完全“搶不走”共享資源。但使用鎖磁盤也會有一個不小的問題,如果佔用共享盤的一方不主動“解鎖”,另一方將永遠得不到共享磁盤。現實中假如服務節點突然死機或崩潰,就不能執行解鎖命令。後備節點也就接管不了共享資源和應用服務。於是有人在HA中設計了“智能”鎖。即,正在服務的一方只在發現心跳線全部斷開(察覺不到對端)時才啓用磁盤鎖,平時就不上鎖。

(5)報警報在服務器接管之前給人員處理留足夠時間。
1分鐘內報警,但是服務器此時沒有接管,而是5分鐘接管,接管時間較長。數據不會丟,導致用戶無法寫數據。

(6)報警後,不直接自動服務器接管,而是由人爲人員接管。

(7)增加仲裁機制,確定誰該獲得資源,這裏有幾個參數的思路。

a.加一個仲裁機制。假如設置參考IP(如網關IP),當心跳線完全斷開時,2個節點都各自ping一下參看IP,不通則表明斷點就出在本端,不僅心跳線、還有對外服務的本地網絡鏈路斷了,這樣就主動放棄競爭,讓能夠ping通參考IP的一端去接管服務。Ping不通參考IP的一方可以自我重啓,以徹底釋放有可能還佔用着的那些共享資源(heartbeat也有此功能)。

b.通過第三方軟件仲裁誰該獲得資源。

1.4.4有關fence的說明

Fence只是HA集羣環境下的術語,在硬件領域,fence設備其實就是一個智能管理電源管理設備(IPMI)也叫作Intelligent PowerManagement Interface,如果和服務代理商說fence他們他們一定不知道是什麼東西(原廠可能知道)得和他們說智能管理設備或遠程管理卡,他們就能理解了。Fence是一種設備有外部fence和內部fence兩種是插到服務器裏的不管是內部還是外部fence,這些設備帶有以太網口的,用來在HA切換觸發時通過網絡重啓服務器。
先說內部設備Fence在不同的服務器的名稱是不一樣的,以下是不同服務器對應的fence設備名稱。

IBM: RSA

HP: ILO

DELL: Idrac

至於外部設備有,APC(著名的UPS電源生產商)的PowerSwitch,這是一個以太網口的電源插座,每個插口都對應一個ID號,用來在命令中指定對哪一個ID號上的電源進行切斷或者重啓。

1.5 Heartbeat的消息類型

Heartbeat高可用軟件在工作中,一般來說,有三種消息類型,具體爲:

(1)心跳消息

(2)集羣轉換消息

(3)重傳請求

1.5.1 心跳消息

心跳消息約爲150字節的數據包,可能爲單播、廣播或者多播的方式,控制心跳頻率及出現故障要等待多久進行故障轉換。

1.5.2 集羣轉換消息

ip-request和ip-request-resp
當主服務器恢復在線狀態時,通過ip-request消息要求備機釋放主服務器失敗時備服務器取得的資源,然後備份服務器關閉釋放主服務器失敗時取得的資源及服務。
備服務器釋放主服務器失敗時取得的資源及服務後,就會通過ip-request-resp消息通知主服務器它不在擁有該資源及服務,主服務器收到來自備節點的ip-request-resp消息通知後,啓動失敗時釋放的資源及服務,並開始提供正常的訪問服務。

1.5.3 重傳請求

Rexmit-request控制重傳心跳請求。這種心跳控制消息都使用UDP協議發送到/etc/ha.d/ha.cf文件指定的任意端口或指定的多播端口地址。

1.6 Heartbeat IP地址接管和故障轉移

Heartbeat是通過IP地址接管和ARP廣播進行故障轉移的。
ARP廣播:在主服務器故障時,備用節點接管資源後,會立即強制更新所有客戶端本地的ARP表(即清除客戶端本地緩存的失敗服務器的vip地址和mac地址的解析記錄),ARP是地址解析協議。備節點會對局域網進行廣播。確保客戶端和新的主服務器對話。
在局域網裏每臺機器都有一個ARP表用arp –a可以看到

1.7 vip/IP別名/輔助ip

真實IP又稱爲管理IP,一般是配置在物理網卡上的實際IP。在負載均衡及高可用環境中,管理IP是不對外提供服務的,而僅是管理服務器用,如SSH可以通過這個管理IP連接服務器。

VIP是虛擬IP,實際上就是heartbeat臨時綁定在物理網卡上的別名IP(heartbeat3以上也可以採用輔助IP),如eth0:x.x爲0-255的任意數字,可以在一塊網卡上綁定多個別名。

這樣做的好處就是當提供服務的服務器宕機了,在接管的服務器上會直接會自動配置上同樣的VIP提供服務。如果是使用管理IP的話,來回遷移就很難做到,而
且管理IP遷移走了,我們就只能去機房連接服務了。VIP的實質就是確保兩臺服務器各有一個管理IP不動,就是隨時可以連上機器,然後,增加綁定其他的IP,這樣就算VIP遷移走了,也不至於服務器本身連接不上,因爲還有管理IP。

手工配置VIP的方法:

Heartbeat2軟件默認是使用這個命令來添加VIP的

Ifconfig eth0:1 192.168.1.131 netmask 255.255.255.0 up(IP別名)

Keepalved軟件默認使用這個命令來添加VIP,heartbeat3採用的方案

Ip addr add 10.0.12.1/24 broadcast 10.0.12.255 dev eth1(輔助IP)

提示:ip add 可以查看包括別名和輔助ip,用ifconfig無法查看輔助情況

手工刪除VIP的方法:

Ip addr 10.0.12.1/24 broadcast 10.0.15.255 dev eth1(輔助IP)

Ifconfig eth0:1 10.0.0.1 netmask 255.255.255.0 down (ip別名)

手工查看VIP的方法:

使用別名的方法配置的VIP可通過ifconfig查看

1.8 Heartbeat腳本默認目錄

啓動腳本:/etc/init.d/ (特別使用yum安裝的時候)

重要資源目錄:/etc/ha.d/resource.d/ 如果以後自己開發程序就放在這個地方,然後heartbeat在haresource文件裏直接調用。

[root@heartbeat-1-130 ha.d]# ll /etc/ha.d/resource.d/
總用量 96
-rwxr-xr-x 1 root root  828 12月  3 2013 apache
-rwxr-xr-x 1 root root  805 12月  3 2013 AudibleAlarm
-rwxr-xr-x 1 root root  760 12月  3 2013 db2
-rwxr-xr-x 1 root root  910 12月  3 2013 Delay
-rwxr-xr-x 1 root root 1903 12月  3 2013 Filesystem
-rwxr-xr-x 1 root root 2325 12月  3 2013 hto-mapfuncs
-rwxr-xr-x 1 root root 3488 3月   3 23:31 httpd
-rwxr-xr-x 1 root root  951 12月  3 2013 ICP
-rwxr-xr-x 1 root root 3424 12月  3 2013 ids
-rwxr-xr-x 1 root root 2273 12月  3 2013 IPaddr
-rwxr-xr-x 1 root root 1825 12月  3 2013 IPaddr2
-rwxr-xr-x 1 root root 1391 12月  3 2013 IPsrcaddr
-rwxr-xr-x 1 root root 1165 12月  3 2013 IPv6addr
-rwxr-xr-x 1 root root 1091 12月  3 2013 LinuxSCSI
-rwxr-xr-x 1 root root  790 12月  3 2013 LVM
-rwxr-xr-x 1 root root 1125 12月  3 2013 MailTo
-rwxr-xr-x 1 root root 2926 12月  3 2013 OCF
-rwxr-xr-x 1 root root  742 12月  3 2013 portblock
-rwxr-xr-x 1 root root 1160 12月  3 2013 Raid1
-rwxr-xr-x 1 root root 1563 12月  3 2013 SendArp
-rwxr-xr-x 1 root root 1012 12月  3 2013 ServeRAID
-rwxr-xr-x 1 root root 1294 12月  3 2013 WAS
-rwxr-xr-x 1 root root 1166 12月  3 2013 WinPopup
-rwxr-xr-x 1 root root  666 12月  3 2013 Xinetd

提示:把腳本放到上面兩個路徑其中任意一個下面,然後再heartbeat的haresource配置文件中配置腳本名稱就能調用到該腳本,進而控制資源和服務的啓動和關閉。

1.9 Heartbeat配置文件

Heartbeat的默認配置文件目錄爲/etc/ha.d,常用的配合文件有3個,分別爲ha.cf、authkey、haresource。

Mysql DBA 高級運維學習之路-heartbeat介紹

有關heartbeat的介紹可以查看下面文章

https://www.linuxidc.com/Linux/2017-02/140554.htm

https://www.aliyun.com/jiaocheng/131309.html

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