1.1負載均衡介紹
1.1.1 負載均衡的妙用
ü 負載均衡(Load Balance)集羣提供了一種廉價、有效、透明的方法,來擴展網絡設備和服務器的負載、帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
ü 單臺計算機無法承受大規模的併發訪問或數據流量了,此時需要搭建負載均衡集羣把流量分攤到多臺節點設備上分別處理,即減少用戶等待響應的時間又提升了用戶體驗;
ü 7*24小時的服務保證,任意一個或多個有限後端節點設備宕機,不能影響整個業務的運行。
1.1.2 爲什麼要用lvs
n 工作在網絡模型的7層,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,Nginx單憑這點可利用的場合就遠多於LVS了。
n 最新版本的Nginx也支持4層TCP負載,曾經這是LVS比Nginx好的地方。
n Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一,相反LVS對網絡穩定性依賴比較大。
n Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。
那爲什麼要用lvs呢?
ü 簡單一句話,當併發超過了Nginx上限,就可以使用LVS了。
ü 日1000-2000W PV或併發請求1萬以下都可以考慮用Nginx。
ü 大型門戶網站,電商網站需要用到LVS。
1.2LVS介紹
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統,可以在UNIX/LINUX平臺下實現負載均衡集羣功能。該項目在1998年5月由章文嵩博士組織成立,是中國國內最早出現的自由軟件項目之一。
1.2.1 相關參考資料
LVS官網: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
1.2.2 LVS內核模塊ip_vs介紹
早在2.2內核時, IPVS就已經以內核補丁的形式出現。
從2.4.23版本開始,IPVS軟件就合併到Linux內核的常用版本的內核補丁的集合。
從2.4.24以後IPVS已經成爲Linux官方標準內核的一部分。
ü LVS無需安裝
ü 安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive
ü ipvsadm是通過命令行管理,而keepalive讀取配置文件管理
ü 後面我們會用Shell腳本實現keepalive的功能
1.3LVS集羣搭建
1.3.1 集羣環境說明
主機名 | IP地址 | 軟件 | 系統版本 |
lb03 | 10.0.0.15 | lvs keepalived | CentOS Linux release 7.4.1708 |
lb04 | 10.0.0.16 | lvs keepalived | CentOS Linux release 7.4.1708 |
web03 | 10.0.0.18 | tomcat | CentOS Linux release 7.4.1708 |
web04 | 10.0.0.17 | tomcat | CentOS Linux release 7.4.1708 |
主機說明
[root@lb03 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@lb03 ~]# uname -a
Linux lb03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@lb03 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@lb03 ~]# getenforce
Disabled
web環境說明
可以curl出以下結果的環境
[root@lb03 ~]# curl 10.0.0.17
web03
[root@lb03 ~]# curl 10.0.0.18
web04
web服務器的搭建參照: Tomcat: http://www.cnblogs.com/clsn/p/7904611.html
Nginx: http://www.cnblogs.com/clsn/p/7750615.html
1.3.2 安裝ipvsadm管理工具
安裝管理工具
yum -y install ipvsadm
查看當前LVS狀態默認爲潛伏狀態,順便激活LVS內核模塊。
ipvsadm #查看也是激活
查看系統的LVS模塊。
[root@lb03 ~]# lsmod|grep ip_vs
ip_vs_wrr 12697 1
ip_vs 141092 3 ip_vs_wrr
nf_conntrack 133387 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
1.3.3 LVS集羣搭建
配置LVS負載均衡服務(在lb03操作)
步驟1:在eth0網卡綁定VIP地址(ip)
步驟2:清除當前所有LVS規則(-C)
步驟3:設置tcp、tcpfin、udp鏈接超時時間(--set)
步驟4:添加虛擬服務(-A),-t指定虛擬服務的IP端口,-s 指定調度算法 調度算法見man ipvsadm, rr wrr 權重輪詢 -p 指定超時時間
步驟5:將虛擬服務關聯到真實服務上(-a) -r指定真實服務的IP端口 -g LVS的模式 DR模式 -w 指定權重
步驟6:查看配置結果(-ln)
命令集:
ip addr add 10.0.0.13/24 dev eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
ipvsadm -ln
檢查結果:
[root@lb03 ~]# 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.13:80 wrr persistent 20
-> 10.0.0.17:80 Route 1 0 0
-> 10.0.0.18:80 Route 1 0 0
參數參考:man ipvsadm
1.3.4 在web服務器配置操作(web03,web04)
步驟1:在lo網卡綁定VIP地址(ip) (原因:要接收VIP的數據包,如果沒有VIP,會丟棄)
步驟2:修改內核參數抑制ARP響應
命令集:
ip addr add 10.0.0.13/32 dev lo (32位掩碼:原因:不影響其他服務)
cat >>/etc/sysctl.conf<<EOF #抑制ARP響應(只要在DR模式下就開啓ARP抑制)
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
sysctl -p
至此LVS集羣配置完畢!
1.3.5 進行訪問測試
瀏覽器訪問:
命令行測試:在爲加入LVS的主機上測試
[root@lb04 ~]# curl 10.0.0.13
web03
問題:瀏覽器訪問發現沒有負載均衡?
LVS是宏觀上的負載均衡,併發少的話輪詢不明顯,可以使用多個客戶端訪問測試。
抓包查看結果:
問題:使用wireshark抓包,發現通信的是Windows的IP和lb03的80端口,但是爲什麼查看lb03發現沒有80端口?
也是有80端口的,但是在內核層次,它是一個虛擬服務,看不到而已。
LVS本身也實現了內核轉發功能
arp解析查看:
[root@lb04 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.0.254 ether 00:50:56:e9:9f:2c C eth0
10.0.0.18 ether 00:0c:29:ea:ca:55 C eth0
10.0.0.13 ether 00:0c:29:de:7c:97 C eth0
172.16.1.15 ether 00:0c:29:de:7c:a1 C eth1
10.0.0.17 ether 00:0c:29:4a:ac:4a C eth0
1.4負載均衡(LVS)相關名詞
術語說明:
DS:Director Server。指的是前端負載均衡器節點。
RS:Real Server。後端真實的工作服務器。
VIP:向外部直接面向用戶請求,作爲用戶請求的目標的IP地址。
DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
RIP:Real Server IP,後端服務器的IP地址。
CIP:Client IP,訪問客戶端的IP地址。
1.4.1 LVS集羣的工作模式--DR直接路由模式
DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器將響應後的處理結果直接返回給客戶端用戶。
效率高:1.只到2層,只針對DR模式(局域網)
2.LB只將用戶請求發送到後臺,web處理完不會返回給BL,而是直接給用戶
DR技術可極大地提高集羣系統的伸縮性。但要求調度器LB與真實服務器RS都有一塊物理網卡連在同一物理網段上,即必須在同一局域網環境。
DR模式一般都需要外網卡:內網網關容易形成瓶頸(可以走運營商的硬件網關)
DR直接路由模式說明:
文字解釋 | a)通過在調度器LB上修改數據包的目的MAC地址實現轉發。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。 b)請求的報文經過調度器,而RS響應處理後的報文無需經過調度器LB,因此,併發訪問量大時使用效率很高,比Nginx代理模式強於此處。 c)因DR模式是通過MAC地址的改寫機制實現轉發的,因此,所有RS節點和調度器LB只能在同一個局域網中。需要注意RS節點的VIP的綁定(lo:vip/32)和ARP抑制問題。 d)強調下:RS節點的默認網關不需要是調度器LB的DIP,而應該直接是IDC機房分配的上級路由器的IP(這是RS帶有外網IP地址的情況),理論上講,只要RS可以出網即可,不需要必須配置外網IP,但走自己的網關,那網關就成爲瓶頸了。 e)由於DR模式的調度器僅進行了目的MAC地址的改寫,因此,調度器LB無法改變請求報文的目的端口。LVS DR模式的辦公室在二層數據鏈路層(MAC),NAT模式則工作在三層網絡層(IP)和四層傳輸層(端口)。 f)當前,調度器LB支持幾乎所有UNIX、Linux系統,但不支持windows系統。真實服務器RS節點可以是windows系統。 g)總之,DR模式效率很高,但是配置也較麻煩。因此,訪問量不是特別大的公司可以用haproxy/Nginx取代之。這符合運維的原則:簡單、易用、高效。日1000-2000W PV或併發請求1萬以下都可以考慮用haproxy/Nginx(LVS的NAT模式) h)直接對外的訪問業務,例如web服務做RS節點,RS最好用公網IP地址。如果不直接對外的業務,例如:MySQL,存儲系統RS節點,最好只用內部IP地址。 |
注:要了解LVS的幾種模式,重點是DR模式,以及工作原理
1.5在web端的操作有什麼含義?
1.5.1 RealServer爲什麼要在lo接口上配置VIP?
既然要讓RS能夠處理目標地址爲vip的IP包,首先必須要讓RS能接收到這個包。
在lo上配置vip能夠完成接收包並將結果返回client。
1.5.2 在eth0網卡上配置VIP可以嗎?
不可以,將VIP設置在eth0網卡上,會影響RS的arp請求,造成整體LVS集羣arp緩存表紊亂,以至於整個負載均衡集羣都不能正常工作。
1.5.3 爲什麼要抑制ARP響應?
① arp協議說明
ARP協議,全稱"Address Resolution Protocol",中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的物理地址(MAC地址)。
ARP協議要求通信的主機雙方必須在同一個物理網段(即局域網環境)!
爲了提高IP轉換MAC的效率,系統會將解析結果保存下來,這個結果叫做ARP緩存。
Windows查看ARP緩存命令 arp -a
Linux查看ARP緩存命令 arp -n
Linux解析IP對應的MAC地址 arping -c 1 -I eth0 10.0.0.6
ARP緩存表是把雙刃劍
a) 主機有了arp緩存表,可以加快ARP的解析速度,減少局域網內廣播風暴。因爲arp是發廣播解析的,頻繁的解析也是消耗帶寬的,尤其是機器多的時候。
b) 正是有了arp緩存表,給惡意***帶來了***服務器主機的風險,這個就是arp欺騙***。
c) 切換路由器,負載均衡器等設備時,可能會導致短時網絡中斷。因爲所有的客戶端ARP緩存表沒有更新
②服務器切換ARP問題
當集羣中一臺提供服務的lb01機器宕機後,然後VIP會轉移到備機lb02上,但是客戶端的ARP緩存表的地址解析還是宕機的lb01的MAC地址。從而導致,即使在lb02上添加VIP,也會發生客戶端無法訪問的情況。
解決辦法是:當lb01宕機,VIP地址遷移到lb02時,需要通過arping命令通知所有網絡內機器更新本地的ARP緩存表,從而使得客戶機訪問時重新廣播獲取MAC地址。
這個是自己開發服務器高可用腳本及所有高可用軟件必須考慮到的問題。
ARP廣播進行新的地址解析
arping -I eth0 -c 1 -U VIP #格式
arping -I eth0 -c 1 -U 10.0.0.13
測試命令
ip addr del 10.0.0.13/24 dev eth0 #lb03刪除VIP
ip addr add 10.0.0.13/24 dev eth0 #lb04添加VIP
ip addr show eth0 查看確認VIP已存在
arping -I eth0 -c 1 -U 10.0.0.13 #服務器主動發送廣播更新客戶端的ARP緩存表
windows查看arp -a
接口: 10.0.0.1 --- 0x12
Internet 地址 物理地址 類型
10.0.0.13 00-0c-29-de-7c-97 動態
10.0.0.15 00-0c-29-de-7c-97 動態
10.0.0.16 00-0c-29-2e-47-20 動態
10.0.0.17 00-0c-29-4a-ac-4a 動態
10.0.0.18 00-0c-29-ea-ca-55 動態
③arp_announce和arp_ignore詳解
# 配置的內核參數
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
lvs在DR模式下需要關閉arp功能
arp_announce
對網絡接口上,本地IP地址的發出的,ARP迴應,作出相應級別的限制:
確定不同程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口
數值 | 含義 |
0(默認) | 在任意網絡接口(eth0,eth1,lo)上的任何本地地址 |
1 | 儘量避免不在該網絡接口子網段的本地地址做出arp迴應. 當發起ARP請求的源IP地址 是被設置應該經由路由達到此網絡接口的時候很有用.此時會檢查來訪IP是否爲所有接口 上的子網段內ip之一.如果改來訪IP不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理. |
2 | 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試 選擇與能與該地址通信的本地地址.首要是選擇所有的網絡接口的子網中外出訪問子網中 包含該目標IP地址的本地地址. 如果沒有合適的地址被發現,將選擇當前的發送網絡接口 或其他的有可能接受到該ARP迴應的網絡接口來進行發送. |
arp_ignore定義
對目標地定義對目標地址爲本地IP的ARP詢問不同的應答模式0
數值 | 含義 |
0(默認值) | 迴應任何網絡接口上對任何本地IP地址的arp查詢請求 |
1 | 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求 |
2 | 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內 |
3 | 不迴應該網絡界面的arp請求,而只對設置的唯一和連接地址做出迴應 |
4-7 | 保留未使用 |
8 | 不迴應所有(本地地址)的arp查詢 |
抑制RS端arp前的廣播情況
抑制RS端arp後廣播情況
1.6 LVS集羣的工作模式
DR(Direct Routing)直接路由模式 NAT(Network Address Translation) TUN(Tunneling)隧道模式 FULLNAT(Full Network Address Translation) |
TUN和FULLNAT模式這裏不做過多簡紹.
1.6.1 LVS集羣的工作模式--NAT
通過網絡地址轉換,調度器LB重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器,真實服務器的響應報文處理之後,返回時必須要通過調度器,經過調度器時報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
收費站模式---來去都要經過LB負載均衡器。
NAT方式的實現原理和數據包的改變過程:
(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP (b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈 (c). IPVS比對數據包請求的服務是否爲集羣服務,若是,修改數據包的目標IP地址爲後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP (d). POSTROUTING鏈通過選路,將數據包發送給Real Server (e). Real Server比對發現目標爲自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP (f). Director Server在響應客戶端前,此時會將源IP地址修改爲自己的VIP地址,然後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP |
LVS-NAT模型的特性
l RS應該使用私有地址,RS的網關必須指向DIP
l DIP和RIP必須在同一個網段內
l 請求和響應報文都需要經過Director Server,高負載場景中,Director Server易成爲性能瓶頸
l 支持端口映射
l RS可以使用任意操作系統
l 缺陷:對Director Server壓力會比較大,請求和響應都需經過director server
NAT模式配置方法:分別有ipvs和lvs+keepalived倆種方法
1.6.2 ipvs的配置方法:
lvs服務器上配置:
ip addr add 10.0.0.13/24 dev eth0 label eth0:0 #只在lb01上配置即可
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 10.0.0.13:80 -s rr -p 20
ipvsadm -a -t 10.0.0.13:80 -r 172.16.1.203:80 -m
ipvsadm -a -t 10.0.0.13:80 -r 172.16.1.204:80 -m
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lb01配置:
#ipvsadm -A -t 10.0.0.13:80 -s rr
#ipvsadm -a -t 10.0.0.13:80 -r 172.16.1.203:80 -m
#ipvsadm -a -t 10.0.0.13:80 -r 172.16.1.204:80 -m
lb02配置:
#ipvsadm -A -t 10.0.0.13:80 -s rr
#ipvsadm -a -t 10.0.0.13:80 -r 172.16.1.203:80 -m
#ipvsadm -a -t 10.0.0.13:80 -r 172.16.1.204:80 -m
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RS配置:
/etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.13
1.6.2 lvs+keepalived配置方法:
ip addr add 10.0.0.13/24 dev eth0 label eth0:0 #只在lb01上配置即可
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
lb01配置:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
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.13/24 dev eth0 label eth0:1
}
}
vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1112
}
virtual_ipaddress {
172.16.1.13/24 dev eth1 label eth1:1
}
}
virtual_server 10.0.0.13 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 172.16.1.203 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.16.1.204 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
lb02配置:
/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL1
}
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.13/24 dev eth0 label eth0:1
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1112
}
virtual_ipaddress {
172.16.1.13/24 dev eth1 label eth1:1
}
}
virtual_server 10.0.0.13 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 172.16.1.203 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.16.1.204 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
RS上配置:
/etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.13
1.8 lVS+Keepalived方案實現
1.8.1 keepalived功能
1. 添加VIP
2. 添加LVS配置
3. 高可用(VIP漂移)
4. web服務器健康檢查
1.8.2 在負載器安裝Keepalived軟件
yum -y install keepalived
# 檢查軟件是否安裝
[root@lb03 ~]# rpm -qa keepalived
keepalived-1.3.5-1.el7.x86_64
1.8.3 修改配置文件
lb03上keepalied配置文件
1 [root@lb03 ~]# cat /etc/keepalived/keepalived.conf
2 global_defs {
3 router_id LVS_01
4 }
5
6 vrrp_instance VI_1 {
7 state MASTER
8 interface eth0
9 virtual_router_id 51
10 priority 150
11 advert_int 1
12 authentication {
13 auth_type PASS
14 auth_pass 1111
15 }
16 virtual_ipaddress {
17 10.0.0.13/24
18 }
19 }
20
21 virtual_server 10.0.0.13 80 {
22 delay_loop 6 #服務輪詢延時時間
23 lb_algo wrr #指定算法爲權重輪詢算法
24 lb_kind DR #模式爲DR
25 nat_mask 255.255.255.0
26 persistence_timeout 50
27 protocol TCP
28
29 real_server 10.0.0.17 80 {
30 weight 1
31 TCP_CHECK {
32 connect_timeout 8
33 nb_get_retry 3
34 delay_before_retry 3
35 connect_port 80
36 }
37 }
38
39 real_server 10.0.0.18 80 {
40 weight 1
41 TCP_CHECK {
42 connect_timeout 8
43 nb_get_retry 3
44 delay_before_retry 3
45 connect_port 80
46 }
47 }
48 }
lb04的Keepalied配置文件
1 [root@lb04 ~]# cat /etc/keepalived/keepalived.conf
2 global_defs {
3 router_id LVS_02
4 }
5
6 vrrp_instance VI_1 {
7 state BACKUP
8 interface eth0
9 virtual_router_id 51
10 priority 100
11 advert_int 1
12 authentication {
13 auth_type PASS
14 auth_pass 1111
15 }
16 virtual_ipaddress {
17 10.0.0.13/24
18 }
19 }
20 virtual_server 10.0.0.13 80 {
21 delay_loop 6
22 lb_algo wrr
23 lb_kind DR
24 nat_mask 255.255.255.0
25 persistence_timeout 50
26 protocol TCP
27
28 real_server 10.0.0.17 80 {
29 weight 1
30 TCP_CHECK {
31 connect_timeout 8
32 nb_get_retry 3
33 delay_before_retry 3
34 connect_port 80
35 }
36 }
37
38 real_server 10.0.0.18 80 {
39 weight 1
40 TCP_CHECK {
41 connect_timeout 8
42 nb_get_retry 3
43 delay_before_retry 3
44 connect_port 80
45 }
46 }
47 }
keepalived persistence_timeout參數意義 LVS Persistence 參數的作用
http://blog.csdn.net/nimasike/article/details/53911363
1.8.4 啓動keepalived服務
[root@lb03 ~]# systemctl restart keepalived.service
# 檢查lvs狀態
[root@lb03 ~]# 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.13:80 wrr persistent 50
-> 10.0.0.17:80 Route 1 0 0
-> 10.0.0.18:80 Route 1 0 0
# 檢查虛擬ip
[root@lb03 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:de:7c:97 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.15/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.0.0.13/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fede:7c97/64 scope link
valid_lft forever preferred_lft forever
1.8.5 在web服務器上進行配置
(在web03/web04同時操作下面步驟)
步驟1:在lo網卡綁定VIP地址(ip)
步驟2:修改內核參數抑制ARP響應
ip addr add 10.0.0.13/32 dev lo #加入開機自啓
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
sysctl -p
注意:web服務器上的配置爲臨時生效,可以將其寫入rc.local文件,注意文件的執行權限。
使用curl命令進行測試,如果沒問題,則配置完成!
[root@lb04 ~]# curl 10.0.0.13
web03
1.9 常見LVS負載均衡高可用解決方案
Ø 開發類似keepalived的腳本,早期的辦法,現在不推薦使用。
Ø heartbeat+lvs+ldirectord腳本配置方案,複雜不易控制,不推薦使用
Ø RedHat工具piranha,一個web界面配置LVS。
Ø LVS-DR+keepalived方案,推薦最優方案,簡單、易用、高效。
1.9.1 lvs排錯思路
小夥伴們可以關注我的微信公衆號:linux運維菜鳥之旅
關注“中國電信天津網廳”公衆號,首次綁定可免費領2G流量,爲你的學習提供流量!