Heartbeat+LVS構建高可用負載均衡集羣

1.heartbeat簡介:html

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

這個集羣方案是利用第三方軟件搭建的,要比RedHat自帶的集羣軟件在功能上簡化一些,可是搭建起來很是的方便。並且是一種快速解決方案。算法

heartbeat的高可用集羣採用的通訊方式是udp協議和串口通訊,並且heartbeat插件技術實現了集羣間的串口、多播、廣播和組播通 信。它實現了HA 功能中的核心功能——心跳,將Heartbeat軟件同時安裝在兩臺服務器上,用於監視系統的狀態,協調主從服務器的工做,維護系統的可用性。它能偵測服 務器應用級系統軟件、硬件發生的故障,及時地進行錯誤隔絕、恢復;經過系統監控、服務監控、IP自動遷移等技術實如今整個應用中無單點故障,簡單、經濟地 確保重要的服務持續高可用性。  Heartbeat採用虛擬IP地址映射技術實現主從服務器的切換對客戶端透明的功能。apache

可是單一的heartbeat是沒法提供健壯的服務的,因此咱們在後臺使用lvs進行負載均衡。vim

2.LVS簡介瀏覽器

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。由章文嵩博士成立。安全

IPVS服務器

說道lvs咱們就得提到ipvs,IPVS 是 LVS 集羣系統的核心軟件,它的主要做用是:安裝在 Load Balancer 上,把發往 Virtual IP 的請求轉發到 Real Server 上。IPVS 的負載均衡機制有三種,這裏使用 IP Tunneling 機制:網絡

  • Virtual Server via NAT
  • Virtual Server via IP Tunneling
  • Virtual Server via Direct Routing

咱們此次的實驗採用最後一種直連的方式。負載均衡

lvs的調度算法很是的重要,你們必定要熟悉他們。在官方網站上有詳細的解釋:http://zh.linuxvirtualserver.org/

IPVS 的負載調度算法有十種:

  1. 輪叫(Round Robin)
  2. 加權輪叫(Weighted Round Robin)
  3. 最少連接(Least Connections)
  4. 加權最少連接(Weighted Least Connections)
  5. 基於局部性的最少連接(Locality-Based Least Connections)
  6. 帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)
  7. 目標地址散列(Destination Hashing )
  8. 源地址散列(Source Hashing)
  9. 最短時間望延遲(Shortest Expected Delay)
  10. 無須隊列等待(Never Queue)

註釋:咱們採用較爲簡單的輪叫方式。

3.ldirectord簡介:

ldirectord是配合lvs做爲一種健康檢測機制,要不負載均衡器在節點掛掉後依然沒有檢測的功能。

上面介紹了heardbeat、lvs和ldirectord的基本概念。說再多不如搭建一個服務給你們展現效果。

4.搭建RHEL6.5+LVS+Linux-HA+Ldirectord服務(提供http和ftp服務做爲例子)

--------------------------------------分割線 --------------------------------------

相關閱讀

基於Heartbeat V1實現Web服務雙機熱備 http://www.linuxidc.com/Linux/2014-04/100635.htm

Heartbeat實現Web服務的高可用羣集 http://www.linuxidc.com/Linux/2014-04/99503.htm

Heartbeat+LVS+Ldirectord高可用負載均衡解決方案 http://www.linuxidc.com/Linux/2014-04/99502.htm

DRBD+Heartbeat+NFS高可用性配置筆記 http://www.linuxidc.com/Linux/2014-04/99501.htm

Heartbeat基於CRM使用NFS對MySQL高可用 http://www.linuxidc.com/Linux/2014-03/98674.htm

Heartbeat高可用httpd基於Resources簡單配置 http://www.linuxidc.com/Linux/2014-03/98672.htm

--------------------------------------分割線 --------------------------------------

注意

1.系統:redhat6.5 ;

2.節點:一共要用到四個虛擬機做爲節點,其中兩個上面安裝heartbeat和lvs,另外兩個節點只提供apache和vsftpd服務;

3.這四個節點之間的解析必定要作好;

4.防火牆關閉,時間同步,四個機子的系統版本最好相同。

實驗的環境如圖下所示,第一個控制檯是我真機的,其餘四個爲實驗的四個節點,前兩個安裝heartbeat和lvs,後兩個控制檯提供apache和vsftpd服務。接下來咱們分塊來配置。

1. 安裝heartbeat:

這個是第三方軟件,不是redhat自帶的,因此你們要本身去下載:,分別須要:

heartbeat-3.0.4-2.el6.x86_64.rpm

heartbeat-devel-3.0.4-2.el6.x86_64.rpm

heartbeat-libs-3.0.4-2.el6.x86_64.rpm

個人在本地的vsftpd服務上有,也能夠在http://rpm.pbone.net/上查找。

heartbeat,lvs

兩個節點上都應該有這個三個包。而後在自定義的位置安裝他們:

