1. 程式人生 > >lvs keepalived 負載均衡器

lvs keepalived 負載均衡器

lvs keepalived

lvs keepalived 實現負載均衡

環境

主機名 IP地址 os 軟件
lvs01 172.16.50.104 CentOS 7.4.1708 ipvsadm keepalived master
lvs02 172.16.50.111 CentOS 7.4.1708 ipvsadm keepalived backup
nginx01 172.16.50.124 CentOS 7.4.1708 nginx
nginx02 172.16.50.112 CentOS 7.4.1708 nginx

Vip地址 172.16.50.230

部署

Nginx 部署

主機nginx01,nginx02

yum install nginx -y

啟動

systemctl enable nginx && systemctl start nginx

主機nginx01

echo "124" > /usr/share/nginx/html/index.html 

主機nginx02

echo "112" > /usr/share/nginx/html/index.html 

創建realserver.sh腳本,內容如下:

#!/bin/bash
#description: Config realserver

VIP=172.16.50.230

. /etc/rc.d/init.d/functions
case "$1" in
start)
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /sbin/route add -host $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)
       /sbin/ifconfig lo:0 down
       /sbin/route del $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

添加執行權限及運行腳本

chmod +x realserver.sh && ./realserver.sh start
lvs,keepalived 部署

開啟路由轉發

臨時生效

echo "1" > /proc/sys/net/ipv4/ip_forward

永久生效,編輯配置文件/etc/sysctl.conf添加

net.ipv4.ip_forward= 1
sysctl -p #生效

主機 lvs01,lvs02

yum install ipvsadm keepalived -y

主機lvs01編輯配置文件/etc/keepalived/keepalived.conf

! Configuration File for keepalived

! 全局配置
global_defs {
   ! 標識
   router_id keep-50.104
}

! VRRPD配置
vrrp_instance VI_1 {
    ! 指定該keepalived節點的初始狀態:MASTER|BACKUP
    state MASTER
    ! vrrp實例綁定的接口,用於發送VRRP包
    interface eth0
    ! 指定VRRP實例ID,範圍是0-255,主備的virtual_router_id 必須相同
    virtual_router_id 51
    ! 指定優先級,優先級高的將成為MASTER
    priority 100
    ! 指定發送VRRP通告的間隔,單位秒
    advert_int 1
    authentication {
        ! 指定認證方式:PASS|AH
        auth_type PASS
        ! 指定認證所使用的密碼,最多8位
        auth_pass 1111
    }
    virtual_ipaddress {
        ! 指定VIP地址
        172.16.50.230
    }
}

virtual_server 172.16.50.230 80 {
    ! 健康檢查的時間間隔
    delay_loop 6
    ! LVS調度算法:rr|wrr|lc|wlc|lblc|sh|dh
    lb_algo rr
    ! LVS模式:NAT|DR|TUN
    lb_kind DR
    ! 持久化超時時間,單位秒
    persistence_timeout 50
    ! 協議: TCP|UDP|SCTP
    protocol TCP

    ! 後端服務器
    real_server 172.16.50.124 80 {
        ! 權重
        weight 1
        ! 健康檢查方式
        TCP_CHECK {
            ! 超時時間,單位秒
            connect_timeout 3
            ! 嘗試次數
            nb_get_retry 3
            ! 在嘗試之前延遲多少秒
            delay_before_retry 10
            ! 嘗試間隔
            delay_before_retry 2
        }
    }

    real_server 172.16.50.112 80 {
        ! 權重
        weight 1
        ! 健康檢查方式
        TCP_CHECK {
            ! 超時時間,單位秒
            connect_timeout 3
            ! 嘗試次數
            nb_get_retry 3
            ! 在嘗試之前延遲多少秒
            delay_before_retry 10
            ! 嘗試間隔
            delay_before_retry 2
        }
    }
}

主機lvs02 參考主機lvs01配置文件

修改部分

router_id keep-50.111
state BACKUP
priority 90

啟動

systemctl enable keepalived && systemctl start keepalived

測試

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.50.230:80 rr persistent 50
  -> 172.16.50.112:80             Route   1      0          0         
  -> 172.16.50.124:80             Route   1      0          0         
curl 172.16.50.230
112
  1. 停止主機nginx02 Nginx 服務

    觀察主機lvs01 keepalived日誌

    lvs01keepalived[10879]: TCP connection to [172.16.50.112]:80 failed.
    Keepalived_healthcheckers[10879]: TCP connection to [172.16.50.112]:80 failed.
    Keepalived_healthcheckers[10879]: Check on service [172.16.50.112]:80 failed after 1 retry.
    Keepalived_healthcheckers[10879]: Removing service [172.16.50.112]:80 from VS [172.16.50.230]:80
    curl 172.16.50.230
    124
  2. 停止主機lvs01 Keepalived 服務

    觀察主機lvs02 Keepalived 日誌

    Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Transition to MASTER STATE
    Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Entering MASTER STATE
    Keepalived_vrrp[10774]: VRRP_Instance(VI_1) setting protocol VIPs.
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
    Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230

    Vip地址漂移到了主機 lvs02

lvs keepalived 負載均衡器