負載均衡(Load Balance)集羣提供了一種廉價、有效、透明的方法,來擴展網絡設備和服務器的負載、帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。html
² 單臺計算機沒法承受大規模的併發訪問或數據流量。此時須要搭建負載均衡集羣把流量分攤到多臺節點設備上分別處理,既減小用戶等待響應的時間又提高了用戶體驗;mysql
² 7*24小時的服務保證,任意一個或多個有限後端節點設備宕機,不能影響整個業務運行。linux
² 工做在網絡模型的7層,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構。Nginx單憑這點可利用的場合就遠多於LVS。nginx
² 最新版本的nginx也支持4層TCP負載。曾經這是LVS比nginx好的地方。web
² nginx對網絡穩定性的依賴很是小,理論上能ping通就能進行負載功能,這個也是它的優點之一,相反LVS對網絡穩定依賴性比較大。算法
² nginx安裝和配置比較簡單測試起來比較方便,它的基本能把錯誤用日誌打印出來。LVS的配置、測試就要花比較長時間了,LVS對網絡依賴比較大。sql
總結:當併發超過nginx上限,就可使用LVS了。日1000-2000W pv或併發請求1萬如下均可以考慮用nginx。大型門戶網站,電商網站須要用到LVSshell
LVS是Linux Virtual Server的簡寫。即Linux虛擬服務器,是一個虛擬的服務器集羣系統,能夠在UNIX/LINUX平臺下實現負載均衡集羣功能,該項目在1998年5月由章文嵩博士組織成立是中國國內最先出現的自由軟件之一。windows
官網:http://www.linuxvirtualserver.org/index.html 中文資料 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
² 早在2.2內核時,IPVS就已經之內核補丁的形式出現。後端
² 從2.4.23版本開始,IPVS軟件就合併到Linux內核的經常使用版本的內核補丁集合。
² 從2.4.24之後IPVS已經成爲Linux官方標準內核的一部分。
² LVS無需安裝系統自帶
² 安裝的是管理工具,第一種ipvsadm,第二種是keepalived
² ipvsadm經過命令行管理,keepalive讀取配置文件管理
² VIP :虛擬ip地址 virtural ip address 用於給客戶端計算機提供服務的ip地址
² RIP:real ip,集羣下面節點使用的ip地址,物理ip地址
² DIP:director ip 用於鏈接內外網絡的ip,物理網卡上的ip地址,他是負載均衡器上的ip
² CIP:client ip 客戶端用戶計算機請求集羣服務器的ip地址,該地址用做發送給集羣的請求的源ip地址
1. 10種調度算法
² 固定調度算法:rr,wrr,dh,sh
² 動態調度算法:wlc,lc,lblc,lblcr,SED,NQ.
2. 最經常使用的三種RR WRR WLC
² rr :輪詢調度,他將請求依次分配不一樣的RS節點,RS服務器均攤請求,這種算法比較簡單,可是隻適合RS節點相差性能不大的狀況
² wrr:加權輪詢調度,它將依據不一樣RS節點的權值分配任務,權值高的RS將優先得到任務,而且分配的鏈接數比權值低的RS節點更多。相同權值的RS獲得相同數目的鏈接數
² dh:destination hashing 以目的地址爲關鍵字查找一個靜態hash表來獲取須要的RS
² sh:source hashing 以源地址爲關鍵字查找一個靜態hash表來獲取須要的RS
動態調度算法:
wlc:加權最小鏈接數調度(weighted least-connection)假設各臺RS的權值依次爲Wi(i=1...n) 。當前的tcp鏈接數依次爲Ti(i=1..n),依次取TI/WI爲最小的RS做爲下一個分配的RS
LC
LBLC
LBLCR
SED
NQ 都不經常使用
通常的網絡服務http mail mysql 經常使用的調度算法是rr,wrr wlc
1.準備4檯安裝好CentOS7.2系統的虛擬機,內存512M。 2.全部虛擬機的防火牆和Selinux關閉 3.主機名及IP地址關係以下: lb01 10.0.0.5 lb02 10.0.0.6 web01 10.0.0.8 web02 10.0.0.7 4.web01和web02只須要安裝Nginx軟件,並知足下面條件: curl http://10.0.0.8/www/ 獲得結果爲web01 curl http://10.0.0.7/www/ 獲得結果爲web02 5.安裝好wireshark 2.2.2版本 2.2.x版本以上便可 [root@web02 ~]# getenforce Disabled [root@web02 ~]# systemctl is-enabled firewalld.service disabled [root@web02 ~]#注意:永久關閉
1. 安裝ipvsadm管理工具 yum -y install ipvsadm 激活 [root@lb01 ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@lb01 ~]# lsmod|grep ip_vs ip_vs 140944 0 nf_conntrack 105745 1 ip_vs libcrc32c 12644 2 xfs,ip_vs [root@lb01 ~]# 2. 服務端配置 配置LVS負載均衡服務(只在lb01操做) 步驟1:在eth0網卡綁定VIP地址(ip) 步驟2:清除當前全部LVS規則(-C) 步驟3:設置tcp、tcpfin、udp連接超時時間(--set) 步驟4:添加虛擬服務(-A),調度算法見man ipvsadm 步驟5:將虛擬服務關聯到真實服務上(-a) 步驟6:查看配置結果(-ln) [root@lb01 ~]# ip addr add 10.0.0.3/24 dev eth0 [root@lb01 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@lb01 ~]# ipvsadm -C [root@lb01 ~]# ipvsadm --set 30 5 60 [root@lb01 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@lb01 ~]# ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20 [root@lb01 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.3:80 wrr persistent 20 [root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1 [root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1 [root@lb01 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.3:80 wrr persistent 20 -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.8:80 Route 1 0 0 [root@lb01 ~]#
步驟1:在lo網卡綁定VIP地址(ip) 步驟2:修改內核參數抑制ARP響應 兩臺web服務器都須要操做,完成後不能再lb01測試,使用瀏覽器測試便可 [root@web01 ~]# ip addr add 10.0.0.3/32 dev lo [root@web01 ~]# cat >>/etc/sysctl.conf<<EOF > net.ipv4.conf.all.arp_ignore = 1 > net.ipv4.conf.all.arp_announce = 2 > net.ipv4.conf.lo.arp_ignore = 1 > net.ipv4.conf.lo.arp_announce = 2 > EOF [root@web01 ~]# sysctl -p net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@web01 ~]#
問題1:瀏覽器訪問沒有發現輪詢效果?
使用多個客戶端測試,LVS輪詢有時間限制,設置30秒的輪詢時間,在30秒內不會輪詢。
問題2:使用抓包工具,發現進行通訊的是Windows的ip和lb01的80端口可是lb01沒有80端口?
由於系統知道LVS裏面有80端口,若是沒有配置LVS那麼就訪問不了。
結論1:從客戶端發送http請求數據包的IP地址爲WindowsIP地址,MAC地址也是windows的MAC。
結論2:從lb01響應的數據包:IP是1b01的VIP發送到客戶端,可是mac地址多是兩個web的mac'地址發送給客戶端。
問題3:客戶端的操做有什麼含義?
1. realserver爲何要在lo接口上配置VIP?
既然要讓RS可以處理目標地址爲VIP的IP包,首先必需要讓RS可以接收到這個數據包。在lo上配置vip可以完成接收包並將結果返回給client。
2. 在eth0網卡配置VIP能夠嗎?.
不能夠,將VIP設置在eth0網卡上,會影響RS的arp請求,形成總體LVS集羣arp緩存表絮亂,以致於整個負載均衡集羣不能正常工做。
² DR模式是經過改寫請求報文的目標MAC地址,將請求發給真是服務器,而真是服務器將響應後的處理結果直接返回給客戶端用戶。
² DR技術可極大的提升集羣系統的伸縮性。但要求調度器LB與真實服務器RS都有一塊物理網卡連在同一物理網段上。即必須在同一局域網環境。
關鍵:
1,綁定vip到lo,避免了ip衝突問題,解決了Real server 沒法識別client的報文問題
2,綁定vip會主動響應arp廣播,所以要抑制arp,告訴real server 不要搶lvs的arp包,只接收包
虛擬IP地址由真實服務器和負載平衡器共享。負載均衡器也有一個配置了虛擬IP地址的接口,用於接收請求數據包,並將數據包直接路由到選定的服務器。全部真實服務器的非ARP別名接口配置了虛擬IP地址,或者將去往虛擬IP地址的數據包重定向到本地套接字,以便真實服務器能夠在本地處理這些數據包。負載均衡器和真實服務器必須有一個經過HUB /交換機物理鏈接的接口
當用戶訪問服務器集羣提供的虛擬服務時,到達虛擬IP地址(虛擬服務器的IP地址)的數據包。負載均衡器(LinuxDirector)檢查數據包的目標地址和端口。若是它們與虛擬服務相匹配,則經過調度算法從集羣中選擇真實的服務器,並將該鏈接添加到記錄鏈接的哈希表中。而後,負載均衡器直接將其轉發到選定的服務器。當傳入的數據包屬於這個鏈接,而且能夠在散列表中找到所選的服務器時,數據包將再次被直接路由到服務器。當服務器收到轉發的數據包時,服務器發現數據包是用於別名接口或本地套接字的地址,因此它處理請求並最終直接返回給用戶。鏈接終止或超時後,鏈接記錄將從哈希表中刪除。
負載均衡器只是將數據幀的MAC地址更改成所選服務器的MAC地址,並將其從新發送到LAN上。這就是負載均衡器和每臺服務器之間必須經過一個不間斷的局域網直接相連的緣由
1,經過在調度器LB上修改數據包的目的mac地址實現轉發,注意 ,源ip仍然是cip,目的ip地址仍然是VIP
2,請求的報文通過調度器而RS響應處理後的報文無需通過調度器LB,直接返回給客戶端所以,併發訪問量大時候效率很高
3,因DR模式是經過MAC地址的改寫機制實現的轉發,所以全部RS節點和調度器LB只能在一個局域網LAN中(小缺點)
4,須要注意RS節點的vip的綁定(lo:vip.lol:vip)和arp抑制問題
5,強調:RS節點的默認網關不須要調度器LB的DIP,而直接是IDC機房分配的上級路由器的IP(這是RS帶有外網ip地址的狀況)
6,因爲DR模式的調度器僅僅進行了目的MAC地址改寫,所以,調度器LB沒法改變請求報文的目的端口
7,當前調度器LB支持幾乎全部的unix linux系統,但目前不支持windows,可是真實的RS能夠是windows.
8.總的來講,DR模式效率很高,可是配置麻煩,所以,訪問量不大的公司可使用haproxy、nginx,這符合運維的原則:簡單,易用,高效 日PV2000W,併發1W如下使用haproxy,nginx(lvs NAT模式)就好
9,直接對外的訪問業務,例如web服務作RS節點,RS最好用公網ip地址(直接把請求返回給用戶),若是不直接對外業務,例如mysql,存儲系統,最好使用內部ip地址
爲了提升IP轉換MAC的效率,系統會將解析結構保存下來,這個結果叫作ARP緩存。
² Windows查看ARP緩存目錄:arp -a
² Linux查看ARP緩存命令 :arp -n
arp緩存表優劣勢:
(1) 主機有了arp緩存表,能夠加快ARP的解析速度,減小局域網內廣播風暴。由於arp是發廣播包解析的,頻繁的解析也是消耗帶寬的,尤爲是機器多的時候。
(2) 由於有了arp緩存表,因此有了******服務器主機的風險,arp欺騙***。(例如在班裏有個同窗作惡做劇,假裝班主任告訴快遞員錯誤的教室編號)
(3) 切換路由器,負載均衡器等設備時,可能會致使整個網絡短期中斷網絡。(由於切換路由器全部的客戶端的arp緩存表沒有更新完成,等更新完成網絡就會恢復正常。)
當集羣中一臺提供服務的lb01機器宕機後,而後VIP會轉移到備lb02上,可是客戶端的ARP緩存表的地址解析仍是宕機的lb01的mac地址,從而致使在lb02上添加VIP,也會發生客戶端沒法訪問的狀況。
解決方法:
當lb01宕機,VIP地址遷移到lb02時,須要經過arping命令通告全部網絡內機器更新本地的arp緩存表,從而使的客戶機訪問從新廣播獲取MAC地址。
[
root@lb01 ~]# ip addr del 10.0.0.3/24 dev eth0 [root@lnb02 ~]# ip addr add 10.0.0.3/24 dev eth0 [root@lnb02 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:a9:6e:08 brd ff:ff:ff:ff:ff:ff inet 10.0.0.6/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.0.0.3/24 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fea9:6e08/64 scope link valid_lft forever preferred_lft forever [root@lnb02 ~]# arping -I eth0 -c 1 -U 10.0.0.3 #ARP廣播地址解析 ARPING 10.0.0.3 from 10.0.0.3 eth0 Sent 1 probes (1 broadcast(s)) Received 0 response(s) [root@lnb02 ~]# Type `help' to learn how to use Xshell prompt. [e:\~]$ arp -a Windows查看 接口: 10.0.0.1 --- 0x6 Internet 地址 物理地址 類型 10.0.0.3 00-0c-29-a9-6e-08 動態 10.0.0.5 00-0c-29-c4-d5-09 動態 10.0.0.6 00-0c-29-a9-6e-08 動態 10.0.0.7 00-0c-29-16-b0-ab 動態 10.0.0.8 00-0c-29-f3-6f-6c 動態 10.0.0.255 ff-ff-ff-ff-ff-ff 靜態
arp_announce:對網絡接口上,本地IP地址的發出的,ARP迴應,做出相應級別的限制: 肯定不一樣程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口
² 0 - (默認) 在任意網絡接口(eth0,eth1,lo)上的任何本地地址
² 1 -儘可能避免不在該網絡接口子網段的本地地址作出arp迴應. 當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候頗有用.此時會檢查來訪IP是否爲全部接口上的子網段內ip之一.若是改來訪IP不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理.
² 2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.首要是選擇全部的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址. 若是沒有合適的地址被發現,將選擇當前的發送網絡接口或其餘的有可能接受到該ARP迴應的網絡接口來進行發送.
補充:
由於路由器通常是動態學習ARP包的(通常動態配置DHCP的話),當內網的機器要發送一個到外部的ip包,那麼它就會請求 路由器的Mac地址,發送一個arp請求,這個arp請求裏面包括了本身的ip地址和Mac地址,而linux默認是使用ip的源ip地址做爲arp裏面 的源ip地址,而不是使用發送設備上面的 ,這樣在lvs這樣的架構下,全部發送包都是同一個VIP地址,那麼arp請求就會包括VIP地址和設備 Mac,而路由器收到這個arp請求就會更新本身的arp緩存,這樣就會形成ip欺騙了,VIP被搶奪,因此就會有問題。
arp緩存爲何會更新了,何時會更新呢,爲了減小arp請求的次數,當主機接收到詢問本身的arp請求的時候,就會把源ip和源Mac放入自 己的arp表裏面,方便接下來的通信。若是收到不是詢問本身的包(arp是廣播的,全部人都收到),就會丟掉,這樣不會形成arp表裏面無用數據太多致使 有用的記錄被刪除。
在設置參數的時候將arp_ignore 設置爲1,意味着當別人的arp請求過來的時候,若是接收的設備上面沒有這個ip,就不作出響應,默認是0,只要這臺機器上面任何一個設備上面有這個ip,就響應arp請求,併發送mac地址
arp_ignore:定義對目標地址爲本地IP的ARP詢問不一樣的應答模式0
² 0 - (默認值): 迴應任何網絡接口上對任何本地IP地址的arp查詢請求
² 1 - 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求
² 2 -只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內
² 3 - 不迴應該網絡界面的arp請求,而只對設置的惟一和鏈接地址作出迴應
² 4-7 - 保留未使用
² 8 -不迴應全部(本地地址)的arp查詢
當用戶訪問服務器集羣提供的服務時,發往虛擬IP地址(負載均衡器的外部IP地址)的請求包到達負載均衡器。 負載均衡器檢查數據包的目標地址和端口號。 若是根據虛擬服務器規則表匹配虛擬服務器服務,則經過調度算法從集羣中選擇真實的服務器,並將該鏈接添加到記錄所創建的鏈接的哈希表中。 而後,將數據包的目的地址和端口重寫爲所選服務器的地址和端口,並將數據包轉發給服務器。 當傳入數據包屬於此鏈接,而且能夠在散列表中找到所選服務器時,數據包將被重寫並轉發到選定的服務器。 當應答報文返回時,負載均衡器將報文的源地址和端口重寫爲虛擬服務的源地址和端口。 鏈接終止或超時後,鏈接記錄將在哈希表中刪除。
NAT模式優缺點:
1、NAT技術將請求的報文和響應的報文都須要經過LB進行地址改寫,所以網站訪問量比較大的時候LB負載均衡調度器有比較大的瓶頸,通常要求最多之能10-20臺節點
2、只須要在LB上配置一個公網IP地址就能夠了。
3、每臺內部的節點服務器的網關地址必須是調度器LB的內網地址。
4、NAT模式支持對IP地址和端口進行轉換。即用戶請求的端口和真實服務器的端口能夠不一致。
IP隧道(IP封裝)是一種將IP數據報封裝在IP數據報中的技術,它容許指向一個IP地址的數據報被封裝並重定向到另外一個IP地址。 IP封裝如今一般用於Extranet,Mobile-IP,IP-Multicast,隧道主機或網絡。
當用戶訪問服務器集羣提供的虛擬服務時,到達虛擬IP地址(虛擬服務器的IP地址)的包。 負載均衡器檢查數據包的目標地址和端口。 若是它們與虛擬服務相匹配,則根據鏈接調度算法從集羣中選擇真實服務器,並將該鏈接添加到記錄鏈接的哈希表中。 而後,負載均衡器將數據包封裝在IP數據報中並轉發給選定的服務器。 當一個傳入的數據包屬於這個鏈接,而且能夠在散列表中找到所選的服務器時,數據包將被再次封裝並轉發到該服務器。 當服務器收到封裝後的報文時,對報文進行解封裝處理,直接將結果按照本身的路由表返回給用戶。 鏈接終止或超時後,鏈接記錄將從哈希表中刪除。
l LVS的DR和NAT模式要求RS和LVS在同一個vlan中,致使部署成本太高;TUNNEL模式雖然能夠跨vlan,但RealServer上須要部署ipip隧道模塊等,網絡拓撲上須要連通外網,較複雜,不易運維。爲了解決上述問題,開發出
l FULLNAT,該模式和NAT模式的區別是:數據包進入時,除了作DNAT,還作SNAT(用戶ip->內網ip),從而實現LVS-RealServer間能夠跨vlan通信,RealServer只須要鏈接到內網。
l 類比地鐵站多個閘機。
軟件負載
nginx、lvs nat 反向代理型負載均衡
lvs dr 負載均衡
haproxy
硬件負載
F5 A10
ipvsadm -C
ipvsadm -Ln
1.清空ipvsadm(不使用ipvsadm) [root@lb01 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.3:80 wrr persistent 20 -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.8:80 Route 1 0 0 [root@lb01 ~]# ipvsadm -C [root@lb01 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@lb01 ~]# 2.安裝keepalived(兩臺lb都要安裝) [root@lb01 ~]# yum -y install keepalived 3.全局定義 [root@lb01 ~]# head -6 /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id 01 } [root@lb01 ~]# [root@lnb02 ~]# head -6 /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id 02 } [root@lnb02 ~]# 4. VIP配置 vrrp_instance VI_1 { #lb01. state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 } } vrrp_instance VI_1 { #lb02 state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 } } 5. LVS配置 [root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id LVS_01 } 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 { 10.0.0.3/24 } } virtual_server 10.0.0.3 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } [root@lb01 ~]# [root@lnb02 keepalived]# cat keepalived.conf global_defs { router_id LVS_02 } 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 { 10.0.0.3/24 } } virtual_server 10.0.0.3 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } [root@lnb02 keepalived]# 6. 啓動 [root@lb01 ~]# systemctl start keepalived.service [root@lb01 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:c4:d5:09 brd ff:ff:ff:ff:ff:ff inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.0.0.3/24 scope global secondary eth0 valid_lft forever preferred_lft forever [root@lb01 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.3:80 wrr persistent 50 -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.8:80 Route 1 0 0 [root@lb01 ~]#
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id LVS_01 } 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 { 10.0.0.3/24 } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.0.0.4/24 } } virtual_server 10.0.0.3 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } virtual_server 10.0.0.4 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } [root@lb01 ~]# [root@lnb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id LVS_02 } 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 { 10.0.0.3/24 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 52 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.0.0.4/24 } } virtual_server 10.0.0.3 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } virtual_server 10.0.0.4 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } [root@lnb02 ~]# 檢查: [root@lnb02 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.3:80 wrr persistent 50 -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.8:80 Route 1 0 0 TCP 10.0.0.4:80 wrr persistent 50 -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.8:80 Route 1 0 0 [root@lnb02 ~]# [root@lb01 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.3:80 wrr persistent 50 -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.8:80 Route 1 0 0 TCP 10.0.0.4:80 wrr persistent 50 -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.8:80 Route 1 0 0 [root@lb01 ~]#