LVS在淘寶環境中的應用

目錄

1. LVS-簡介

2. LVS-問題

3. LVS-fullnat

4. LVS-synproxy

5. LVS-cluster

6. LVS-performance

7. LVS-todo list


 疑問引入:用戶訪問淘寶,訪問哪臺apache服務器

傳統做法:DNS服務

四個問題

Q1:apache2 down,remove生效時間不可控

Q2:只支持WRR癿調度策略

Q3:apache間負載不均勻

Q4:攻擊防禦能力弱

A:  引入Virtual Server

4層Load Balance

– 基亍傳輸層信息進行 調度

– 調度算法:WRR/WLC 等

– 工作模式:NAT/DR/TUNNEL

– 傳輸協議:TCP/UDP

NAT

TUNNET

DR

LVS – 內核模塊:ip_vs – 實現了負載均衡
• Q – 某臺RealServer down了,怎麼辦? – LVS本身down了,怎麼辦?

 A – 某臺RealServer down了,怎麼辦?

--- 健康檢測 – LVS本身down了,怎麼辦?

---LVS冗餘 • Keepalived

– LVS管理軟件 – 健康檢測:支持4/7監測;

– 主備冗餘:採用VRRP協議癿HeartBeat;

– 如何配置?

--- 配置文件
 Keepalived –f /etc/keepalived/keepalived.conf
 
Q:缺少監控系統?LVS具有開源SNMP Patch

問題

 LVS在大規模網絡中應用存在不足

– 各轉發模式,網絡拓撲復雜,運維成本高 • 和商用LB設備相比

– 缺少TCP標誌位DDOS攻擊防禦 • 主備部署方式不足

– 性能無法線性擴展

DR模式-不足

1. LVS-RS間必須在同一個VLAN 2. RS上綁定VIP,風險大;

NAT模式-不足

TUNNEL不足


 
IN:增加1個IP頭 OUT:NULL
1. RS配置複雜(IPIP模塊等)

2. RS上綁定VIP,風險大

解決辦法

LVS各轉發模式運維成本高

– 新轉發模式FULLNAT:實現LVS-RealServer間跨vlan通訊,並 且in/out流都經過LVS;

• 缺少攻擊防禦模塊 – SYNPROXY:synflood攻擊防禦模塊

– 其它TCP FLAG DDOS攻擊防禦策略 • 性能無法線性擴展

– Cluster部署模式

 FULLNAT是一種新的轉發模式 – 主要思想:引入local address(內網ip地址),cip-vip轉 換爲lip->rip,而 lip和rip均爲IDC內網ip,可以跨vlan通 訊; – keepalived配置方式:
 virtual_server 125.76.224.240 {
     lb_kind FNAT/DR/NAT/TUNNEL
         local_address {
                          192.168.1.1
         }

 FULLNAT轉發模式

NAT實現原理

FULLNAT實現原理

NAT-HOOK點

NETFILTER HOOK點,同iptables
 
爲什麼是這2個HOOK點?

FULLNAT-HOOK點

NAT-session表

 FULLNAT-session表

FULLNAT-獲取client address(TOA)

 FULLNAT-設計考慮
– TCP OPT-TIMESTAMP • RealServer kernel開啓tcp_tw_recycle • 用戶A和B,timestamp大癿訪問成功,timestamp小癿訪問失敗
– TCP OPT-MSS • TCP三次握手最後一個ack包爲GET請求 • GET請求>1個數據包,toa無法插入
– TCP - Sequence • RealServer上timewait癿socket複用條件:seq遞增

SYNPROXY用於防禦synflood攻擊 – 主要思想:參照linux tcp協議棧中syncookies癿思想, LVS-構造特殊seq癿synack包,驗證ack包中ack_seq是否 合法-實現了TCP三次握手代理; – 配置方式
virtual_server 125.76.224.240 {
         syn_proxy
 
 SYNPROXY實現原理

SYNPROXY-設計考慮
– TCP - Sequence • Lvs->client 和 apache->lvs癿syn_ack包中seq不相同
– TCP OPT • Lvs->client syn_ack包中tcp opt支持mss/wsale/sack
– Session reused • 多個用戶通過NAT網關用同一個ip/port訪問LVS
– Ack Storm • Tcp seq轉換導致ack storm

 IPVS優化 – 多隊列網卡,1個隊列綁定到1個cpu核上

– 增大session hash table

– 增大session hash bucket lock個數 – 避免路由cache條目過多
– LOCKLESS – 硬件:Westmere(第二代nehalem)/bios配置

單隊列網卡 – 只有一個rx_buffer和一個tx_buffer;

多隊列網卡

 網卡中斷– CPU核 – Cat /proc/interrupts
  54:  188324418       0     IR-PCI-MSI-edge      eth0-TxRx-0
     55:  167573416       0     IR-PCI-MSI-edge      eth0-TxRx-1
 
– 綁定
 echo  01 > /proc/irq/54/smp_affinity  
  echo 02 > /proc/irq/55/smp_affinity

• 軟多隊列:RPS(receive packet steering)

 RPS配置
– cat  /sys/class/net/eth0/queues/rx-0/rps_cpus
 cat  /sys/class/net/eth0/queues/rx-1/rps_cpus
  – 綁定
 echo  01 > /sys/class/net/eth0/queues/rx-0/rps_cpus
  echo 02 > /sys/class/net/eth0/queues/rx-1/rps_cpus

 KEEPALIVED優化
– Select->epool – 減少reload時間和開銷

系統配置注意點

– 關閉網卡LRO/GRO

– 關閉irqbalance

– 增大proc參數:net.core.netdev_max_backlog

性能指標

– Synflood:350w pps

– Ack/rst/fin-flood:800w pps

– HTTP:150w pps

– New tcp connection:30w

– MAX session:4000w (24G memory) 機器:DELL R610(E5645  @ 2.40GHz), Intel 82599 NIC

• 提高性能

– Ipvs:lockless

– Keepalived:多線程事件驅勱

– 新硬件:sandybridge - DDIO • 完善功能

– 攻擊防禦:ip黑白名單…..

– 支持GRO(不支持LRO)
 
未來:4/7層合一

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章