1. 程式人生 > >Keepalived + LVS 實現負載均衡

Keepalived + LVS 實現負載均衡

chmod 成功 keepalive 健康檢查 ipaddr 高可用 得到 sse cap

一、Keepalived 與 LVS 簡單工作原理了解

1、Keepalived 管理LVS負載均衡軟件,Keepalived 可以通過讀取自身的配置文件,實現通過更底層的接口直接管理LVS的配置以及控制服務的啟動、停止等功能,這使用LVS的應用更加簡單方便了。

2、Keepalived 實現對LVS集群節點健康檢查功能,當LVS集群中的某一個甚至是幾個節點服務器同時發生故障無法提供服務時,Keepalived 服務會自動將失效的節點服務器從LVS 的正常轉發隊列中清除出去,並將請求調度到別的正常節點服務器上,從而保證最終用戶的訪問不受影響,並且故障恢復時,又可以加到正常轉發隊列中。

3、Keepalived 作為系統網絡服務的高可用功能,可以實現任意兩臺主機之間的故障轉移和自動切換。

4、LVS 負責數據轉發,基於第層網絡傳輸層,使用ARP協議,修改目的地MAC地址,實現數據的高速轉發,相對於NGINX的第七層轉發,有一定的優勢。

二、實現拓撲圖

技術分享圖片

三、實驗步驟

1、分別設置好各臺主機的IP地址,如:

主機-負載均衡:10.3.150.196
備機-負載均衡:10.3.150.197
web01:10.3.150.198
web02:10.3.150.199

2、在兩臺web主機裏,分別設置綁定 Local Loopback IP地址(VIP:10.3.150.200)

[root@web01 ~]# vi /etc/init.d/realserver
#!/bin/bash
#
# realserver
#
# chkconfig: 2345 24 76
# description: realserver ip

SNS_VIP=10.3.150.200
/etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       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
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       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
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0
[root@web01 ~]# chmod +x /etc/init.d/realserver
[root@web01 ~]# chkconfig --add /etc/init.d/realserver
[root@web01 ~]# chkconfig realserver on
[root@web01 ~]# /etc/init.d/realserver start

3、檢查web服務器綁定local loopback ip 是否正常。

[root@web01 ~]# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:50:56:AA:51:29  
                    inet addr:10.3.150.198  Bcast:10.3.150.255  Mask:255.255.255.0
                    inet6 addr: fe80::250:56ff:feaa:5129/64 Scope:Link
                    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                    RX packets:52847 errors:0 dropped:0 overruns:0 frame:0
                    TX packets:3322 errors:0 dropped:0 overruns:0 carrier:0
                    collisions:0 txqueuelen:1000 
                    RX bytes:4160205 (3.9 MiB)  TX bytes:272504 (266.1 KiB)

lo        Link encap:Local Loopback  
                    inet addr:127.0.0.1  Mask:255.0.0.0
                    inet6 addr: ::1/128 Scope:Host
                    UP LOOPBACK RUNNING  MTU:65536  Metric:1
                    RX packets:80 errors:0 dropped:0 overruns:0 frame:0
                    TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
                    collisions:0 txqueuelen:0 
                    RX bytes:5200 (5.0 KiB)  TX bytes:5200 (5.0 KiB)

lo:0      Link encap:Local Loopback  
                    inet addr:10.3.150.200  Mask:255.255.255.255
                    UP LOOPBACK RUNNING  MTU:65536  Metric:1

4、配置主機-負載均衡的keepalived.conf配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
   [email protected]
}
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id lb01
}

vrrp_instance VI_1 {
    state MASTER       #指定Keepalived角色,MASTER為主
    interface eth1         #Keepalived 綁定的網絡
    virtual_router_id 53    #虛擬路由編號,主備必須要一致
    priority 150      #定義優先級,數字越大,優先級越高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 3333
    }
    virtual_ipaddress {
        10.3.150.200/24 dev eth1 label eth1:1     #定義虛擬IP(VIP)為10.3.150.200   
    }
}
# 定義對外提供服務的LVS的VIP以及port
virtual_server 10.3.150.200 80 {  
    delay_loop 6 # 設置健康檢查時間,單位是秒                    
    lb_algo wrr # 設置負載調度的算法為wlc                   
    lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式   
    nat_mask 255.255.255.0                
    persistence_timeout 0          
    protocol TCP                  
    real_server 10.3.150.198 80 {  # 指定real server1的IP地址
        weight 3   # 配置節點權值,數字越大權重越高              
        TCP_CHECK {  
        connect_timeout 10         
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
    }  
    real_server 10.3.150.199 80 {  # 指定real server2的IP地址
        weight 3  # 配置節點權值,數字越大權重越高  
        TCP_CHECK {  
        connect_timeout 10  
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
     }  
} 

5、配置備機-負載均衡的keepalived.conf配置文件

與主機-負載均衡一致,只需修改以下兩處:
1、state MASTER   改為 state BACKUP
2、priority 150    改為  priority 100

6、啟動兩臺負載均衡的keepalived服務

[root@lb01 keepalived]# service keepalived start

在主機-負載均衡器上,查看是否獲取了VIP(10.3.150.200)
[root@lb01 keepalived]# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:50:56:AA:B1:25  
                    inet addr:10.3.150.196  Bcast:10.3.150.255  Mask:255.255.255.0
                    inet6 addr: fe80::250:56ff:feaa:b125/64 Scope:Link
                    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                    RX packets:89077 errors:0 dropped:0 overruns:0 frame:0
                    TX packets:14028 errors:0 dropped:0 overruns:0 carrier:0
                    collisions:0 txqueuelen:1000 
                    RX bytes:7242746 (6.9 MiB)  TX bytes:982746 (959.7 KiB)

eth1:1    Link encap:Ethernet  HWaddr 00:50:56:AA:B1:25  
                    inet addr:10.3.150.200  Bcast:0.0.0.0  Mask:255.255.255.0
                    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
                    inet addr:127.0.0.1  Mask:255.0.0.0
                    inet6 addr: ::1/128 Scope:Host
                    UP LOOPBACK RUNNING  MTU:65536  Metric:1
                    RX packets:80 errors:0 dropped:0 overruns:0 frame:0
                    TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
                    collisions:0 txqueuelen:0 
                    RX bytes:5120 (5.0 KiB)  TX bytes:5120 (5.0 KiB)

四、驗證故障切換是否成功

1、訪問VIP,是否能正常訪問得到web01和web02的內容(web01和web02為不一致的靜態文件內容,以方便區別,檢查是否生效)。

2、停止web01服務,訪問VIP,看是否還能正常訪問web02的內容,同時又不會提示web01無法訪問的錯誤信息,因LVS能做端口健康檢查。

3、啟動web01,訪問VIP,是否可以同時訪問web01和web02的內容。

4、停止lb01主機-負載均衡的keepalived服務,檢查VIP是否漂移到備機-負載負載器的主機上,同時訪問VIP,是否正常訪問web01與web02的內容。

5、啟動lb01主機-負載均衡的keepalived服務,檢查VIP是否漂移到主機-負載均衡器,同時訪問VIP,是否能正常訪問web01與web02的內容。

Keepalived + LVS 實現負載均衡