LVS 負載均衡 keepalive


為什么要學lvs

工作在網絡模型的7層,可以針對http應用做一些分流的策略,比如針對域名、
目錄結構, Nginx單憑這點可利用的場合就遠多於LVS了。
最新版本的Nginx也支持4層TCP負載,曾經這是LVS比Nginx好的地方。
Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個
也是它的優勢之一,相反LVS對網絡穩定性依賴比較大。
Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日志打印出
來。 LVS的配置、測試就要花比較長的時間了, LVS對網絡依賴比較大。

簡單一句話,當並發超過了Nginx上限,就可以使用LVS了。
日1000-2000W PV或並發請求1萬以下都可以考慮用Nginx。
大型門戶網站,電商網站需要用到LVS。

LVS 介紹

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系
統,可以在UNIX/LINUX平台下實現負載均衡集群功能。該項目在1998年5月由章文嵩博士組
織成立,是中國國內最早出現的自由軟件項目之一。

官網: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

 

LVS內核模塊ip_vs介紹

早在2.2內核時, IPVS就已經以內核補丁的形式出現。
從2.4.23版本開始, IPVS軟件就合並到Linux內核的常用版本的內核補丁的集合。從2.4.24以后IPVS已經成Linux官方標准內核的一部分。

LVS無需安裝
安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive
ipvsadm是通過命令行管理,而keepalive讀取配置文件管理
后面我們會用Shell腳本實現keepalive的功能

lvs集群部署

安裝lpvsadm管理工具

查看系統的LVS模塊

  1. lsmod|grep ip_vs

    默認沒有加載模塊,安裝管理工具

  2. yum install -y ipvsadm

    查看lvs默認狀態並且激活lvs

  3. [root@lb03 ~]# ipvsadm
  4. IP Virtual Server version 1.2.1 (size=4096)
  5. Prot LocalAddress:Port Scheduler Flags
  6.   -> RemoteAddress:Port Forward Weight ActiveConn InActConn

配置lvs負載均衡服務

第一步:在eth0網卡綁定VIP地址(ip)

第二步:清楚當前說有LVS規則(-C)

第三步:設置tcp、tcpfin、udp鏈接超時時間(--set)

第四步:添加虛擬服務(-A),調度算法(man ipvsadm)

第五步:將虛擬服務關聯到真是服務上(-a)

第六步:查看配置結果(ln)

  1. ip addr add 10.0.0.13/24 dev eth0
  2. ipvsadm -C
  3. ipvsadm --set 30 5 60 #控制瀏覽器與lb01的超時時間
  4. ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 -p控制lb01與web01、web02的超時時
  5. ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
  6. ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
  7. ipvsadm -ln

配置web操作

  1. ip addr add 10.0.0.13/32 dev lo
  2.  
  3. cat >>/etc/sysctl.conf<<EOF
  4. net.ipv4.conf.all.arp_ignore = 1
  5. net.ipv4.conf.all.arp_announce = 2
  6. net.ipv4.conf.lo.arp_ignore = 1
  7. net.ipv4.conf.lo.arp_announce = 2
  8. EOF
  9. sysctl -p

    修改web03 web04 tomcat端口號為 80

web03 啟動 tomcat8_1

web04 啟動 tomcat_02

訪問測試

lb02測試

說有訪問的返回值都是10.0.0.3

lvs跟nginx不一樣 17和18不通過IP地址訪問,通過mac地址訪問

lvs通過mac地址訪問

訪問10.0.0.3就是訪問lb01

10.0.0.3的數據包mac地址的返回值就是訪問web03

抓包結果總結

數據包的ip地址只有lb的vip 10.0.0.3

數據包的接收mac地址也是lb01的網卡mac地址

數據包的返回mac地址可能是web03的網卡mac,也可能是web04的網卡mac地址。

服務器切換arp

vip漂移,手動更改vip的mac地址

  1. 在lb03刪除vip
  2. ip addr del 10.0.0.13/24 dev eth0
  3. 在lb04添加vip
  4. ip addr add 10.0.0.13/24 dev eth0
  5. 查看lb04 eth0的vip地址
  6. ip addr show eth0
  7. 全網廣播vip的mac地址改變
  8. arping -I eth0 -c 1 -U 10.0.0.13
  9. windows查看
  10. arp -a

 

lvs高可用

keepalive功能:

通用功能:實現vip高可用,漂移。

LVS專屬技能:通過配置文件控制LVS集群節點。

LVS專屬技能:對后端的真實服務器節點進行健康檢查。

在lb03和lb04安裝Keepalive

  1. yum -y install keepalived

Keepalive的配置文件分成三部分配置

  1. vim /etc/keepalived/keepalived.conf

1.global_defs è全局定義

同一集群每個節點不一樣

router_id LVS_03

router_id LVS_04

  1. ###########lb03###########
  2. global_defs {
  3. router_id LVS_03
  4. }
  5. ###########lb04###########
  6. global_defs {
  7. router_id LVS_04
  8. }

2.vrrp 實例配置 èVIP

  1. ###########lb01########### ###########lb02###########
  2. vrrp_instance VI_1 { vrrp_instance VI_1 {
  3. state MASTER state BACKUP
  4. interface eth0 interface eth0
  5. virtual_router_id 51 virtual_router_id 51
  6. priority 150 priority 100
  7. advert_int 1 advert_int 1
  8. authentication { authentication {
  9. auth_type PASS auth_type PASS
  10. auth_pass 1111 auth_pass 1111
  11. } }
  12. virtual_ipaddress { virtual_ipaddress {
  13. 10.0.0.3/24 10.0.0.3/24
  14.   } }
  15. } }

virtual_router_id 51 分組,同一集群每個節點相同不同集群一定不要同。

3.virtual_server配置 èlvs的配置

  1. virtual_server 10.0.0.13 80 {
  2.     delay_loop 6
  3.     lb_algo wrr
  4.     lb_kind DR
  5.     nat_mask 255.255.255.0
  6.     persistence_timeout 50
  7.     protocol TCP
  8.  
  9.     real_server 10.0.0.17 80 {
  10.         weight 1
  11.         TCP_CHECK {
  12.         connect_timeout 8
  13.         nb_get_retry 3
  14.         delay_before_retry 3
  15.         connect_port 80
  16.         }
  17.     }
  18.  
  19.     real_server 10.0.0.18 80 {
  20.         weight 1
  21.         TCP_CHECK {
  22.         connect_timeout 8
  23.         nb_get_retry 3
  24.         delay_before_retry 3
  25.         connect_port 80
  26.         }
  27.     }
  28. }

keepalive健康檢查功能

模擬web03出現問題

查看lb03 lvs狀態

關閉web03

 

 

查看lb03狀態

web03被剔除

開啟web03

查看lvs狀態

web03返回。

以上是健康檢查功能

 

 

 

 

 

LVS集群的工作模式

DR直接路由模式

NAT模式

FULLNAT

TUNNEL

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM