Nginx keepalive 負載均衡

2022-03-23 15:22:49 字數 3576 閱讀 2900

兩台相同配置的web

用途ip

master

192.168.1.100

backup

192.1681.101

兩台接入伺服器分別安裝nginx和keepalived:

準備依賴包:

安裝nginx

安裝keepalive

tar zxvf keepalived-1.2.7

.tar.gz

cd keepalived-1.2.7

./configure

make

make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/sbin/keepalived /usr/sbin/

加入啟動服務

echo "

/usr/local/nginx/sbin/nginx

" >> /etc/rc.local

echo

"/etc/init.d/keepalived start

" >> /etc/rc.local

3.1配置nginx

兩台接入伺服器的nginx的配置完全一樣,主要是配置/usr/local/nginx/conf/nginx.conf的http。其中多網域名稱指向是通過虛擬主機(配置http下面的server)實現;同一網域名稱的不同虛擬目錄通過每個server下面的不同location實現;到後端的伺服器在http下面配置upstream,然後在server或location中通過proxypass引用。要實現前面規劃的接入方式,http的配置如下:

驗證方法:

首先用ip訪問前表中各個應用伺服器的url

再用網域名稱和路徑訪問前表中各個應用系統的網域名稱/虛擬路徑

3.2配置keepalived

master:

! configuration file for

keepalived

global_defs

vrrp_instance vi_1

virtual_ipaddress

}backup:

! configuration file for

keepalived

global_defs

vrrp_instance vi_1

virtual_ipaddress

}

驗證:先後在主、從伺服器上啟動keepalived: /etc/init.d/keepalived start

在主伺服器上檢視是否已經繫結了虛擬ip: ip addr

停止主伺服器上的keepalived: /etc/init.d/keepalived stop 然後在從伺服器上檢視是否已經繫結了虛擬ip:

啟動主伺服器上的keepalived,看看主伺服器能否重新接管虛擬ip

3.3讓keepalived監控nginx的狀態

經過前面的配置,如果主伺服器的keepalived停止服務,從伺服器會自動接管vip對外服務;一旦主伺服器的keepalived恢復,會重新接管vip。 但這並不是我們需要的,我們需要的是當nginx停止服務的時候能夠自動切換。

keepalived支援配置監控指令碼,我們可以通過指令碼監控nginx的狀態,如果狀態不正常則進行一系列的操作,最終仍不能恢復nginx則殺掉keepalived,使得從伺服器能夠接管服務。

如何監控nginx的狀態

最簡單的做法是監控nginx程序,更靠譜的做法是檢查nginx埠,最靠譜的做法是檢查多個url能否獲取到頁面。

如何嘗試恢復服務

如果發現nginx不正常,重啟之。等待3秒再次校驗,仍然失敗則不再嘗試。

根據上述策略很容易寫出監控指令碼。這裡使用nmap檢查nginx埠來判斷nginx的狀態,記得要首先安裝nmap。監控指令碼如下:

#!/bin/bash

# check nginx server status

nginx=/usr/local/nginx/sbin/nginx

port=8080

nmap localhost -p $port | grep "

$port/tcp open

"#echo $?

if [ $? -ne 0

];then

$nginx -s stop

$nginx

sleep

3nmap localhost -p $port | grep "

$port/tcp open

"[ $? -ne 0 ] && /etc/init.d/keepalived stop

fi

不要忘了設定指令碼的執行許可權,否則不起作用。

假設上述指令碼放在/opt/chk_nginx.sh,則keepalived.conf中增加如下配置:

主keepalived

例子:! configuration file for

更進一步,為了避免啟動keepalived之前沒有啟動nginx , 可以在/etc/init.d/keepalived的start中首先啟動nginx:

start() 

retval=$?echo

[ $retval -eq 0 ] && touch /var/lock/subsys/$prog

}

負載均衡 nginx keepalive

主伺服器配置完後執行 service keepalived start開啟主檢視ip addr是否繫結主伺服器是否接管 service keepalived status檢視是否執行 service keepalived stop關閉主檢視ip addr是否繫結從伺服器是否接管 track scri...

Spring Cloud Ribbon實現負載均衡

之前文章 spring cloud 服務註冊和發現 spring cloud 服務端高可用 負載均衡在系統架構中是乙個非常重要的角色,在前面大型 架構學習總結中,可以看到,高可用,伸縮性,效能幾個架構要素中,負載均衡都有著很重要的地位,是系統壓力緩解,系統擴容的重要手段之一。一般來說,我們講的負載均...

nginx rsync inotify實現負載均衡

實驗環境 前端nginx ip 192.168.6.242,對後端的wordpress 做反向 實現負載均衡 後端nginx ip 192.168.6.36,192.168.6.205都部署wordpress,並使用相同的資料庫 安裝rsync和inotify 在後端的兩個wordpress上配置r...