nginx通過ngx_http_upstream_module可以實現七層http服務的負載均衡,同時還自帶RS的健康監測功能,但是也有弊端,nginx負載均衡器如果發生故障則整個集群失效,此文通過keepalived構建nginx負載均衡器的高可用集群。
一、實驗環境:
實驗需要4臺服務器:
nginx負載均衡器1:192.168.11.100
nginx負載均衡器2:192.168.11.101
nginx靜態網頁服務器1:192.168.11.201
nginx靜態網頁服務器2:192.168.11.202
拓撲如下:
二、實驗步驟:
負載均衡器配置:
- 安裝nginx和keepalived
yum install -y nginx keepalived
- 修改keepalived配置文件:
! 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 ? router_id node1 ? vrrp_mcast_group1 224.0.115.17 #組播ip地址# } #服務檢測腳本1:當/etc/keepalived目錄下存在down文件,則權重-5# vrrp_script chk_down { ? script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" ? interval 1 #每隔1秒檢測一次# ? weight -5 #權重減5# } vrrp_script chk_nginx { ? script "killall -0 nginx && exit 0 || exit 1" #檢測nginx進程是否存在# ? interval 1 ? weight -5 ? fall 2 #檢測兩次都不存在則降低權重# ? rise 1 #檢測一次存在則加權重# } vrrp_instance VI_1 { ? state MASTER ? interface ens33 ? virtual_router_id 1 ? ? ? priority 100 ? advert_int 1 ? authentication { ? ? ? auth_type PASS ? ? ? auth_pass hello ? } ? virtual_ipaddress { ? ? ? 192.168.11.250 label ens33:0 ? } ? #檢測chk_down和chk_nginx兩個腳本# ? track_script { ? ? ? chk_down ? ? ? chk_nginx ? } ? notify_master "/etc/keepalived/notify.sh master" ? notify_backup "/etc/keepalived/notify.sh backup" ? notify_fault "/etc/keepalived/notify.sh fault" } vrrp_instance VI_2 { ? state BACKUP ? interface ens33 ? virtual_router_id 2 ? priority 96 ? advert_int 1 ? authentication { ? ? ? auth_type PASS ? ? ? auth_pass world ? } ? virtual_ipaddress { ? ? ? 192.168.11.251 label ens33:1 ? ? ? ? ? } ? track_script { ? ? ? chk_down ? ? ? chk_nginx ? } ? #定義觸發通知腳本條件# ? notify_master "/etc/keepalived/notify.sh master" ? notify_backup "/etc/keepalived/notify.sh backup" ? notify_fault "/etc/keepalived/notify.sh fault" }
- 通知腳本內容如下:
#!/bin/bash # contact='root@localhost' #定義函數:當主次節點發生變更之后給root@localhost發郵件通知# notify() { ? ? ? local mailsubject="`hostname` to be $1,vip floating" ? ? ? local mailbody="`data +"%F %T"`:vrrp transition,`hostname` changed to be $1" ? ? ? 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
原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/79340