地址解析協議,即ARP(AddressResolutionProtocol),是根據IP地址獲取物理MAC地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的全部主機,並接收返回消息,以此肯定目標的物理地址;收到返回消息後將該IP地址和物理地址存入本機ARP緩存中並保留必定時間,下次請求時直接查詢ARP緩存以節約資源。html
OSI模型把網絡工做分爲七層,IP地址在OSI模型的第三層,MAC地址在第二層,彼此不直接打交道。在經過以太網發送IP數據包時,須要先封裝第三層(32位IP地址)、第二層(48位MAC地址)的報頭,但因爲發送時只知道目標IP地址,不知道其MAC地址,又不能跨第2、三層,因此須要使用地址解析協議。使用地址解析協議,可根據網絡層IP數據包包頭中的IP地址信息解析出目標硬件地址(MAC地址)信息,以保證通訊的順利進行。ARP是三層協議,可是工做在二層前端
主機A的IP地址爲192.168.1.1,MAC地址爲0A-11-22-33-44-01;mysql
主機B的IP地址爲192.168.1.2,MAC地址爲0A-11-22-33-44-02;linux
當主機A要與主機B通訊時,地址解析協議能夠將主機B的IP地址(192.168.1.2)解析成主機B的MAC地址,如下爲工做流程:nginx
第1步:根據主機A上的路由表內容,IP肯定用於訪問主機B的轉發IP地址是192.168.1.2。而後A主機在本身的本地ARP緩存中檢查主機B的匹配MAC地址。web
第2步:若是主機A在ARP緩存中沒有找到映射,它將詢問192.168.1.2的硬件地址,從而將ARP請求幀廣播到本地網絡上的全部主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網絡上的每臺主機都接收到ARP請求而且檢查是否與本身的IP地址匹配。若是主機發現請求的IP地址與本身的IP地址不匹配,它將丟棄ARP請求。算法
第3步:主機B肯定ARP請求中的IP地址與本身的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中。sql
第4步:主機B將包含其MAC地址的ARP回覆消息直接發送回主機A。數據庫
第5步:當主機A收到從主機B發來的ARP回覆消息時,會用主機B的IP和MAC地址映射更新ARP緩存。本機緩存是有生存期的,生存期結束後,將再次重複上面的過程。主機B的MAC地址一旦肯定,主機A就能向主機B發送IP通訊了。apache
ARP協議要求通訊的主機雙方必須在同一網段(即局域網環境)
ARP緩存是個用來儲存IP地址和MAC地址的緩衝區,其本質就是一個IP地址-->MAC地址的對應表,表中每個條目分別記錄了網絡上其餘主機的IP地址和對應的MAC地址。每個以太網或令牌環網絡適配器都有本身單獨的表。當地址解析協議被詢問一個已知IP地址節點的MAC地址時,先在ARP緩存中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才發送ARP請求向局域網查詢。
爲使廣播量最小,ARP維護IP地址到MAC地址映射的緩存以便未來使用。ARP緩存能夠包含動態和靜態項目。動態項目隨時間推移自動添加和刪除。每一個動態ARP緩存項的潛在生命週期是10分鐘。新加到緩存中的項目帶有時間戳,若是某個項目添加後2分鐘內沒有再使用,則此項目過時並從ARP緩存中刪除;若是某個項目已在使用,則又收到2分鐘的生命週期;若是某個項目始終在使用,則會另外收到2分鐘的生命週期,一直到10分鐘的最長生命週期。靜態項目一直保留在緩存中,直到從新啓動計算機爲止。
arp緩存表是把雙刃劍
(1)有arp緩存表能夠加快arp的解析速度
(2)也給黑客帶來了攻擊服務器的風險,俗稱arp欺騙和arp攻擊
arp攻擊就是經過僞造ip地址和mac地址對實現arp欺騙。地址解析協議是創建在網絡中各個主機互相信任的基礎上的,它的誕生使得網絡可以更加高效的運行,但其自己也存在缺陷:
ARP地址轉換表是依賴於計算機中高速緩衝存儲器動態更新的,而高速緩衝存儲器的更新是受到更新週期的限制的,只保存最近使用的地址的映射關係表項,這使得攻擊者有了可乘之機,能夠在高速緩衝存儲器更新表項以前修改地址轉換表,實現攻擊。ARP請求爲廣播形式發送的,網絡上的主機能夠自主發送ARP應答消息,而且當其餘主機收到應答報文時不會檢測該報文的真實性就將其記錄在本地的MAC地址轉換表,這樣攻擊者就能夠向目標主機發送僞ARP應答報文,從而篡改本地的MAC地址表。ARP欺騙能夠致使目標計算機與網關通訊失敗,更會致使通訊重定向,全部的數據都會經過攻擊者的機器,所以存在極大的安全隱患。
如何防止:
arp -s 192.168.0.11 mac
用於查看緩存中的全部項目。-a和-g參數的結果是同樣的,多年來-g一直是UNIX平臺上用來顯示ARP緩存中全部項目的選項,而Windows用的是arp-a(-a可被視爲all,即所有的意思),但它也能夠接受比較傳統的-g選項。
若是有多個網卡,那麼使用arp-a加上接口的IP地址,就能夠只顯示與該接口相關的ARP緩存項目。
能夠向ARP緩存中人工輸入一個靜態項目。該項目在計算機引導過程當中將保持有效狀態,或者在出現錯誤時,人工配置的物理地址將自動更新該項目。
使用該命令可以人工刪除一個靜態項目。
一組計算機依靠網絡協同工做就是集羣
a、高性能(performance)評價一個網站好壞的直接感觸
b、價格有效性,小型機(IBM)特貴
c、高可用性:7*24運行availability
d、可伸縮性:可動態添加新機器scalability數據庫的伸縮很困難
a、透明性(Transparency)
如何高效地使得由多個獨立計算機組成的鬆藕合的集羣系統構成一個虛擬服務器;客戶端應用程序與集羣系統交互時,就像與一臺高性能、高可用的服務器交互同樣,客戶端無須做任何修改。部分服務器的切入和切出不會中斷服務,這對用戶也是透明的。
b、性能(Performance)
性能要接近線性加速,這須要設計很好的軟硬件的體系結構,消除系統可能存在的瓶頸。將負載較均衡地調度到各臺服務器上。
c、高可用性(Availability)
須要設計和實現很好的系統資源和故障的監測和處理系統。當發現一個模塊失敗時,要這模塊上提供的服務遷移到其餘模塊上。在理想情況下,這種遷移是即時的、自動的。
d、可管理性(Manageability)
要使集羣系統變得易管理,就像管理一個單一映像系統同樣。在理想情況下,軟硬件模塊的插入能作到即插即用(Plug&Play)。
e、可編程性(Programmability)
在集羣系統上,容易開發應用程序。
a、LB:負載均衡集羣
b、HA:高可用性集羣
c、高性能計算
d、網格計算
a、分擔請求和數據流量,從而增長吞吐量,併發量
b、保證集羣的7*24小時服務
c、用於web服務器,數據庫的從庫
a、典型負載均衡軟件:lvs、F5(4osi) 、nginx(7osi) 、haproxy(4+7osi)
b、典型的高可用軟件:keepalived、heratbeat
c、互聯網商業集羣硬件:F五、netscaler、redware、A10
a、功能
有實現3種IP負載均衡技術和10種鏈接調度算法的IPVS軟件。在IPVS內部實現上,採用了高效的Hash函數和垃圾回收機制,能正確處理所調度報文相 關的ICMP消息(有些商品化的系統反而不能)。虛擬服務的設置數目沒有限制,每一個虛擬服務有本身的服務器集。它支持持久的虛擬服務(如HTTP Cookie和HTTPS等須要該功能的支持),並提供詳盡的統計數據,如鏈接的處理速率和報文的流量等。針對大規模拒絕服務(Deny of Service)攻擊,實現了三種防衛策略。有基於內容請求分發的應用層交換軟件KTCPVS,它也是在Linux內核中實現。有相關的集羣管理軟件對資源進行監測,能及時將故障屏蔽,實現系統的高可用性。主、從調度器能週期性地進行狀態同步,從而實現更高的可用性。
b、適用性
後端服務器可運行任何支持TCP/IP的操做系統,包括Linux,各類Unix(如FreeBSD、SunSolaris、HP Unix等),Mac/OS和Windows NT/2000等。負載調度器可以支持絕大多數的TCP和UDP協議:TCP包含HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等,UDP包含DNS,NTP,ICP,視頻、音頻流播放協議等無需對客戶機和服務器做任何修改,可適用大多數Internet服務。
c、性能
LVS服務器集羣系統具備良好的伸縮性,可支持幾百萬個併發鏈接。配置100M網卡,採用VS/TUN或VS/DR調度技術,集羣系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。
d、可靠性
LVS服務器集羣軟件已經在不少大型的、關鍵性的站點獲得很好的應用,因此它的可靠性在真實應用獲得很好的證明。有不少調度器運行一年多,未做一次重啓動。
LVS是Linux虛擬服務器(LinuxVirtualServers),使用負載均衡技術將多臺服務器組成一個虛擬服務器。它爲適應快速增加的網絡訪問需求提供了一個負載能力易於擴展,而價格低廉的解決方案。LVS實際上是一種集羣(Cluster)技術,採用IP負載均衡技術(LVS的IP負載均衡技術是經過IPVS模塊來實現的,linux內核2.6版本以上是默認安裝IPVS的)和基於內容請求分發技術。調度器具備很好的吞吐率,將請求均衡地轉移到不一樣的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,並且無需修改客戶端和服務器端的程序。
LVS負載均衡調度技術是在LINUX內核中實現的,所以被稱之爲LINUX虛擬服務器。咱們使用該軟件配置LVS時候,不能直接配置內核中的IPVS,而須要使用IPVS的管理工具ipvsadm進行管理,固然咱們也能夠經過keepalived軟件直接管理IPVS,並非經過ipvsadm來管理ipvs。
a、真正實現調度的工具是IPVS,工做在LINUX內核層面。
b、LVS自帶的IPVS管理工具是ipvsadm。
c、keepalived實現管理IPVS及負載均衡器的高可用。
d、Redhat工具PiranhaWEB管理實現調度的工具IPVS(不經常使用)
a、VIP:虛擬ip地址virturalipaddress用於給客戶端計算機提供服務的ip地址
b、RIP:realip,集羣下面節點使用的ip地址,物理ip地址
c、DIP:directorip用於鏈接內外網絡的ip,物理網卡上的ip地址,他是負載均衡器上的ip
d、CIP:clientip客戶端用戶計算機請求集羣服務器的ip地址,該地址用做發送給集羣的請求的源ip地址
a、爲何要抑制RS服務器上的ARP
爲了讓RS服務器可以處理目標地址爲vip的IP包,首先必需要讓RS能接收到這個包,這就需將VIP綁定到RS服務器的lo接口上,讓RS服務器可以完成接收包並將結果返回client。不能夠將VIP設置在出口網卡上,不然會響應客戶端的arprequest,形成client/gatewayarp table紊亂,以致於整個loadbalance都不能正常工做。抑制ARP是爲了防止RS和LVS調度服務器上的VIP衝突,由於RS和LVS調度服務器上的VIP是一個IP,抑制RS服務器的ARP響應,可讓RS服務器不響應ARP請求,有效解決同一VIP衝突
b、抑制ARP的命令
echo"1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo"2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo"1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce
c、抑制ARP命令詳解
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
這兩條是能夠不用的,由於arp對邏輯接口沒有意義。
若是你的RS的外部網絡接口是eth0,那麼
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
其實真正要執行的是:
echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
我的建議把上面兩條也加到你的腳本里去,由於萬一系統裏上面兩條默認的值不是0,那有多是會出問題。
arp_ignore:定義對目標地址爲本地IP的ARP詢問不一樣的應答模式
0 - (默認值): 迴應任何網絡接口上對任何本地IP地址的arp查詢請求
1 - 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求
2 -只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內
3 - 不迴應該網絡界面的arp請求,而只對設置的惟一和鏈接地址作出迴應
4-7 - 保留未使用
8 -不迴應全部(本地地址)的arp查詢
arp_announce- INTEGER對網絡接口上,本地IP地址的發出的,ARP迴應,做出相應級別的限制:肯定不一樣程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口
0 - (默認) 在任意網絡接口(eth0,eth1,lo)上的任何本地地址
1 -儘可能避免不在該網絡接口子網段的本地地址作出arp迴應. 當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候頗有用.此時會檢查來訪IP是否爲全部接口上的子網段內ip之一.若是改來訪IP不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理.
2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.首要是選擇全部的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址. 若是沒有合適的地址被發現,將選擇當前的發送網絡接口或其餘的有可能接受到該ARP迴應的網絡接口來進行發送. 限制了使用本地的vip地址做爲優先的網絡接口
a、原理圖
①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),後面統稱爲CIP),目標地址爲VIP(負載均衡器前端地址,後面統稱爲VIP)。
②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將客戶端請求報文的目標地址改成了後端服務器的RIP地址並將報文根據算法發送出去。
③.報文送到RealServer後,因爲報文的目標地址是本身,因此會響應該請求,並將響應報文返還給LVS。
④.而後lvs將此報文的源地址修改成本機併發送給客戶端。
注意:在NAT模式中,RealServer的網關必須指向LVS,不然報文沒法送達客戶端。
b、IP包調度過程圖
c、小結
(i)NAT技術將請求的報文和響應的報文都須要經過LB進行地址改寫,所以網站訪問量比較大的時候LB負載均衡調度器有比較大的瓶頸,通常要求最多之能10-20臺節點
(ii)須要在LB上配置一個公網IP地址就能夠了。
(iii)每臺內部的realserver服務器的網關地址必須是調度器LB的內網地址。
(v)NAT模式支持對IP地址和端口進行轉換。即用戶請求的端口和真實服務器的端口能夠不一致。
d、優缺點
(i)優勢
集羣中的物理服務器可使用任何支持TCP/IP操做系統,只有負載均衡器須要一個合法的IP地址。
(ii)缺點
擴展性有限。當服務器節點(普通PC服務器)增加過多時,負載均衡器將成爲整個系統的瓶頸,由於全部的請求包和應答包的流向都通過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!
a、原理圖
①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址爲VIP。
②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將客戶端請求報文的源MAC地址改成本身DIP的MAC地址,目標MAC改成了RIP的MAC地址,並將此包發送給RS。
③.RS發現請求報文中的目的MAC是本身,就會將次報文接收下來,處理完請求報文後,將響應報文經過lo接口送給eth0網卡直接發送給客戶端。
注意:須要設置lo接口的VIP不能響應本地網絡內的arp請求(也叫ARP抑制)。
b、IP包調度過程圖
c、小結
(i)經過在調度器LB上修改數據包的目的MAC地址實現轉發。注意源地址仍然是CIP,目的地址仍然是VIP地址。
(ii)請求的報文通過調度器,而RS響應處理後的報文無需通過調度器LB,所以併發訪問量大時使用效率很高(和NAT模式比)
(iii)由於DR模式是經過MAC地址改寫機制實現轉發,所以全部RS節點和調度器LB只能在一個局域網裏面
(v)RS主機須要綁定VIP地址在LO接口(掩碼32位)上,而且須要配置ARP抑制。
(vi)RS節點的默認網關不須要配置成LB,而是直接配置爲上級路由的網關,能讓RS直接出網就能夠。
(vii)因爲DR模式的調度器僅作MAC地址的改寫,因此調度器LB就不能改寫目標端口,那麼RS服務器就得使用和VIP相同的端口提供服務。
(viii)直接對外的業務好比WEB等,RS的IP最好是使用公網IP。對外的服務,好比數據庫等最好使用內網IP。
d、優缺點
(i)優勢
和TUN(隧道模式)同樣,負載均衡器也只是分發請求,應答包經過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不須要隧道結構,所以可使用大多數操做系統作爲物理服務器。
DR模式的效率很高,可是配置稍微複雜一點,所以對於訪問量不是特別大的公司能夠用haproxy/nginx取代。日1000-2000WPV或者併發請求1萬一下均可以考慮用haproxy/nginx。
(ii)缺點
全部RS節點和調度器LB只能在一個局域網裏面。
a、原理圖
①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址爲VIP。
②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改成DIP,目標地址改成RIP,並將此包發送給RS。
③.RS收到請求報文後,會首先拆開第一層封裝,而後發現裏面還有一層IP首部的目標地址是本身lo接口上的VIP,因此會處理次請求報文,並將響應報文經過lo接口送給eth0網卡直接發送給客戶端。
注意:須要設置lo接口的VIP不能在共網上出現。
b、IP包調度過程圖
c、小結
(i)TUNNEL模式必須在全部的realserver機器上面綁定VIP的IP地址
(ii)TUNNEL模式的vip------>realserver的包通訊經過TUNNEL模式,無論是內網和外網都能通訊,因此不須要lvsvip跟realserver在同一個網段內
(iii)TUNNEL模式realserver會把packet直接發給client不會給lvs了
(v)TUNNEL模式走的隧道模式,因此運維起來比較難,因此通常不用。
d、優缺點
(i)優勢
負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶。因此,減小了負載均衡器的大量數據流動,負載均衡器再也不是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器可以爲不少RS進行分發。並且跑在公網上就能進行不一樣地域的分發。
(ii)缺點
隧道模式的RS節點須要合法IP,這種方式須要全部的服務器支持」IPTunneling」(IPEncapsulation)協議,服務器可能只侷限在部分Linux系統上。
a、原理圖
不管是DR仍是NAT模式,不可避免的都有一個問題:LVS和RS必須在同一個VLAN下,不然LVS沒法做爲RS的網關。
這引起的兩個問題是:
①.同一個VLAN的限制致使運維不方便,跨VLAN的RS沒法接入。
②.LVS的水平擴展受到制約。當RS水平擴容時,總有一天其上的單點LVS會成爲瓶頸。
Full-NAT由此而生,解決的是LVS和RS跨VLAN的問題,而跨VLAN問題解決後,LVS和RS再也不存在VLAN上的從屬關係,能夠作到多個LVS對應多個RS,解決水平擴容的問題。
Full-NAT相比NAT的主要改進是,在SNAT/DNAT的基礎上,加上另外一種轉換,轉換過程以下:
在包從LVS轉到RS的過程當中,源地址從客戶端IP被替換成了LVS的內網IP。
內網IP之間能夠經過多個交換機跨VLAN通訊。
當RS處理完接受到的包,返回時,會將這個包返回給LVS的內網IP,這一步也不受限於VLAN。
LVS收到包後,在NAT模式修改源地址的基礎上,再把RS發來的包中的目標地址從LVS內網IP改成客戶端的IP。
Full-NAT主要的思想是把網關和其下機器的通訊,改成了普通的網絡通訊,從而解決了跨VLAN的問題。採用這種方式,LVS和RS的部署在VLAN上將再也不有任何限制,大大提升了運維部署的便利性。
b、IP包調度過程圖
c、小結
(i)FULLNAT模式也不須要LBIP和realserverip在同一個網段;fullnat跟nat相比的優勢是:保證RS回包必定可以回到LVS;由於源地址就是LVS-->不肯定
(ii)fullnat由於要更新sorceip因此性能正常比nat模式降低10%
性能:DR>TUN>NAT>FULLNAT
因爲每一個模式的功能不同,因此具體的選擇仍是要根據公司業務的選擇,實際環境來決定。
固定調度算法:rr,wrr,dh,sh
動態調度算法:wlc,lc,lblc,lblcr,SED,NQ.
最經常使用的三種:RR WRR WLC
a、rr:輪詢調度(Round Robin)
將請求依次分配不一樣的RS節點,RS服務器均攤請求,這種算法比較簡單,可是隻適合RS節點相差性能不大的狀況
b、wrr:加權輪詢調度(Weighted Round Robin)
它將依據不一樣RS節點的權值分配任務,權值高的RS將優先得到任務,而且分配的鏈接數比權值低的RS節點更多。相同權值的RS獲得相同數目的鏈接數
c、dh:目標地址散列(destination hashing)
以目的地址爲關鍵字查找一個靜態hash表來獲取須要的RS
d、sh:源地址散列(source hashing)
以源地址爲關鍵字查找一個靜態hash表來獲取須要的RS
a、wlc:加權最小鏈接數調度(weighted least-connection)
假設各臺RS的權值依次爲Wi(i=1...n) 。當前的tcp鏈接數依次爲Ti(i=1..n),依次取TI/WI爲最小的RS做爲下一個分配的RS
b、LC:最少連接(Least Connections)
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
c、LBLC:基於局部性的最少連接(Locality-Based LeastConnections)
"基於局部性的最少連接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務器,將請求發送到該服務器。
d、LBLCR:帶複製的基於局部性最少連接(Locality-Based LeastConnections with Replication)
"帶複製的基於局部性最少連接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。
e、SED:最短時間望延遲(ShortestExpected Delay)
基於wlc算法,簡單算法:(active+1)*256/weight 【(活動的鏈接數+1)*256/除以權重】
f、NQ:永不排隊(never queue)
無需隊列(改進的sed),若是有臺realserver的鏈接數=0就直接分配過去,不須要在進行sed運算。
a、通常的網絡服務,如http,mail,mysql等經常使用的LVS調度算法爲:基本輪詢調度RR、加權最小鏈接調度WLC、加權輪詢調度WRR
b、基於局部性的最小鏈接LBLC和帶複製的給予局部性最小鏈接LBLCR主要適用於web cache和DB cache
c、源地址散列調度SH和目標地址散列調度DH能夠結合使用在防火牆集羣中,能夠保證整個系統的出入口惟一。
d、最短時間望延遲SED和永不排隊NQ調度算法主要是處理時間相對較長的網絡服務。
實際適用中這些算法的適用範圍不少,工做中最好參考內核中的鏈接調度算法的實現原理,而後根據具體的業務需求合理的選型。
LVS集羣軟件是按GPL(GNU Public License)許可證發行的自由軟件,這意味着你能夠獲得軟件的源代碼,有權對其進行修改,但必須保證你的修改也是以GPL方式發行。
LVS項目介紹:http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集羣的體系結構http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集羣中ip負載均衡技術http://www.linuxvirtualserver.org/zh/lvs3.html
LVS負載調度http://www.linuxvirtualserver.org/zh/lvs4.html
Host |
OS |
role |
remask |
192.168.1.168 |
CentOS6.5_32 |
LVS調度器(1.26) |
VIP:192.168.1.169 |
192.168.1.158 |
CentOS6.5_32 |
RS1 |
LAMP |
192.168.1.218 |
CentOS6.8_32 |
RS2 |
LNMP |
ipvsadm-1.26版本適用於ContOS6.x,ipvsadm-1.24版本適用於ContOS5.x
cd /tools
wgethttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
lsmod | grep ip_vs #無結果,ip_vs沒有安裝
a、建立內核的軟連接
ln -s /usr/src/kernels/2.6.32-431.el6.i686/ /usr/src/linux
ll /usr/src/
drwxr-xr-x. 2 root root 4096 Sep 23 2011 debug
drwxr-xr-x. 3 root root 4096 Jan 1 23:39 kernels
lrwxrwxrwx 1 root root 37 Jun 11 16:07 linux ->/usr/src/kernels/2.6.32-431.el6.i686/
注:若是沒有/usr/src/kernels/2.6.32-431.el6.i686/路徑,通常是沒有安裝kernel-devel軟件包,能夠經過yum install kerner-devel -y安裝。
若若是/usr/src/kernels/下有多個版本路徑,則以uname -r顯示的爲準。因此軟連接也能夠這樣:ln -s /usr/src/kernels/`uname-r`/ /usr/src/linux
也可能不用軟連接,直接指定內核參數進行編譯。
b、安裝ipvsadm-1.26(會在make時報錯)
cd tools
tar zxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make #不須要configure
make install
c、make階段報錯處理
(i)報錯內容
make[1]: *** [libipvs.o] Error 1
make[1]: Leaving directory `/wddg-data/tools/ipvsadm-1.26/libipvs'
make: *** [libs] Error 2
(ii)解決方法
yum install libnl* popt* -y
(iii)解決過程
yum install libnl* popt* -y
。。。
Running Transaction
Installing :popt-static-1.13-7.el6.i686 1/6
Installing :libnl-devel-1.1.4-2.el6.i686 2/6
Installing :libnl3-3.2.21-8.el6.i686 3/6
Installing :libnl3-cli-3.2.21-8.el6.i686 4/6
Installing :libnl3-devel-3.2.21-8.el6.i686 5/6
Installing :libnl3-doc-3.2.21-8.el6.i686 6/6
Unable to connect to dbus
Verifying : libnl-devel-1.1.4-2.el6.i686 1/6
Verifying : libnl3-devel-3.2.21-8.el6.i686 2/6
Verifying : libnl3-doc-3.2.21-8.el6.i686 3/6
Verifying : popt-static-1.13-7.el6.i686 4/6
Verifying : libnl3-3.2.21-8.el6.i686 5/6
Verifying : libnl3-cli-3.2.21-8.el6.i686 6/6
Installed:
libnl-devel.i6860:1.1.4-2.el6
libnl3.i686 0:3.2.21-8.el6
libnl3-cli.i6860:3.2.21-8.el6
libnl3-devel.i6860:3.2.21-8.el6
libnl3-doc.i6860:3.2.21-8.el6
popt-static.i6860:1.13-7.el6
(v)再次make
lsmod | grep ip_vs #仍是無結果,
a、方法一
modprobe ip_vs
b、方法二(本例使用)
/sbin/ipvsadm
lsmod | grep ip_vs
ip_vs 102058 0
libcrc32c 841 1 ip_vs
ipv6 261089 13 ip_vs
a、centos 5.x 安裝lvs,使用1.24版本,不要用1.2.6
b、centos6.x 安裝1.26版本,而且先安裝 yuminstall libnl* popt* -y
c、安裝LVS後,要執行ipvsadm把ip_vs模塊加載到內核
ipvsadm --help
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
ipvsadm -A|E -t|u|fservice-address [-s scheduler] [-p [timeout]] [-M netmask] [--pepersistence_engine]
ipvsadm -D -t|u|fservice-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|fservice-address -r server-address [options]
ipvsadm -d -t|u|fservice-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|fservice-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state[--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h
Commands:
Either long or short options are allowed.
--add-service -A add virtual service with options
--edit-service -E edit virtual service with options
--delete-service -D delete virtual service
--clear -C clear the whole table
--restore -R restore rules from stdin
--save -S save rules to stdout
--add-server -a add real server with options
--edit-server -e edit real server with options
--delete-server -d delete real server
--list -L|-l list the table
--zero -Z zero counters in a service or all services
--set tcp tcpfin udp set connection timeout values
--start-daemon start connection sync daemon
--stop-daemon stop connection sync daemon
--help -h display this help message
Options:
--tcp-service -t service-address service-address is host[:port]
--udp-service -u service-address service-address is host[:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
--ipv6 -6 fwmark entry uses IPv6
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
the default scheduler is wlc.
--pe engine alternate persistence engine maybe sip,
not set by default.
--persistent -p [timeout] persistent service
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
--gatewaying -g gatewaying (direct routing)(default)
--ipip -i ipip encapsulation(tunneling)
--masquerading -m masquerading (NAT)
--weight -w weight capacity of real server
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lowerthreshold of connections
--mcast-interfaceinterface multicast interface forconnection sync
--syncid sid syncid for connectionsync (default=255)
--connection -c output of current IPVSconnections
--timeout output of timeout(tcp tcpfin udp)
--daemon output of daemoninformation
--stats output ofstatistics information
--rate output of rateinformation
--exact expand numbers(display exact values)
--thresholds output of thresholdsinformation
--persistent-conn output of persistentconnection info
--nosort disable sortingoutput of service/server entries
--sort does nothing, forbackwards compatibility
--ops -o one-packet scheduling
--numeric -n numeric output of addressesand ports
ifconfig eth0:1 192.168.1.169/24 up
ifconfig
eth0 inetaddr:192.168.1.168 Bcast:192.168.1.255 Mask:255.255.255.0
eth0:1 inet addr:192.168.1.169 Bcast:192.168.1.255 Mask:255.255.255.0
lo inet addr:127.0.0.1 Mask:255.0.0.0
ping 192.168.1.169
來自 192.168.1.169 的回覆: 字節=32 時間<1ms TTL=64
#清空lvs配置
ipvsadm -C
#設置鏈接超進時間 set tcp tcpfin udp
ipvsadm --set 30 5 60
#-A:新增lvs服務,-t:指定服務器和端口192.168.1.169:80,-s:指定算法rr,-p:會話保持20秒
#至關於新增一臺虛擬服務器,ip必定使用配置的vip
ipvsadm -A -t 192.168.1.169:80 -s rr -p 20
#在vip上指定實際服務器ip和模式(-g:DR -i:TUN -m:NAT)
#-a:在vip上新增實際服務,-t:指定vip:port -r:指定真實節點ip -w:權重
ipvsadm -a -t 192.168.1.169:80 -r 192.168.1.158 -g -w 1
ipvsadm -a -t 192.168.1.169:80 -r 192.168.1.218 -g -w 1
#查看配置好的lvs
ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
TCP 192.168.1.169:80 rrpersistent 20
-> 192.168.1.158:80 Route 1 0 0
-> 192.168.1.218:80 Route 1 0 0
RS1上:ifconfig lo:1192.168.1.169/32up
RS2上:ifconfig lo:1192.168.1.169/32up
ifconfig
lo:1 Link encap:LocalLoopback
inetaddr:192.168.1.169 Mask:0.0.0.0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_announce
a、在LVS調度節點上打開監控
watch -n 1 ipvsadm -L -n #每秒刷新一次
Every 2.0s: ipvsadm -L -n SunJun 11 22:48:47 2017
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
TCP 192.168.1.169:80 rrpersistent 20
-> 192.168.1.218:80 Route 1 6 6
-> 192.168.1.158:80 Route 1 2 0
b、在其它機器上打開http://192.168.1.169(正常訪問)
c、也可使用--status參數查看LVS狀態
ipvsadm -L -n --stats
ipvsadm -d -t 192.168.1.169:80 -r 192.168.1.218
ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
TCP 192.168.1.169:80 rrpersistent 20
-> 192.168.1.158:80 Route 1 0 0
ipvsadm -D -t 192.168.1.169:80 #此時還沒法經過vip訪問到web
ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
vi /scripts/ipvs_server.sh
#!/bin/sh
. /etc/init.d/functions
VIP=192.168.1.169
PORT=80
RIP=(
192.168.1.218
192.168.1.158
)
start(){
ifconfig eth0:1 $VIP/24 up
route add -host $VIP dev eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t $VIP:$PORT -s rr -p 20
for ((i=0;i<${#RIP[*]};i++))
do
ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1
done
echo "ipvs is started"
}
stop(){
ipvsadm -C
ifconfig eth0:1 down
route del -host $VIP dev eth0
echo "ipvs is stopped"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "UASGE:$0 {start|stop|restart}"
esac
cp /scripts/ipvs_server.sh /usr/local/sbin/ipvs
cd /usr/local/sbin/
chmod +x ipvs
vi /scripts/ipvs_client.sh
#!/bin/sh
. /etc/init.d/functions
VIP=(
192.168.1.169
192.168.1.170
)
case "$1" in
start)
echo "start LVSof RealServer IP"
for ((i=0;i<`echo${#VIP[*]}`;i++))
do
interface="lo:`echo ${VIP[$i]}|awk -F . '{print $4}'`"
/sbin/ifconfig$interface ${VIP[$i]} broadcast ${VIP[$i]} netmask 255.255.255.255 up
route add -host${VIP[$i]} dev $interface
done
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "1">/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
for ((i=0;i<`echo${#VIP[*]}`;i++))
do
interface="lo:`echo ${VIP[$i]}|awk -F . '{print $4}'`"
/sbin/ifconfig$interface ${VIP[$i]} broadcast ${VIP[$i]} netmask 255.255.255.255 down
route del -host${VIP[$i]} dev $interface
done
echo "stOP LVS ofRealServer IP"
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0{start | stop}"
exit 1
esac
ipvsadm -Ln --stats
ipvsadm -Lnc
ipvsadm -Ln --thresholds
ipvsadm -Ln --timeout
含server、client、健康檢查、高可用4類腳本
heartbeart:負責VIP的切換以及資源的啓動中止
lvs:負責調度
ldirectord:負責RS節點的健康檢查
Piranha是redhat提供的一個基於web的lvs配置軟件,可省去手工配置lvs的繁瑣工做,並人急提供cluter功能。
a、LVS會話保持
設置了LVS自身的會話保持參數(lvs:-p 300/keepalived:persistent 300)。
優化:大公司儘可能用cookies替代sesson,或用集中式session
b、LVS調度算法。rr、wrr、wlc、lc算法
c、後端RS節點的會話保持。如apache的keealive參數
d、訪問量較少的時候,不均衡比較明顯。
e、用戶發送的請求時間長短,和請求資源多少大小
排錯大致的思路就是,要熟悉LVS的工做原理過程,而後根據原理過程來排重,例如:
a、調度器上LVS調度規則及IP的正確性。
b、RS節點上VIP綁定和arp抑制的檢查。
生產處理思路:
對RS綁定的VIP作實時監控,出問題報警或者自動處理後報警。
把RS綁定的VIP作成配置文件,例如:vi/etc/sysconfig/network-scripts/lo:0
ARP抑制的配置思路:
若是是單個VIP,就能夠用stop傳參設置0
當RS端有多個VIP綁定,即便中止了一個VIP也不要修改ARP抑制。
c、RS節點上自身提供服務的檢查。
d、輔助排查工具備tepdump,ping等。
e、負載均衡以及反向代理集羣的三角形排查理論:
Heartbeat、Corosync、Keepalived這三個集羣組件咱們到底選哪一個好,首先我想說明的是,Heartbeat、Corosync是屬於同一類型,Keepalived與Heartbeat、Corosync,根本不是同一類型的。Keepalived使用的vrrp協議方式,虛擬路由冗餘協議 (Virtual Router RedundancyProtocol,簡稱VRRP);Heartbeat或Corosync是基於主機或網絡服務的高可用方式;簡單的說就是,Keepalived的目的是模擬路由器的高可用,Heartbeat或Corosync的目的是實現Service的高可用。因此通常Keepalived是實現前端高可用,經常使用的前端高可用的組合有,就是咱們常見的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是實現服務的高可用,常見的組合有Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd 實現Web服務器的高可用、Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL 實現MySQL服務器的高可用。總結一下,Keepalived中實現輕量級的高可用,通常用於前端高可用,且不須要共享存儲,通常經常使用於兩個節點的高可用。而Heartbeat(或Corosync)通常用於服務的高可用,且須要共享存儲,通常用於多節點的高可用。那heartbaet與corosync咱們又應該選擇哪一個好啊,通常用corosync,由於corosync的運行機制更優於heartbeat,就連從heartbeat分離出來的pacemaker都說在之後的開發當中更傾向於corosync,因此如今corosync+pacemaker是最佳組合。
Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,能夠利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。Keepalived是VRRP的完美實現,所以在介紹keepalived以前,先介紹一下VRRP的原理。
在現實的網絡環境中,兩臺須要通訊的主機大多數狀況下並無直接的物理鏈接。對於這樣的狀況,它們之間路由怎樣選擇?主機如何選定到達目的主機的下一跳路由,這個問題一般的解決方法有二種:
在主機上使用動態路由協議(RIP、OSPF等)
在主機上配置靜態路由
很明顯,在主機上配置動態路由是很是不切實際的,由於管理、維護成本以及是否支持等諸多問題。配置靜態路由就變得十分流行,但路由器(或者說默認網關default gateway)卻常常成爲單點故障。VRRP的目的就是爲了解決靜態路由單點故障問題,VRRP經過一競選(election)協議來動態的將路由任務交給LAN中虛擬路由器中的某臺VRRP路由器。
在一個VRRP虛擬路由器中,有多臺物理的VRRP路由器,可是這多臺的物理的機器並不能同時工做,而是由一臺稱爲MASTER的負責路由工做,其它的都是BACKUP,MASTER並不是一成不變,VRRP讓每一個VRRP路由器參與競選,最終獲勝的就是MASTER。MASTER擁有一些特權,好比,擁有虛擬路由器的IP地址,咱們的主機就是用這個IP地址做爲靜態路由的。擁有特權的MASTER要負責轉發發送給網關地址的包和響應ARP請求。
VRRP經過競選協議來實現虛擬路由器的功能,全部的協議報文都是經過IP多播(multicast)包(多播地址224.0.0.18)形式發送的。虛擬路由器由VRID(範圍0-255)和一組IP地址組成,對外表現爲一個周知的MAC地址。因此,在一個虛擬路由 器中,無論誰是MASTER,對外都是相同的MAC和IP(稱之爲VIP)。客戶端主機並不須要由於MASTER的改變而修改本身的路由配置,對客戶端來講,這種主從的切換是透明的。
在一個虛擬路由器中,只有做爲MASTER的VRRP路由器會一直髮送VRRP通告信息(VRRPAdvertisement message),BACKUP不會搶佔MASTER,除非它的優先級(priority)更高。當MASTER不可用時(BACKUP收不到通告信息), 多臺BACKUP中優先級最高的這臺會被搶佔爲MASTER。這種搶佔是很是快速的(<1s),以保證服務的連續性。因爲安全性考慮,VRRP包使用了加密協議進行加密。
a、初始化
路由器啓動時,若是路由器的優先級是255(最高優先級,路由器擁有路由器地址),要發送VRRP通告信息,併發送廣播ARP信息通告路由器IP地址對應的MAC地址爲路由虛擬MAC,設置通告信息定時器準備定時發送VRRP通告信息,轉爲MASTER狀態;不然進入BACKUP狀態,設置定時器檢查定時檢查是否收到MASTER的通告信息。
b、Master
設置定時通告定時器;
用VRRP虛擬MAC地址響應路由器IP地址的ARP請求;
轉發目的MAC是VRRP虛擬MAC的數據包;
若是是虛擬路由器IP的擁有者,將接受目的地址是虛擬路由器IP的數據包,不然丟棄;
當收到shutdown的事件時刪除定時通告定時器,發送優先權級爲0的通告包,轉初始化狀態;
若是定時通告定時器超時時,發送VRRP通告信息;
收到VRRP通告信息時,若是優先權爲0,發送VRRP通告信息;不然判斷數據的優先級是否高於本機,或相等並且實際IP地址大於本地實際IP,設置定時通告定時器,復位主機超時定時器,轉BACKUP狀態;不然的話,丟棄該通告包;
c、Backup
設置主機超時定時器;
不能響應針對虛擬路由器IP的ARP請求信息;
丟棄全部目的MAC地址是虛擬路由器MAC地址的數據包;
不接受目的是虛擬路由器IP的全部數據包;
當收到shutdown的事件時刪除主機超時定時器,轉初始化狀態;
主機超時定時器超時的時候,發送VRRP通告信息,廣播ARP地址信息,轉MASTER狀態;
收到VRRP通告信息時,若是優先權爲0,表示進入MASTER選舉;不然判斷數據的優先級是否高於本機,若是高的話認可MASTER有效,復位主機超時定時器;不然的話,丟棄該通告包;
當內部主機經過ARP查詢虛擬路由器IP地址對應的MAC地址時,MASTER路由器回覆的MAC地址爲虛擬的VRRP的MAC地址,而不是實際網卡的 MAC地址,這樣在路由器切換時讓內網機器覺察不到;而在路由器從新啓動時,不能主動發送本機網卡的實際MAC地址。若是虛擬路由器開啓的ARP代理 (proxy_arp)功能,代理的ARP迴應也迴應VRRP虛擬MAC地址;
cd /tools
wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
a、檢查kernel環境是否配置
ls -l /usr/src/
drwxr-xr-x. 2 root root 4096 Sep 23 2011 debug
drwxr-xr-x. 3 root root 4096 Jan 1 23:39 kernels
lrwxrwxrwx 1 root root 37 Jun 11 16:07 linux ->/usr/src/kernels/2.6.32-431.el6.i686/
b、安裝
tar zxf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure
。。。
Keepalived configuration
------------------------
Keepalived version :1.1.19
Compiler : gcc
Compiler flags : -g-O2
Extra Lib :-lpopt -lssl -lcrypto
Use IPVSFramework : Yes
IPVSsync daemon support : Yes
Use VRRPFramework : Yes
Use Debug flags : No
make
make install
c、說明
也可能不提早配置kernel,能夠在./configure時指定--with-kernel-dir參數。如:
./configure --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.i686/
d、配置
/bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
/bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived -p
/bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
/bin/cp /usr/local/sbin/keepalived /usr/sbin/
e、測試
/etc/init.d/keepalived start
Starting keepalived: [ OK ]
ps -ef | grep keep #有3個keepalived-D表示成功
root 2994 1 019:31 ? 00:00:00 keepalived -D
root 2996 2994 219:31 ? 00:00:00 keepalived -D
root 3108 2994 019:31 ? 00:00:00 keepalived -D
root 3111 1222 019:31 pts/0 00:00:00 grep keep
/etc/init.d/keepalived stop
Stopping keepalived: [ OK ]
a、master節點配置
! Configuration File for keepalived
# 全局定義部分
global_defs {
notification_email {
huang@gmail.com #設置報警郵件地址,每行一個,需開啓本機sendmail服務
}
notification_email_fromAlexandre.Cassen@firewall.loc #設置郵件發送地址
smtp_server192.168.1.3 #設置smtp server 地址
smtp_connect_timeout30 #設置鏈接 smtp server超時時間
router_id LVS_7 #Keepalived服務器的ID,至關於mysql的server_id,郵件主題中顯示
}
# vrrp實例定義部分
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER表示是主服務,BACKUP表示是備用服務器
interface eth0 #指定HA監測網絡的接口
virtual_router_id 55 #虛擬路由IDe,同一個vrrp實例使用一個惟一,MASTER和BACKUP一致
priority 150 #優先級,數字越大優先級越高,MASTER必須大於BACKUP,建議相差50
advert_int 1 #MASTER和BACKUP同步檢查間隔,秒
authentication { #設定驗證類型和密碼
auth_type PASS #驗證類型,PASS和HA
auth_pass 1111 #驗證密碼,MASTER和BACKUP密碼相同才能進行通訊,官方建議明文
}
virtual_ipaddress { #虛擬ip地址
192.168.1.16/24 #最好加上掩碼,不然容易出錯,指定爲32位了
}
}
b、backup節點配置
! Configuration File for keepalived
# 全局定義部分
global_defs {
notification_email {
huang@gmail.com
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.1.3
smtp_connect_timeout 30
router_id LVS_2
}
# vrrp實例定義部分
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.16/24
}
}
Host |
OS |
role |
remask |
192.168.1.168 |
CentOS6.5_32 |
Master |
VIP:192.168.1.169 |
192.168.1.158 |
CentOS6.5_32 |
Backup |
VIP:192.168.1.169 |
a、Master節點
(i)安裝KeepAlived
ln -s /usr/src/kernels/2.6.32-431.el6.i686/ /usr/src/linux
tar zxf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure
make
make install
/bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
/bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived -p
/bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
/bin/cp /usr/local/sbin/keepalived /usr/sbin/
/etc/init.d/keepalived start
ps -ef | grep keep
/etc/init.d/keepalived stop
(ii)安裝LVS
lsmod | grep ip_vs #檢查環境
tar zxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make #不須要configure
make install
(iii)清空原配置的vip(vip應由keepalived自動配置)
ifconfig eth0:0 down
(v)配置keepalived配置文件
cd /etc/keepalived/
mv keepalived.conf keepalived.conf.bak #備份系統默認的配置文件
mv /tools/keepalived.conf.master-single keepalived.conf
cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_7
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
}
}
b、Backup節點
(i)安裝KeepAlived
(ii)安裝LVS
(iii)清空原配置的vip(vip應由keepalived自動配置)
(v)配置keepalived配置文件
cd /etc/keepalived/
mv keepalived.conf keepalived.conf.bak #備份系統默認的配置文件
mv /tools/keepalived.conf.backup-single keepalived.conf
cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
}
}
a、中止Master和Backup上的FireWall和SELinux
/etc/init.d/iptables stop
setenforce 0
b、啓動Master和Backup上的keepalived
/etc/init.d/keepalived start
c、查看Master和Backup上的vip
(i)Master節點
ifconfig #看不到eth0:0,keepalived啓的vip,用ifconfig是看不到的,要用ip add來看
eth0 inetaddr:192.168.1.168 Bcast:192.168.1.255 Mask:255.255.255.0
ip add
eth0 inetaddr:192.168.1.168 Bcast:192.168.1.255 Mask:255.255.255.0
inet addr:192.168.1.169/24 scopeglobal secondary eth0
(ii)Backup節點(此時是沒有vip的,若是有,則是裂腦了)
ifconfig
eth0 inetaddr:192.168.1.158 Bcast:192.168.1.255 Mask:255.255.255.0
ip add
eth0 inetaddr:192.168.1.158 Bcast:192.168.1.255 Mask:255.255.255.0
d、測試主備切換
(i)中止Master上的keepalived
/etc/init.d/keepalived stop
(ii)查看Master上的vip
ip add | grep 1.169
#<--爲空,說明vip已down
(iii)查看Backup上的vip
ip add | grep 1.169
inet addr:192.168.1.169/24 scope global secondary eth0 #說明Backup節點已接管vip
e、測試主備切換延時時間
(i)長ping vip
ping 192.168.1.169 -t
(ii)啓動Master上的keepalived
/etc/init.d/keepalived start
(iii)vip從Backup切換到了Master上
(v)發現ping命令丟了一個包
多實例與單實例的區別主要是keepalived.conf配置文件中有多個vrrp_instance。
cat /etc/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
abc8@qq.com
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.1.168
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
192.168.1.170/24
192.168.1.171/24
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.174/24
192.168.1.175/24
}
}
cat /etc/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
abc@qq.com
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.1.168
smtp_connect_timeout 30
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
192.168.1.170/24
192.168.1.171/24
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.174/24
192.168.1.175/24
}
}
默認狀況下,KeepAlived的日誌會輸出到/var/log/messages文件中,若是想讓keepAlived的日誌輸出到指定文件,則需修改2個配置文件:/etc/sysconfig/keepalived和/etc/rsyslog.conf後重啓rsyslog和 keepalived服務。
vi /etc/sysconfig/keepalived
#修改前
KEEPALIVED_OPTIONS="-D"
#修改後
#KEEPALIVED_OPTIONS="-D"
KEEPALIVED_OPTIONS="-D-d -S 0"
vi /etc/syslog.conf
#keepalived
local0.* /var/log/keepalived.log #新增長一行
/etc/in.d/rsyslog restart
/etc/init.d/keepalived restart
Host |
OS |
role |
remask |
192.168.1.168 |
CentOS6.5_32 |
KeepAlived Master |
VIP:192.168.1.169 |
192.168.1.158 |
CentOS6.5_32 |
KeepAlived Backup |
VIP:192.168.1.169 |
192.168.1.218 |
CentOS6.5_32 |
LNMP |
RS1 |
192.168.1.228 |
CentOS6.5_32 |
LNMP |
RS2 |
cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
abc8@qq.com
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.1.168
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
}
}
virtual_server 192.168.1.169 80 {
delay_loop 6 #每隔多少秒keepalived監測rs的狀態
lb_algo wrr #設置分發的算法
lb_kind DR #設置分發的模式,這裏使用DR模式演示
nat_mask 255.255.255.0 #掩碼
persistence_timeout20 #會話保持
protocol TCP
#上面這一段至關於ipvsadm -A-t 192.168.1.169:80 -s wrr -p 20
real_server 192.168.1.21880 { #第一臺rs服務器的配置,注意IP和端口
weight 100 #權重
TCP_CHECK { #健康檢查
connect_timeout10 #10秒無響應超時
nb_get_retry 3
delay_before_retry3
connect_port 80
}
}
real_server 192.168.1.22880 { #第二臺rs服務器
weight 100
TCP_CHECK {
connect_timeout10
nb_get_retry 3
delay_before_retry3
connect_port 80
}
}
#上面這2段真實服務器配置至關於下面2行
#ipvsadm -a -t 192.168.1.169:80 -r 192.168.1.218:80 -g -w 1
#ipvsadm -a -t 192.168.1.169:80 -r 192.168.1.228:80 -g -w 1
}
cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
}
}
virtual_server 192.168.1.169 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 20
protocol TCP
real_server 192.168.1.21880 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry3
connect_port 80
}
}
real_server 192.168.1.22880 {
weight 100
TCP_CHECK {
connect_timeout10
nb_get_retry 3
delay_before_retry3
connect_port 80
}
}
}
/etc/init.d/keepalived restart
ip add
eth0 inetaddr:192.168.1.168 Bcast:192.168.1.255 Mask:255.255.255.0
inet addr:192.168.1.169/24 scopeglobal secondary eth0
ipvs -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
TCP 192.168.1.169:80 rrpersistent 20
-> 192.168.1.218:80 Route 1 0 0
-> 192.168.1.228:80 Route 1 0 0
/etc/init.d/keepalived stop
ip add | grep 1.169
ipvs -L -n
#<--均爲空,說明vip和lvs均已down
ip add | grep 1.169
inet addr:192.168.1.169/24 scope global secondary eth0 #說明Backup節點已接管vip
ipvs -L -n #實際上在keepalived.conf配置好之後,自動啓起來了,只不過沒有vip,不對外提供服務
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
TCP 192.168.1.169:80 rrpersistent 20
-> 192.168.1.218:80 Route 1 0 0
-> 192.168.1.228:80 Route 1 0 0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_announce
Host |
OS |
role |
remask |
192.168.1.168 |
CentOS6.5_32 |
KeepAlived Master + Nginx |
VIP:192.168.1.169 |
192.168.1.158 |
CentOS6.5_32 |
KeepAlived Backup + Nginx |
VIP:192.168.1.169 |
192.168.1.218 |
CentOS6.5_32 |
LNMP |
RS1 |
192.168.1.228 |
CentOS6.5_32 |
LNMP |
RS2 |
cd /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_7
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
}
}
cd /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.169/24
}
}
/etc/init.d/keepalived restart
ip add | grep 1.169
curl 192.168.1.218
http://www.abc.org218
curl 192.168.1.228
http://bbs.abc.org228
cd /application/nginx/conf/extra
vi upstream01.conf
upstream www_real_servers {
server 192.168.1.218:80 weight=5;
server 192.168.1.228:80weight=5;
}
server {
listen 80;
server_name 192.168.1.169
location / {
proxy_pass http://www_real_servers
}
}
vi /application/nginx/conf/nginx.conf
#include extra/www.conf;
#include extra/bbs.conf;
#include extra/blog.conf;
include extra/upstream01.conf;
/application/nginx/sbin/nginx
/etc/init.d/keepalived start
在IE頁面訪問http://192.168.1.169,並刷新
http://www.abc.org218
http://bbs.abc.org228
pkill -9 nginx
http://www.abc.org218
http://www.abc.org218
pkill -9 nginx
報502錯誤:502 Bad Gateway
通常大公司,會根據業務進行選擇,3個場景都會用到