最近在配置lvs,想用lvs做個vip,這樣不用客戶端自己做lb
vip 機器上配置eth0虛擬ip,
安裝lvs
使用
ipvsadm -a -t 192.168.59.106:8080 -s wlc 設定vip 和lb的策略
ipvsadm -a -t ip:port -r realip:port -g 設定真實ip 對映和傳遞策略
真實機器上配置lo的虛擬ip,
設定允許路由
route add -host ip dev lo:0
真實機器上關閉這個虛擬ip的arp應答
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
客戶端請求到vip, 先傳送arp請求得到vip機器的mac位址,然後傳送tcp請求,在ethernet上填寫的是vip的mac位址也就是安裝lvs的伺服器的mac位址
lvs伺服器核心在收到包解析到mac位址的時候,修改包裡的mac位址到真實伺服器的mac位址然後重新請求,修改mac位址後的包,被真實伺服器收到,真實伺服器上因為也配有這個vip的虛擬ip,所以完成應答,然後直接回給客戶端,也不需要改變任何內容。
在客戶端抓包能看到,客戶端發出的包的mac位址是vip的位址 收到的包的對方的mac位址是真實的伺服器地的
在真實伺服器端抓包,因為被vip修改了mac位址,真實伺服器上能看到的是自己的mac位址和客戶端的mac位址
因為vip是在ip包前修改的,tcpdump無法抓到包
netstat 檢視
客戶端和真實伺服器端檢視正常
也是因為vip是在ip包之前修改而無法檢視
效能比起ngix 自然是好
核心不需要對tcp層解析,減少核心呼叫
在真實伺服器回給客戶端時候,不需要通過中轉,直接回給客戶端,減少網路包的數量和開銷。
lvs的解決之道,主要是客戶端並不對請求mac的位址進行檢查。
LVS DR模式搭建
1 dr模式下分發器和真實伺服器要在同ip段 2 分發器和真是伺服器都需要設定相同的vip,並且都能通外網 3 負載均衡器安裝 yum install y ipvsadm 4 負載均衡 ifconfig eno16777984 0 172.16.54.244 24 route add host 17...
LVS DR模式搭建
ip 備註192.168.174.128 排程器 關閉防火牆 安全規則 192.168.174.130 web端 關閉防火牆 安全規則 192.168.174.131 web端 關閉防火牆 安全規則 三颱centos7 兩台web端搭建ecshop和ecshop1,一台安裝ipvsadm實現排程 安...
LVS DR模式搭建
出於對架構的興趣,一有時間我就會了解一下如何搭建乙個高併發,高可用,可擴充套件的伺服器執行環境。lvs dr究竟現在的企業運用頻率有多高其實我也不清楚,本文是下班之餘斷斷續續研究搭建筆錄,並且僅僅在virtual box虛擬機器實踐,沒有實際生產實踐。但是在搭建過程中確實學到了許多理論知識,這裡只記...