keepalived+LVS+nginx搭建高可用負載均衡(二)

操作系統:CentOS-7.8
keepalived版本:2.0.20
nginx版本:1.18.0

本篇是《keepalived+LVS+nginx搭建高可用負載均衡》的第二篇,上一篇主要是介紹了這些組件和基礎知識,以及基礎演示,本篇將把這三個組件進行結合做一個演示,對這三個組件不熟悉的朋友請先看上一篇文章《keepalived+LVS+nginx搭建高可用負載均衡(一)》傳送門

一、準備工作

1.環境說明

該演示總共需要4臺服務機器(可使用虛擬機),分別取名字:LVS1,LVS2,Server1、Server2。每臺機器說明如下:

  • LVS1:LVS複雜均衡調度器,安裝keepalived,配置LVS調度策略。真實IP:192.168.56.121,keepalived主實例虛擬IP:192.168.56.131,keepalived備用實例虛擬IP:192.168.56.132

  • LVS2:LVS複雜均衡調度器,安裝keepalived,配置LVS調度策略,真實IP:192.168.56.122,keepalived主實例虛擬IP:192.168.56.132,keepalived備用實例虛擬IP:192.168.56.131

  • Server1:服務器集羣服務器,安裝nginx,keepalived。真實IP:192.168.56.101,keepalived主實例虛擬IP:192.168.56.121,keepalived備用實例虛擬IP:192.168.56.122,迴環虛擬IP(對外隱藏):192.168.56.131、192.168.56.132

  • Server2:服務器集羣服務器,安裝nginx,keepalived。真實IP:192.168.56.102,keepalived主實例虛擬IP:192.168.56.122,keepalived備用實例虛擬IP:192.168.56.121,迴環虛擬IP(對外隱藏):192.168.56.131、192.168.56.132

注意:兩臺LVS1服務器構成雙主熱備作爲負載均衡,兩臺Server作爲真實服務器提供nginx的web服務採用雙主熱備。(更深層次可以將nginx集羣繼續作爲負載均衡集羣,搭建多級負載均衡,在這裏就不進行這種拓展了)

2.服務主機關係圖

如下圖即爲本次演示的一個主機關係圖,從圖中可以清晰看出四臺服務器的關係。

lvs_keepalive_nginx

二、配置與操作

1.準備工作

nginx活躍檢測腳本

由於nginx和keepalived是兩個獨立的服務,默認情況下keepalived僅僅是檢測集羣中節點的keepalived服務是否存活來判斷主機是否正常服務。而在keepalived服務正常,而nginx服務down掉了,這種情況下,keepalived服務是不會判定當前服務器宕機,也就不會進行虛擬IP綁定轉移,所以此時使用虛擬IP訪問服務會訪問到nginx服務不可用的服務器,爲了解決這種情況,我們需要配置keepalived使其可以堅持nginx狀態來決定是否進行虛擬IP綁定轉移。

nginx服務活躍檢測腳本如下,建議將該腳本放在keepalived的配置目錄便於配置使用。


#!/bin/bash

#判斷當前服務器是否有nginx的進程
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
	   #若沒有則嘗試啓動nginx
        /usr/local/nginx/sbin/nginx
        sleep 5
        #繼續判斷當前服務器是否有nginx進程
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        		#若仍然沒有nginx進程,則停止當前節點的keepalived
                systemctl stop keepalived
        fi
fi

腳本寫好先放着,後面再配置使用

配置真實服務器的迴環虛擬IP

由於我們演示lvs是使用DR的工作模式,所以在server1和server2上需要將虛擬IP:192.168.56.131和192.168.56.132綁定在兩臺主機的lo迴環接口上,具體理論請參加上一篇文章《keepalived+LVS+nginx搭建高可用負載均衡(一)》

server1和server分別在 /etc/sysconfig/network-scripts目錄下,將ifcfg-lo複製兩份

cd /etc/sysconfig/network-scripts

cp ifcfg-lo ifcfg-lo:1

cp ifcfg-lo ifcfg-lo:2

然後編輯網絡配置文件


#ifcfg-lo:1配置如下
DEVICE=lo:1
IPADDR=192.168.56.131
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

#ifcfg-lo:2配置如下
DEVICE=lo:2
IPADDR=192.168.56.132
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

修改完成後,重啓網絡服務:systemctl restart network.service

隨後使用:ifconfig lo:1 和 ifconfig lo:2 兩個命令即可查看配置的虛擬IP

之後Server1和Server2增加路由(單次生效):route add -host 192.168.56.131 dev lo:1 和 route add -host 192.168.56.132 dev lo:2

2.nginx+keepalive雙主熱備配置

首先配置Server1的keepalived,我的配置文件在/etc/keepalived/keepalived.conf,該配置文件我僅說明新增的一些屬性含義,沒有說明的屬性含義,請參加上一篇文章《keepalived+LVS+nginx搭建高可用負載均衡(一)》。Server1的配置如下


! Configuration File for keepalived

global_defs {
   router_id keep_101
}

#nginx活躍檢測腳本配置
vrrp_script check_nginx_alive{
    #腳本所在位置
    script "/etc/keepalived/check_nginx_auto_pull.sh"
    #腳本執行間隔
    interval 3
    #腳本執行後權重增加1
    weight 1
}