heartbeat,lvs

heartbeat,lvs

要是沒有安裝成功那麼必定要從新設置你的yum源:

vim    /etc/yum.repos.d/yum.repo

heartbeat,lvs

這個是heartbeat的三個配置文件:

、ha.cf        Main configuration file

haresources    Resource configuration file

authkeys    Authentication information

默認狀況下配置文件裏沒有,咱們得從其餘地方拷貝一份:

heartbeat,lvs

vim ha.cf:

heartbeat,lvs

keepalive 2

設定heartbeat之間的時間間隔爲2秒。

warntime 10

在日誌中發出「late heartbeat「警告以前等待的時間,單位爲秒。

deadtime 30

在30秒後宣佈節點死亡。

initdead 120

在某些配置下,重啓後網絡須要一些時間才能正常工做。這個單獨的」deadtime」選項能夠處理這種狀況。它的取值至少應該爲一般deadtime的兩倍。

udpport 694

使用端口694進行bcast和ucast通訊。這是默認的,而且在IANA官方註冊的端口號。

heartbeat,lvs

heartbeat,lvs

默認在回覆後自動回切:

heartbeat,lvs

有兩個節點安裝heartbeat:

heartbeat,lvs

用來測試節點的網絡是否聯通:

heartbeat,lvs

heartbeat,lvs

上述是ha.cf配置文件的修改,而後咱們要來authkeys文件:

heartbeat,lvs

修改文件的訪問權限:

heartbeat,lvs

最後咱們來修改haresources,咱們要在其中添加一個apache服務,可是咱們要給它一個虛擬的ip(這個ip必定是沒有被別人佔用的),讓這兩個節點做它的論尋。

heartbeat,lvs

在兩邊都安裝httpd服務做爲測試,爲了區分,咱們在他們的index.html中寫入不一樣的內容(事實上在生產環境中二者的內容固然是相同的,由於咱們做的但是負載均衡麼)

作完上述內容後開啓兩邊的heartbeat服務:

heartbeat,lvs

而後咱們來經過firefox檢驗效果:

heartbeat,lvs

而後咱們讓當前的節點heartbeat關閉,發現另一個節點自動接管了:

heartbeat,lvs

heartbeat,lvs

再讓剛纔那個節點的heartbeat開啓,由於它是主節點(server101.example.com),因此又接管回來了:

heartbeat,lvs

heartbeat,lvs

小結:

這樣就起到了負載均衡的效果,可是這只是單純的heartbeat,咱們尚未和lvs進行結合,在功能上不夠完善,在接下來的帖子裏會逐漸把二者結合起來,下一個帖子首先會讓你們感覺一下lvs單獨使用時的效果,最後會把二者結合起來。

上一個帖子介紹了heartbeat的單獨使用,今天咱們首先來介紹lvs的單獨使用,最後將二者結合 起來。提供一個全面的服務。

1.LVS的三種負載均衡技術:

很是幸運的是kernel 2.6x 已經內建了LVS模塊,並且在RedHat6版本中也有LVS的安裝包ipvsadm。

下面咱們對LVS的三種負載均衡技術進行比較:

1.經過NAT實現虛擬服務器(VS/NAT):

因爲IPv4中IP地址空間的日益緊張和安全方面的緣由,不少網絡使用保留IP地址。這些地址不在Internet上使用,而是專門爲內部網絡預留 的。當內部網絡中的主機要訪問Internet或被Internet訪問時,就須要採用網絡地址轉換(Network Address Translation,如下簡稱NAT),將內部地址轉化爲Internets上可用的外部地址。這樣當外部網絡訪問服務的時候,實際上是訪問那個能夠和 外界通訊的IP,但訪問的內容倒是在內網的節點上負載均衡的。原理以下圖所示:

heartbeat,lvs

2.經過IP隧道實現虛擬服務器(VS/TUN):

它的鏈接調度和管理與VS/NAT中的同樣,只是它的報文轉發方法不一樣。調度器根據各個服務器的負載狀況,動態地選擇一臺服務器,將請求報文封裝在 另外一個IP報文中,再將封裝後的IP報文轉發給選出的服務器;服務器收到報文後,先將報文解封得到原來目標地址爲VIP的報文,服務器發現VIP地址被配 置在本地的IP隧道設備上,因此就處理這個請求,而後根據路由表將響應報文直接返回給客戶。

記住它和NAT的不一樣是,能夠直接與客戶機創建連接。原理以下圖所示:

heartbeat,lvs

3.經過直接路由實現虛擬服務器(VS/DR):

調度器和服務器組都必須在物理上有一個網卡經過不分斷的局域網相連,如經過高速的交換機或者HUB相連。VIP地址爲調度器和服務器組共享,調度器 配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文;全部的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的,只是 用於處理目標地址爲VIP的網絡請求。

