【2018.07.05學習筆記】【linux高級知識 18.11-18.12】

18.11 LVS DR模式搭建

在生產環境中用的比較多的是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

18.12 keepalived + LVS

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列表。
相關文章
相關標籤/搜索