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

1.heartbeat簡介:

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

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

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

但是單一的heartbeat是無法提供健壯的服務的,所以我們在後臺使用lvs進行負載均衡。

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。

本文永久更新鏈接地址http://www.linuxidc.com/Linux/2014-09/106964.htm


發佈了365 篇原創文章 · 獲贊 29 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章