在生產環境中用的比較多的是DR模式,IP TUNNEL模式和NAT模式用的很少,由於NAT的瓶頸問題。html
假如規模在10臺之內訪問量不是很大,硬件配置和網絡環境均可以的話可使用NAT模式,可以節省公網IP,由於公網IP的成本也比較高。算法
另一種方案就是搭建內網的LVS,所有的server均使用內網IP,咱們使用一個公網IP端口映射到內網VIP的80端口便可,從而達到節省IP資源。vim
一、準備三臺機器A、B、C:A是分發器Director角色,B和C是後端Real server真實服務器。後端
A的網卡ens33 ip:192.168.87.128 B的網卡ens33 ip:192.168.87.130 C的網卡ens33 ip:192.168.87.132 VIP爲:192.168.87.100
二、A、B、C每臺機器都要安裝LVS核心工具ipvsadm瀏覽器
yum install -y ipvsadm
三、A上編寫腳本:/usr/local/sbin/lvs_dr.shbash
vim /usr/local/sbin/lvs_dr.sh #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/usr/sbin/ipvsadm vip=192.168.87.100 rs1=192.168.87.130 rs2=192.168.87.132 #注意這裏的網卡名字,重啓網卡 ifdown ens33 ifup ens33 ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up //綁定vip到ens33網卡 route add -host $vip dev ens33:2 $ipv -C $ipv -A -t $vip:80 -s wrr $ipv -a -t $vip:80 -r $rs1:80 -g -w 1 //-g 爲DR模式 $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
四、A上執行lvs_dr.sh腳本:服務器
sh /usr/local/sbin/lvs_dr.sh 成功斷開設備 'ens33'。 成功激活的鏈接(D-Bus 激活路徑:/org/freedesktop/NetworkManager/ActiveConnection/3)
五、B和C上也編輯腳本並執行:/usr/local/sbin/lvs_rs.sh網絡
#! /bin/bash vip=192.168.87.100 #把vip綁定在lo上,是爲了實現rs直接把結果直接返回給客戶端而不是給dr ifdown lo ifup lo ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sh /usr/local/sbin/lvs_rs.sh # 查看一下兩臺rs的路由表 router -n Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.87.2 0.0.0.0 UG 100 0 0 ens33 192.168.87.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.87.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo # 查看VIP是否已經綁在lo卡上 ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.87.100/32 brd 192.168.87.100 scope global lo:0
六、測試驗證負載均衡:架構
systemctl stop firewalld //測試前關掉防火牆 systemctl disable firewalld 用瀏覽器訪問VIP:192.168.87.100,不斷刷新訪問,就會在兩臺rs上交互訪問 ipvsadm -ln //查看lvs狀態 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.87.100:80 wrr -> 192.168.87.130:80 Route 1 3 10 -> 192.168.87.132:80 Route 1 4 9
LVS存在一個關鍵的單節點,由於全部的請求都會經過Director去轉發到Real server,若是Director宕機,咱們的全部服務均會被中止掉。因此咱們會把keepalived放在這兒,實現DR的高可用,這樣就會完美的解決問題!負載均衡
完整架構須要兩臺服務器(角色爲dir)分別安裝keepalived軟件,目的是實現高可用,但keepalived自己也有負載均衡的功能,因此本次實驗能夠只安裝一臺keepalived。
一、準備三臺機器A、B、C:A是分發器Director角色,B和C是後端Real server真實服務器。
A的網卡ens33 ip:192.168.87.128 B的網卡ens33 ip:192.168.87.130 C的網卡ens33 ip:192.168.87.132 VIP爲:192.168.87.100
二、A機器Director:安裝keepalived
yum install -y keepalived #定義Keepalived配置文件:/etc/keepalived/keepalived.conf vrrp_instance VI_1 { #備用服務器上爲 BACKUP state MASTER #綁定vip的網卡爲ens33 interface ens33 virtual_router_id 51 priority 100 #設置爲不搶佔,只在優先級高的機器上設置便可,優先級低的機器不設置,若是高的被down掉後,又起來,這樣不會搶佔。 nopreempt ##備用服務器不用寫這句 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.87.100 } } virtual_server 192.168.87.100 80 { #(每隔10秒查詢realserver狀態) delay_loop 10 #(lvs 算法) lb_algo wlc #算法(DR模式) lb_kind DR #(同一IP的鏈接60秒內被分配到同一臺realserver) persistence_timeout 0 #(用TCP協議檢查realserver狀態) protocol TCP real_server 192.168.87.130 80 { weight 100 TCP_CHECK { #(10秒無響應超時) connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.87.132 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } systemctl start keepalived //啓動Keepalived服務 ip add //查看網卡信息 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:36:be:2e:17 brd ff:ff:ff:ff:ff:ff inet 192.168.87.128/24 brd 192.168.2.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.87.100/32 scope global ens33 //VIP綁定在ens33網卡上 valid_lft forever preferred_lft forever inet6 fe16::492f:95cc:1b34:1d09/64 scope link valid_lft forever preferred_lft forever [root@director ~]# ipvsadm -ln //查看ipvsadm規則 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.87.100:80 wlc -> 192.168.87.130:80 Route 100 0 0 -> 192.168.87.132:80 Route 100 0 0
三、在rs角色的B和C上編輯腳本並執行:/usr/local/sbin/lvs_rs.sh
vim /usr/local/sbin/lvs_rs.sh #/bin/bash vip=192.168.87.100 #把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端 //#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce # 運行腳本 sh /usr/local/sbin/lvs_rs.sh
四、驗證測試: 瀏覽器上訪問vip:192.168.87.100,刷新頁面,會交互訪問B和C的站點。當B或C宕機了,都可以訪問至其餘RS上去,業務不會中斷。
五、Keepalived+LVS做用
--Keepalived搭建高可用保證LVS中director宕機後服務器不癱瘓:有2臺或以上的Director --若是隻使用LVS,那麼當LVS架構中某個real server宕機後,director仍然會繼續向其發送請求,添加Keepalived後會自動將宕機的real server清除出rs列表。