為什么要學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模塊
-
lsmod|grep ip_vs
默認沒有加載模塊,安裝管理工具
-
yum install -y ipvsadm
查看lvs默認狀態並且激活lvs
-
[root@lb03 ~]# ipvsadm
-
IP Virtual Server version 1.2.1 (size=4096)
-
Prot LocalAddress:Port Scheduler Flags
-
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
配置lvs負載均衡服務
第一步:在eth0網卡綁定VIP地址(ip)
第二步:清楚當前說有LVS規則(-C)
第三步:設置tcp、tcpfin、udp鏈接超時時間(--set)
第四步:添加虛擬服務(-A),調度算法(man ipvsadm)
第五步:將虛擬服務關聯到真是服務上(-a)
第六步:查看配置結果(ln)
-
ip addr add 10.0.0.13/24 dev eth0
-
ipvsadm -C
-
ipvsadm --set 30 5 60 #控制瀏覽器與lb01的超時時間
-
ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 -p控制lb01與web01、web02的超時時
-
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
配置web操作
-
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
修改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地址
-
在lb03刪除vip
-
ip addr del 10.0.0.13/24 dev eth0
-
在lb04添加vip
-
ip addr add 10.0.0.13/24 dev eth0
-
查看lb04 eth0的vip地址
-
ip addr show eth0
-
全網廣播vip的mac地址改變
-
arping -I eth0 -c 1 -U 10.0.0.13
-
windows查看
-
arp -a
lvs高可用
keepalive功能:
通用功能:實現vip高可用,漂移。
LVS專屬技能:通過配置文件控制LVS集群節點。
LVS專屬技能:對后端的真實服務器節點進行健康檢查。
在lb03和lb04安裝Keepalive
-
yum -y install keepalived
Keepalive的配置文件分成三部分配置
-
vim /etc/keepalived/keepalived.conf
1.global_defs è全局定義
同一集群每個節點不一樣
router_id LVS_03
router_id LVS_04
-
###########lb03###########
-
global_defs {
-
router_id LVS_03
-
}
-
###########lb04###########
-
global_defs {
-
router_id LVS_04
-
}
2.vrrp 實例配置 èVIP
-
###########lb01########### ###########lb02###########
-
vrrp_instance VI_1 { vrrp_instance VI_1 {
-
state MASTER state BACKUP
-
interface eth0 interface eth0
-
virtual_router_id 51 virtual_router_id 51
-
priority 150 priority 100
-
advert_int 1 advert_int 1
-
authentication { authentication {
-
auth_type PASS auth_type PASS
-
auth_pass 1111 auth_pass 1111
-
} }
-
virtual_ipaddress { virtual_ipaddress {
-
10.0.0.3/24 10.0.0.3/24
-
} }
-
} }
virtual_router_id 51 分組,同一集群每個節點相同不同集群一定不要同。
3.virtual_server配置 èlvs的配置
-
virtual_server 10.0.0.13 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.17 80 {
-
weight 1
-
TCP_CHECK {
-
connect_timeout 8
-
nb_get_retry 3
-
delay_before_retry 3
-
connect_port 80
-
}
-
}
-
-
real_server 10.0.0.18 80 {
-
weight 1
-
TCP_CHECK {
-
connect_timeout 8
-
nb_get_retry 3
-
delay_before_retry 3
-
connect_port 80
-
}
-
}
-
}
keepalive健康檢查功能
模擬web03出現問題
查看lb03 lvs狀態
關閉web03
查看lb03狀態
web03被剔除
開啟web03
查看lvs狀態
web03返回。
以上是健康檢查功能
LVS集群的工作模式
DR直接路由模式
NAT模式
FULLNAT
TUNNEL