簡介:
在網站架構中,為了分散客戶端對服務器的訪問壓力,可以使用nginx作為反向代理。但是使用一個nginx作為代理服務器必定會面對單點故障的情況,所以一般使用多臺nginx反代服務器,而使用多臺nginx服務器還要面對如何協調調度的問題。在此,我給大家介紹使用keepalive協調調度nginx反代服務器的方法。
keepalive簡介
說到keepalive就要說到他的實現核心——VRRP協議。VRRP即虛擬路由器冗余協議,最初是為了解決多個路由器熱備份而制定的。它是通過主路由器定時在網絡中發送主路由器信息,通知各個備路由器,當備路由器接收不到信息就會通過優先級競選成為主路由器。
VRRP的優先級范圍是0-255,可配置范圍1-254,其中0給路由器放棄MASTER位置時候使用,255保留給IP地址的擁有者使用。如果路由器的IP地址為虛擬IP地址時,只要其工作正常,則為MASTER路由器。
VRRP提供了三種認證方式:
1 無認證;
2 簡單字符認證:不能超過8個字符;
3 MD5認證。
實驗器材
lvs1 Centos7.3 172.18.55.74
lvs2 Centos7.3 172.18.55.75
web1 Centos6.8 172.18.55.61
web2 Centos7.3 172.18.55.71
實驗步驟:
1 安裝nginx反向代理服務
2 安裝keepalive服務
實驗過程:
1 安裝nginx反向代理服務
為了簡便,這里分別在web1和web2上使用yum源安裝的方式
#yum install –y nginx
修改nginx的配置文件
# vim /etc/nginx/nginx.conf
增加服務器組
upstream websvrs { server 172.18.55.61:80; server 172.18.55.71:80; server 127.0.0.1:8080 backup; #sorry Server }
增加sorry server配置
server { listen 8080; root /etc/nginx/html; index sorry.html; location / { } }
增加sorry server頁面文件
vim /etc/nginx/html/sorry.html <h1> Sorry !!! <h1>
2 安裝keepalive服務
使用yum安裝
# yum install –y keepalived
修改配置文件
# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_MASTER #備服務器LVS_BACKUP vrrp_mcast_group4 224.0.109.55 #組播地址,一個虛擬路由器組設置相同 } vrrp_instance VI_1 { state MASTER #備服務器BACKUP interface ens33 #網卡名 virtual_router_id 155 #虛擬路由器ID,主備設置相同 priority 100 #優先級1-254,備服務器98 advert_int 1 #網絡通知時間間隔 authentication { auth_type PASS #認證方式為密碼 auth_pass GOOD #密碼為GOOD,最多8位 } virtual_ipaddress { 172.18.55.100/16 dev ens33 #指定虛擬IP地址和接口網卡 } track_script { ngxstatus #調用nginx狀態監測腳本 } notify_backup "/etc/keepalived/notify.sh backup" #如果nginx的狀態改為了BACKUP,則執行此腳本 } vrrp_script ngxstatus { #nginx狀態監測腳本 script "killall -0 nginx && exit 0 || exit 1" interval 1 weight -5 }
增加配置nginx重啟腳本,省略了非必要步驟
vim /etc/ keepalived/notify.sh #!/bin/bash myservice='nginx.service' case $1 in backup) systemctl restart $myservice;; esac
原創文章,作者:realmaster,如若轉載,請注明出處:http://www.www58058.com/75869