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 的負載調度算法有十種:
- 輪叫(Round Robin)
- 加權輪叫(Weighted Round Robin)
- 最少鏈接(Least Connections)
- 加權最少鏈接(Weighted Least Connections)
- 基於局部性的最少鏈接(Locality-Based Least Connections)
- 帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication)
- 目標地址散列(Destination Hashing )
- 源地址散列(Source Hashing)
- 最短期望延遲(Shortest Expected Delay)
- 無須隊列等待(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/上查找。
兩個節點上都應該有這個三個包。然後在自定義的位置安裝他們:
要是沒有安裝成功那麼一定要重新設置你的yum源:
vim /etc/yum.repos.d/yum.repo
這個是heartbeat的三個配置文件:
、ha.cf Main configuration file
haresources Resource configuration file
authkeys Authentication information
默認情況下配置文件裏沒有,我們得從其他地方拷貝一份:
vim ha.cf:
keepalive 2
設定heartbeat之間的時間間隔爲2秒。
warntime 10
在日誌中發出“late heartbeat“警告之前等待的時間,單位爲秒。
deadtime 30
在30秒後宣佈節點死亡。
initdead 120
在某些配置下,重啓後網絡需要一些時間才能正常工作。這個單獨的”deadtime”選項可以處理這種情況。它的取值至少應該爲通常deadtime的兩倍。
udpport 694
使用端口694進行bcast和ucast通信。這是默認的,並且在IANA官方註冊的端口號。
默認在回覆後自動回切:
有兩個節點安裝heartbeat:
用來測試節點的網絡是否聯通:
上述是ha.cf配置文件的修改,然後我們要來authkeys文件:
修改文件的訪問權限:
最後我們來修改haresources,我們要在其中添加一個apache服務,但是我們要給它一個虛擬的ip(這個ip一定是沒有被別人佔用的),讓這兩個節點作它的論尋。
在兩邊都安裝httpd服務作爲測試,爲了區分,我們在他們的index.html中寫入不同的內容(事實上在生產環境中兩者的內容當然是相同的,因爲我們作的可是負載均衡麼)
做完上述內容後開啓兩邊的heartbeat服務:
然後我們來通過firefox檢驗效果:
然後我們讓當前的節點heartbeat關閉,發現另外一個節點自動接管了:
再讓剛纔那個節點的heartbeat開啓,因爲它是主節點(server101.example.com),所以又接管回來了:
小結:
這樣就起到了負載均衡的效果,但是這只是單純的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,但訪問的內容卻是在內網的節點上負載均衡的。原理如下圖所示:
2.通過IP隧道實現虛擬服務器(VS/TUN):
它的連接調度和管理與VS/NAT中的一樣,只是它的報文轉發方法不同。調度器根據各個服務器的負載情況,動態地選擇一臺服務器,將請求報文封裝在另一個IP報文中,再將封裝後的IP報文轉發給選出的服務器;服務器收到報文後,先將報文解封獲得原來目標地址爲VIP的報文,服務器發現VIP地址被配置在本地的IP隧道設備上,所以就處理這個請求,然後根據路由表將響應報文直接返回給客戶。
記住它和NAT的不同是,可以直接與客戶機建立鏈接。原理如下圖所示:
3.通過直接路由實現虛擬服務器(VS/DR):
調度器和服務器組都必須在物理上有一個網卡通過不分斷的局域網相連,如通過高速的交換機或者HUB相連。VIP地址爲調度器和服務器組共享,調度器配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文;所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的,只是用於處理目標地址爲VIP的網絡請求。
這個模型是我們今天要做的,每個節點都有一個虛擬IP(控制節點和真正提供服務的節點(RS)),其中的調度由控制器完成的(RR輪叫算法),服務不會主動的去提供服務。與TUN相同的是,他們也是可以直接和客戶機通信。原理如圖所示:
2.LVS的安裝和配置:
首先我們還是打開那個熟悉的控制檯:
安裝ipvsadm:
當前沒有任何調度列表:
添加虛擬ip作爲公共訪問ip:
我們添加虛擬ip的httpd服務的端口,並且採用了輪叫的算法(RR):
允許server106和server107的httpd服務作爲輪叫的節點:
在serevr106和server107上分別安裝httpd服務:
圖片8
然後我們要做以下事情:
1.server106和server107要能夠識別192.168.2.110這個虛擬IP,所以他們也要添加這個虛擬網卡。
2.爲了體現出輪叫的效果,我們在兩者的默認發佈目錄中寫入不同的內容以示區別。
圖片9
圖片10
現在控制節點和提供真實服務的節點都能夠識別VIP(192.168.2.110),接下來我們要在提供服務的節點上添加策略,這個感覺和防火牆很類似,不過要安裝一個額外的軟件:
圖片11
此時還沒任何策略設置:
圖片13
添加策略,把直接進來訪問192.168.2.110的包全部丟棄,讓從192.168.2.110出去的包從192.168.2.106出去(192.168.2.107同理)。
圖片14
圖片15
保存策略:
圖片16
現在我們通過瀏覽器反覆訪問192.168.2.110(確保服務節點的httpd服務開啓),多刷新幾次:
這個是我們在訪問之前控制節點記錄的信息:
圖片17
在訪問了32次之後,我們發現兩個節點各輪叫了16次,但是訪問的ip都是虛擬ip(192.168.2.110),這就是直連情況下的LVS方案。
而且網頁的內容也在輪循變化:
3.小結:
本帖先是介紹了LVS的三種負載均衡技術,然後我們身體力行的搭建了直連情況下的LVS,那麼在下個帖子中我們會把LVS和heartbeat結合起來組成一個健壯的服務。
之前我們把LVS和heartbeat都單獨進行了測試,是時候進行合併了
1.LVS+heartbeat:
首先顯示我們的控制檯:
讓這兩個軟件能夠互相協作,並且讓該平臺具有能夠報警和挽救的機制,我們需要安裝ldirectord軟件。
ldirectord-3.9.2-1.2.x86_64.rpm
在server101和server105上安裝ldirectord(因爲包和系統的包有依賴性,所有使用yum安裝):
這些是ldirectord的相關文件位置,拷貝配置文件到heartbeat的配置文件目錄下::
兩邊的節點上都安裝perl-IO-Socket-INET6-2.56-4.el6.noarch:,否則後面的ldirectord會因爲缺少腳本無法打開:
編輯ldirectord的配置文件(vim directord.cf):
我們指定兩個真實服務的節點192.168.2.106和192.168.2.107,他們的訪問順序採用輪叫的方式,當兩個節點都掛掉的話,192.168.2.101這個節點自己提供服務。
把這個配置文件拷貝到另外一個控制節點192.168.2.105的配置文件處:
編輯haresources文件,添加ldirectord服務到heartbeat中:
同樣巴這個文件也拷貝到192.168.2.105:/etc/ha.d/中:
這個時候我們直接啓動heartbeat服務,他會自動調用ldirectord服務,而我們的ldirectord的配置文件裏的內容完成着和LVS一樣的調度功能,這樣平臺搭建基本完成:
這個是ip的信息:
然後我們訪問下192.168.2.110的網址:
再查看lvs的信息,每個節點都被訪問了4次:
小結:
這樣就把heartbeat、LVS、ldirectord結合起來完成了一個高可用的集羣方案,這裏只演示了httpd服務,如果生產環境中有其他的服務,也可自行添加。下個帖子我們還會介紹另外一種集羣方案keepalived。
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2014-09/106964.htm