操作系統: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.服務主機關係圖
如下圖即爲本次演示的一個主機關係圖,從圖中可以清晰看出四臺服務器的關係。
二、配置與操作
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.驗證
通過瀏覽器訪問效果如下
查看兩條lvs上的虛擬服務狀態
總結
到此一個實驗keepalived+nginx+lvs搭建的高可用負載服務就完成了,在本演示案例中是將nginx作爲web服務來使用的,其實在生成中可以將nginx作爲層負載均衡是用,這樣這就是一個基於lvs四層負載+nginx七層負載的高可用負載均衡集羣,更多的搭配架構還需在實際使用時多探索,本演示案例僅僅是提供了一個簡單思路,便於在學習的時候,可以快速理解
個人公衆號【愛做夢的錘子】,全網同id,個站 http://te-amo.site,歡迎關注,裏面會分享更多有用知識,還有我的私密照片
覺得不錯就點個贊叭QAQ