linux高級技巧: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 的負載調度算法有十種:
- 輪叫(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服務作為例子)
注意:
1.系統:redhat6.5 ;
2.節點:一共要用到四個虛擬機作為節點,其中兩個上面安裝heartbeat和lvs,另外兩個節點只提供apache和vsftpd服務;
3.這四個節點之間的解析一定要做好;
4.防火墻關閉,時間同步,四個機子的系統版本***相同。
實驗的環境如圖下所示,***個控制臺是我真機的,其他四個為實驗的四個節點,前兩個安裝heartbeat和lvs,后兩個控制臺提供apache和vsftpd服務。接下來我們分塊來配置。
#p#
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的兩倍。
#p#
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單獨使用時的效果,***會把兩者結合起來。
#p#
上一個帖子介紹了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相同的是,他們也是可以直接和客戶機通信。原理如圖所示:
#p#
2.LVS的安裝和配置:
首先我們還是打開那個熟悉的控制臺:
安裝ipvsadm:
當前沒有任何調度列表:
添加虛擬ip作為公共訪問ip:
我們添加虛擬ip的httpd服務的端口,并且采用了輪叫的算法(RR):
允許server106和server107的httpd服務作為輪叫的節點:
在serevr106和server107上分別安裝httpd服務:
然后我們要做以下事情:
1.server106和server107要能夠識別192.168.2.110這個虛擬IP,所以他們也要添加這個虛擬網卡。
2.為了體現出輪叫的效果,我們在兩者的默認發布目錄中寫入不同的內容以示區別。
#p#
現在控制節點和提供真實服務的節點都能夠識別VIP(192.168.2.110),接下來我們要在提供服務的節點上添加策略,這個感覺和防火墻很類似,不過要安裝一個額外的軟件:
此時還沒任何策略設置:
添加策略,把直接進來訪問192.168.2.110的包全部丟棄,讓從192.168.2.110出去的包從192.168.2.106出去(192.168.2.107同理)。
保存策略:
現在我們通過瀏覽器反復訪問192.168.2.110(確保服務節點的httpd服務開啟),多刷新幾次:
這個是我們在訪問之前控制節點記錄的信息:
在訪問了32次之后,我們發現兩個節點各輪叫了16次,但是訪問的ip都是虛擬ip(192.168.2.110),這就是直連情況下的LVS方案。
而且網頁的內容也在輪循變化:
3.小結:
本帖先是介紹了LVS的三種負載均衡技術,然后我們身體力行的搭建了直連情況下的LVS,那么在下個帖子中我們會把LVS和heartbeat結合起來組成一個健壯的服務。
原文鏈接:http://blog.csdn.net/linux_player_c/article/details/38277173 、http://blog.csdn.net/linux_player_c/article/details/38294319