環境準備
Centos7系統,后端服務器提供web服務。
地址規劃:
- VS1: 172.18.51.7
- VS2:172.17.51.77
- RS1:172.18.51.74
- RS2:172.18.51.75
- VirtualIP:172.18.51.82
拓撲圖:
原理:nginx是高度模塊化的應用程序,其中nginx_proxy模塊即可實現負載均衡,將前端的用戶請求通過調度算法分攤在后端的真實主機,達到均衡的效果。這里使用upstream模塊將前端請求轉發至后端;利用keepalived配置主備服務器,對各RS的健康狀態進行檢測,通過共用的虛擬IP地址對外提供服務。
RS:
提供httpd服務,定義web主頁,并啟動服務
RS的預配置腳本:
vim setparam.sh #!/bin/bash # vip=172.18.51.100 mask='255.255.255.255' case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig lo:0 $vip netmask $mask broadcast $vip up route add -host $vip dev lo:0 ;; stop) ifconfig lo:0 down echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ;; *) echo "Usage $(basename $0) start|stop" exit 1 ;; esac
VS:
當所有real server宕掉時,sorry server頂替,定義其主頁,啟動服務(注意修改服務端口為8080)
開啟nginx的upstream模塊,配置反向代理,啟動服務(nginx占用80端口)
/etc/nginx/nginx.conf
upstream websers {
server 172.18.51.74:80;
server 172.18.51.75:80;
server 127.0.0.1:8080 backup; #設置其應急響應服務器
/etc/nginx/conf.d/default.conf
location / { root /usr/share/nginx/html; proxy_pass http://websers; #代理至后端主機 index index.html index.htm; }
配置keepalived配置文件:
vs1和vs2的配置文件,主備模式、優先級不一樣,其它地方一致;
/etc/keepalived/keepalived.con
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 vrrp_mcast_group4 224.0.101.24 } vrrp_script chk_down { #存在文件時,檢測成功,即執行降級;否則不存在,全部退出;實現服務器切換 script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" interval 1 weight -5 } vrrp_script ngxstatus { #腳本,健康狀態檢測,檢測nginx是否存活 script "killall -0 nginx && exit 0 || exit 1" interval 1 weight -5 } vrrp_instance sr1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 #nopreempt #非搶占模式(默認搶占模式) authentication { auth_type PASS auth_pass rE+szbuO } track_script { #腳本調用 chk_down ngxstatus } virtual_ipaddress { 172.18.51.82/16 dev ens33 label ens33:0 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" #此處調用腳本實現發郵件給管理員 }
調用腳本
[root@centos703 keepalived]# vim notify.sh #!/bin/bash # contact='root@localhost' notify() { mailsubject="vrrp:$(hostname) to be $1" mailbody="$(hostname) to be $1,vrrp transition, $(date)." echo "$mailbody" | mail -s "$mailsubject" $contact } case $1 in master) notify master ;; backup) notify backup ;; fault) notify fault ;; *) echo "Usage: $(basename $0) {master|backup|fault}" exit 1 ;; esac ~
客戶端測試:
模擬服務器正常,一臺web服務器宕機,兩臺都宕機訪問情況:
配置vrrp實例后將遵循自動生成VIP地址,主服務器故障時自動實現地址漂移
nginx健康狀態檢測腳本當nginx宕機時,則會自動將權重減去5,VIP地址漂移至優先級高的主機
原創文章,作者:Mr-Xiao,如若轉載,請注明出處:http://www.www58058.com/76023