#使用虛擬Ip:192.168.56.111的主實例
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        #兩個實例使用了不同的密碼
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.56.111
    }
    #引用上方配置的腳本,檢測nginx是否活躍
    track_script{
        check_nginx_alive
    }
}

#使用虛擬Ip:192.168.56.112的備用實例
vrrp_instance VI_2 {
    state BACKUP
    interface enp0s8
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        #兩個實例使用了不同的密碼
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.56.112
    }
    #引用上方配置的腳本,檢測nginx是否活躍
    track_script{
        check_nginx_alive
    }
}


Server2的keepalived配置與Server1的keepalived配置類似,不同點就是主備實例調換,Server2的配置如下


! Configuration File for keepalived

global_defs {
   router_id keep_102
}


vrrp_script check_nginx_alive{
    script "/etc/keepalived/check_nginx_auto_pull.sh"
    interval 3
    weight 1
}

#使用虛擬Ip:192.168.56.111的備用實例
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.56.111
    }
    track_script{
        check_nginx_alive
    }
}

#使用虛擬Ip:192.168.56.112的主實例
vrrp_instance VI_2 {
    state MASTER
    interface enp0s8
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.56.112
    }
    track_script{
        check_nginx_alive
    }
}

配置完成後啓動keepalived和nginx,這樣配置完成後就保證了nginx的高可用,同時nginx可以作爲負載均衡繼續給更多的集羣進行負載均衡。

3.LVS+keepalived雙主熱備配置

首先配置LVS1的keepalived,keepalived的配置中集成了對lvs的管理,所以在使用LVS+keepalived的時候,不用再使用上一篇文章講的用命令配置了,我們直接將lvs的配置寫在keepalived的配置文件中即可。

我僅說明新增的一些屬性含義,沒有說明的屬性含義,請參加上一篇文章《keepalived+LVS+nginx搭建高可用負載均衡(一)》

LVS1服務器的keepalived配置如下:


! Configuration File for keepalived

global_defs {
   router_id keep_101
}


vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 3333
    }
    virtual_ipaddress {
        192.168.56.131
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface enp0s8
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4444
    }
    virtual_ipaddress {
        192.168.56.132
    }
}

#lvs虛擬服務器,虛擬IP 端口號
virtual_server 192.168.56.131 80 {
    
    delay_loop 6
    #負載均衡策略,wrr代表加權輪詢
    lb_algo wrr
    #lvs工作模式,DR模式
    lb_kind DR
    #連接持久化,超時時間,單位:秒
    persistence_timeout 5
    #連接類型,TCP
    protocol TCP

    #真實服務器信息,真實服務器IP 端口
    real_server 192.168.56.111 80 {
    	   #當前服務器的權重
        weight 1
        #TCP連接的檢查配置
        TCP_CHECK {
        		#檢查端口爲 80
                connect_port 80
                #檢查連接超時時間,單位:秒
                connect_timeout 2
                #超時後重試次數
                nb_get_retry 2
                #被認爲宕機後,間隔多久繼續重試,單位:秒
                delay_before_retry 3
        }
    }

    real_server 192.168.56.112 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 2
                nb_get_retry 2
                delay_before_retry 3

        }
    }

}

virtual_server 192.168.56.132 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 5
    protocol TCP

    real_server 192.168.56.111 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 2
                nb_get_retry 2
                delay_before_retry 3
        }
    }

    real_server 192.168.56.112 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 2
                nb_get_retry 2
                delay_before_retry 3

        }
    }

}

LVS2的keepalived的配置與LVS1的不同之處僅在於keepalived的實例配置不同,lvs虛擬服務配置相同,所以我在下面僅列出不同的配置,相同的配置就不在寫出來,LVS2服務器的keepalived的不同的配置如下:


! Configuration File for keepalived

global_defs {
   router_id keep_101
}

#主要是連個keepalived實例的主備配置與lvs1中配置相反

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 3333
    }
    virtual_ipaddress {
        192.168.56.131
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface enp0s8
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4444
    }
    virtual_ipaddress {
        192.168.56.132
    }
}

#下面是lvs虛擬服務器配置,這裏就不在貼代碼了

經過以上配置後,啓動lvs1和lvs2兩臺服務器的keepalived

4.驗證

通過瀏覽器訪問效果如下

瀏覽器訪問nginx

查看兩條lvs上的虛擬服務狀態

ipvsadm -Ln查看信息

總結

到此一個實驗keepalived+nginx+lvs搭建的高可用負載服務就完成了,在本演示案例中是將nginx作爲web服務來使用的,其實在生成中可以將nginx作爲層負載均衡是用,這樣這就是一個基於lvs四層負載+nginx七層負載的高可用負載均衡集羣,更多的搭配架構還需在實際使用時多探索,本演示案例僅僅是提供了一個簡單思路,便於在學習的時候,可以快速理解

個人公衆號【愛做夢的錘子】,全網同id,個站 http://te-amo.site,歡迎關注,裏面會分享更多有用知識,還有我的私密照片

覺得不錯就點個贊叭QAQ

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章