第1章 LVS 簡介 1.1 LVS介紹 LVS是Linux Virtual Server的簡寫,意為Linux虛擬伺服器,是虛擬的伺服器集群系統,可在UNIX/LINUX平臺下實現負載均衡集群功能。該項目在1998年5月由章文嵩博士組織成立,是國內最早出現的自由軟體項目之一 官網:http://w ...
第1章 LVS 簡介
1.1 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
簡單一句話,當併發超過了Nginx上限,就可以使用LVS了。
日1000-2000W PV或併發請求1萬以下都可以考慮用Nginx。
大型門戶網站,電商網站需要用到LVS。
1.1.1 LVS內核模塊ip_vs介紹
早在2.2內核時,IPVS就已經以內核補丁的形式出現
從2.4.23版本開始,IPVS軟體就合併到Linux內核常用版本的內核補丁的集合
從2.4.24以後IPVS已經成為Linux官方標準內核的一部分
說明:
LVS無需安裝
安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive
ipvsadm是通過命令行管理,而keepalive讀取配置文件管理
後面我們會用Shell腳本實現keepalive的功能
第2章 LVS集群搭建
2.1 環境準備
主機名 |
主機IP |
備註 |
lb03 |
10.0.0.15 |
01.Cent0S7.4系統,記憶體512M 02.防火牆firewall和Selinux關閉 03.web03和web04只安裝Nginx軟體,並滿足 curl http://10.0.0.17/頁尾得到結果為web03 curl http://10.0.0.18/頁尾得到結果為web04 |
lb04 |
10.0.0.16 |
|
web03 |
10.0.0.17 |
|
web04 |
10.0.0.18 |
2.1 安裝ipvsadm管理工具
1 lsmod |grep ip_vs #查看系統的LVS模塊->預設沒有載入模塊,需安裝管理工具才會激活 2 yum -y install ipvsadm
查看當前LVS狀態,順便激活LVS內核模塊
1 [root@lb03 ~]# ipvsadm -ln 2 IP Virtual Server version 1.2.1 (size=4096) 3 Prot LocalAddress:Port Scheduler Flags 4 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 5 [root@lb03 ~]# lsmod|grep ip_vs 6 ip_vs 141092 0 7 nf_conntrack 133387 1 ip_vs 8 libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
註意ipvsadm -ln作用:健康檢查,即當某台web伺服器出現問題時LVS將自動踢出;等恢復後再添加進來
2.1.1 ①在eth0網卡綁定VIP地址(高可用)
1 ip addr add 10.0.0.13/24 dev eth0 #lb服務的IP地址可擴展性較差,故使用VIP地址(刪除del;顯示show)
2.1.2 ②清除當前所有LVS規則
1 ipvsadm -C
2.1.3 ③設置tcp、tcpfin、udp鏈接超時時間(s)
1 ipvsadm --set 30 5 60 #控制瀏覽器與lb01的超時時間
2.1.4 ④添加虛擬服務,調度演算法見man ipvsadm
1 ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 2 3 #LVS預設無80埠,需另外添加新的虛擬IP記錄->控制lb01與web01、web02的超時時間
2.1.5 ⑤將虛擬服務關聯到真實服務上
1 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1 2 3 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
2.1.6 ⑥查看配置結果
1 [root@lb03 ~]# ipvsadm -ln 2 IP Virtual Server version 1.2.1 (size=4096) #LVS版本號 3 Prot LocalAddress:Port Scheduler Flags #協議(TCP)本地IP:埠 調度演算法 標誌(持續時間20s) 4 -> RemoteAddress:Port Forward Weight ActiveConn InActConn 5 #後端節點IP:埠 工作模式 權重 已建立連接 正在連接 6 TCP 10.0.0.3:80 wrr persistent 20 7 -> 10.0.0.17:80 Route 1 0 0 8 -> 10.0.0.18:80 Route 1 0 0
2.2 web伺服器配置
2.2.1 Ⅰ.在lo網卡綁定VIP地址
1 ip addr add 10.0.0.13/32 dev lo
2.2.2 Ⅱ.修改內核參數抑制ARP響應
1 cat >>/etc/sysctl.conf<<EOF #其目的是為了讓rs順利發送mac地址給客戶端 2 net.ipv4.conf.all.arp_ignore = 1 3 net.ipv4.conf.all.arp_announce = 2 4 net.ipv4.conf.lo.arp_ignore = 1 5 net.ipv4.conf.lo.arp_announce = 2 6 EOF 7 8 sysctl -p
查看結果
1 [root@lb03 ~]# ip a s eth0 2 eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 3 link/ether 00:50:56:3b:cb:36 brd ff:ff:ff:ff:ff:ff 4 inet 10.0.0.13/24 scope global secondary eth0 5 valid_lft forever preferred_lft forever 6 [root@web03 ~]# ip a s lo 7 lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 8 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 9 inet 10.0.0.13/32 scope global lo 10 valid_lft forever preferred_lft forever
2.2.3 Ⅲ.web瀏覽器測試
1 http://10.0.0.13/
說明:當lb伺服器斷開連接後VIP會自動消失,重新連接後需再次添加VIP
2.2.4 Ⅳ. arp解析查看
1 [root@lb04 ~]# arp -n 2 Address HWtype HWaddress Flags Mask Iface 3 10.0.0.254 ether 00:50:56:e9:9f:2c C eth0 4 10.0.0.18 ether 00:0c:29:ea:ca:55 C eth0 5 10.0.0.13 ether 00:0c:29:de:7c:97 C eth0 6 172.16.1.15 ether 00:0c:29:de:7c:a1 C eth1 7 10.0.0.17 ether 00:0c:29:4a:ac:4a C eth0
至此,LVS集群配置完畢
註意:所有有訪問的返回值都是10.0.0.3
lvs與nginx的不同就在於17和18並不通過IP地址訪問,而是通過mac地址訪問
至此,LVS集群配置完畢
2.2.4.1 存疑問題:使用抓包工具發現通信的是windows IP和lb03的80埠,但lb03沒有80埠?
lvs通過mac地址訪問時,訪問10.0.0.3就是訪問lb01
10.0.0.3的數據包mac地址的返回值就是訪問web03
2.3 ARP協議
2.3.1 arp詳解
01.ARP協議,全稱"Address Resolut ion Protocol",中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的物理地址(MAC地址)
ARP協議要求通信的主機雙方必須在同一個物理網段(即區域網環境)!
02.為了提高IP轉換MAC的效率,系統會將解析結果保存下來,這個結果叫做ARP緩存
1 arp-a #Windows查看ARP緩存命令 2 arp-n #Linux查看ARP緩存命令 3 arping -c 1 -I eth0 10.0.0.6 4 #Linux解析IP對應的MAC地址[-c指定超時的ARP數據包數量;-I指定使用哪個網路介面]
ARP緩存表是把雙刃劍
①主機有了arp緩存表,可以加快ARP的解析速度,減少區域網內廣播風暴。因為arp是發廣播解析的,頻繁的解析也是消耗帶寬的(尤其是機器多的時候) ②正是有了arp緩存表,給惡意黑客帶來了攻擊伺服器主機的風險,這個就是arp欺騙攻擊 ③切換路由器,負載均衡器等設備時,可能會導致短時網路中斷。因為所有的客戶端ARP緩存表未更新
2.3.2 伺服器切換ARP問題
當lb01宕機,VIP地址遷移到lb02時需要通過arping命令通知所有網路內機器更新本地的ARP緩存表,從而使得客戶機訪問時重新廣播獲取MAC地址
ARP廣播進行新的地址解析
1 arping -I eth0 -c 1 -U VIP 2 arping -I eth0 -c 1 -U 10.0.0.13
測試ARP緩存切換(手動漂移VIP)
1 [root@lb03 ~]# ip addr del 10.0.0.13/24 dev eth0 2 [root@lb04 ~]# ip addr add 10.0.0.13/24 dev eth0 3 [root@lb04 ~]# arping -I eth0 -c 1 -U 10.0.0.13 4 ARPING 10.0.0.13 from 10.0.0.13 eth0 5 Sent 1 probes (1 broadcast(s)) 6 Received 0 response(s)
windows查看arp -a
1 [e:\~]$ arp -a
2.3.3 LVS集群的工作模式
DR直接路由模式
NAT模式
FULLNAT
TUNNEL
第3章 Keepalive+LVS實現
3.1 安裝配置keepalive實例
3.1.1 ①在lb03和lb04上安裝keepalive
1 yum install -y keepalived
3.1.2 ②編輯keepalived.conf配置文件
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 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 }
3.1.3 ③開啟keepalived服務
1 systemctl start keepalived.service 2 ip a #查看VIP,此時應漂移到lb04上
3.1.4 ④web03/web04同時操作以下步驟
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 10 sysctl -p
註意:因為虛擬的ip重啟之後就會失效,故須加入開機啟動項rc.local文件並賦予其可執行許可權
3.1.5 ⑤keepalive健康檢查功能
模擬web03出現問題
3.1.5.1 查看lb03 lvs狀態
3.1.5.2 關閉web03
3.1.5.3 查看lb03狀態
如圖發現,web03被剔除
3.1.5.4 開啟web03
3.1.5.5 查看lvs狀態
web03恢復
以上是健康檢查功能
3.1.6 ⑥測試
1 [root@lb04 ~]# curl 10.0.0.13 2 web03 3 [root@lb04 ~]# ipvsadm -ln
3.2 常見LVS負載均衡高可用解決方案
01.開發類似keepalived的腳本,早期的辦法(不推薦)
02.heartbeat+lvs+ldirectord腳本配置方案,複雜不易控制(不推薦使用)
03.RedHat工具piranha,一個web界面配置LVS
04.LVS-DR+keepalived方案,推薦最優方案,簡單、易用、高效