這個模型是咱們今天要作的,每一個節點都有一個虛擬IP(控制節點和真正提供服務的節點(RS)),其中的調度由控制器完成的(RR輪叫算法),服務不會主動的去提供服務。與TUN相同的是,他們也是能夠直接和客戶機通訊。原理如圖所示:

heartbeat,lvs

2.LVS的安裝和配置:

首先咱們仍是打開那個熟悉的控制檯:

heartbeat,lvs

安裝ipvsadm:

heartbeat,lvs

當前沒有任何調度列表:

heartbeat,lvs

添加虛擬ip做爲公共訪問ip:

heartbeat,lvs

咱們添加虛擬ip的httpd服務的端口,而且採用了輪叫的算法(RR):

heartbeat,lvs

容許server106和server107的httpd服務做爲輪叫的節點:

heartbeat,lvs

在serevr106和server107上分別安裝httpd服務:

heartbeat,lvs

heartbeat,lvs

圖片8

而後咱們要作如下事情:

1.server106和server107要可以識別192.168.2.110這個虛擬IP,因此他們也要添加這個虛擬網卡。

2.爲了體現出輪叫的效果,咱們在二者的默認發佈目錄中寫入不一樣的內容以示區別。

heartbeat,lvs

圖片9

heartbeat,lvs

圖片10

如今控制節點和提供真實服務的節點都可以識別VIP(192.168.2.110),接下來咱們要在提供服務的節點上添加策略,這個感受和防火牆很相似,不過要安裝一個額外的軟件:

heartbeat,lvs

圖片11

heartbeat,lvs

此時還沒任何策略設置:

heartbeat,lvs

圖片13

添加策略,把直接進來訪問192.168.2.110的包所有丟棄,讓從192.168.2.110出去的包從192.168.2.106出去(192.168.2.107同理)。

heartbeat,lvs

圖片14

heartbeat,lvs

圖片15

保存策略:

heartbeat,lvs

圖片16

如今咱們經過瀏覽器反覆訪問192.168.2.110(確保服務節點的httpd服務開啓),多刷新幾回:

這個是咱們在訪問以前控制節點記錄的信息:

heartbeat,lvs

圖片17

在訪問了32次以後,咱們發現兩個節點各輪叫了16次,可是訪問的ip都是虛擬ip(192.168.2.110),這就是直連狀況下的LVS方案。

heartbeat,lvs

並且網頁的內容也在輪循變化:

heartbeat,lvs

heartbeat,lvs

3.小結:

本帖先是介紹了LVS的三種負載均衡技術,而後咱們身體力行的搭建了直連狀況下的LVS,那麼在下個帖子中咱們會把LVS和heartbeat結合起來組成一個健壯的服務。

以前咱們把LVS和heartbeat都單獨進行了測試,是時候進行合併了

1.LVS+heartbeat:

首先顯示咱們的控制檯:

LVS+heartbeat

讓這兩個軟件可以互相協做,而且讓該平臺具備可以報警和挽救的機制,咱們須要安裝ldirectord軟件。

ldirectord-3.9.2-1.2.x86_64.rpm

在server101和server105上安裝ldirectord(由於包和系統的包有依賴性,全部使用yum安裝):

LVS+heartbeat

這些是ldirectord的相關文件位置,拷貝配置文件到heartbeat的配置文件目錄下::

LVS+heartbeat

兩邊的節點上都安裝perl-IO-Socket-INET6-2.56-4.el6.noarch:,不然後面的ldirectord會由於缺乏腳本沒法打開:

LVS+heartbeat

編輯ldirectord的配置文件(vim directord.cf):

LVS+heartbeat

咱們指定兩個真實服務的節點192.168.2.106和192.168.2.107,他們的訪問順序採用輪叫的方式,當兩個節點都掛掉的話,192.168.2.101這個節點本身提供服務。

把這個配置文件拷貝到另一個控制節點192.168.2.105的配置文件處:

LVS+heartbeat

編輯haresources文件,添加ldirectord服務到heartbeat中:

LVS+heartbeat

一樣巴這個文件也拷貝到192.168.2.105:/etc/ha.d/中:

LVS+heartbeat

這個時候咱們直接啓動heartbeat服務,他會自動調用ldirectord服務,而咱們的ldirectord的配置文件裏的內容完成着和LVS同樣的調度功能,這樣平臺搭建基本完成:

這個是ip的信息:

LVS+heartbeat

而後咱們訪問下192.168.2.110的網址:

LVS+heartbeat

再查看lvs的信息,每一個節點都被訪問了4次:

LVS+heartbeat

小結:

這樣就把heartbeat、LVS、ldirectord結合起來完成了一個高可用的集羣方案,這裏只演示了httpd服務,若是生產環境中有其餘的服務,也可自行添加。下個帖子咱們還會介紹另一種集羣方案keepalived。

相關文章
相關標籤/搜索