準備:linux
兩臺虛擬機兩個ip131和133,131做爲master,133做爲backupnginx
下載keeplived和nginx,爲啥要爲nginx服務實現高可用,在生產環境中,不少企業把nginx當作負載均衡的分發器,它絕對不能出現故障,因此爲它實現高可用vip=100vim
下載:bash
兩臺機器都執行yum install -y keepalived負載均衡
兩臺機器都安裝nginx,其中131上已經編譯安裝過nginxless
133上須要yum安裝nginx: yum install -y nginxspa
開始配置backup131:日誌
設置vip=100,在keeplived中定義,兩臺機器主從,主掛了從起來啓動nginx提供服務,那麼從nginx時訪問那個ip,解析ip解析到哪兒,從起來從的ip是什麼,須要定義共有ipcode
vim /etc/keepalived/keepalived.conf global_defs { notification_email { aming@aminglinux.com } notification_email_from root@aminglinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" interval 3 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.188.100 } track_script { chk_nginx } }
131上nginx編輯監控腳本:router
vim /usr/local/sbin/check_ng.sh #!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量, #若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived if [ $n -eq "0" ]; then /etc/init.d/nginx start n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi
腳本中最後關閉主的keepalived是爲了防止出現腦裂,當主的keepalived停了從的服務會自動起來,若是住的keepalived沒有被殺死從的keepalived也起來了,會致使主從爭搶資源爭搶vip由於都監聽vip,域名訪問時不知道訪問那個機器會出現紊亂,此狀況不容許發生。
chmod 755 /usr/local/sbin/check_ng.sh 這裏的這個文件本身定義
systemctl start keepalived 131啓動服務
查看是否啓動:
ps aux | grep keep 啓動起來了
ps aux | grep nginx 也啓動了
/etc/init.d/nginx stop 如今手動停掉nginx服務
繼續查看nginx服務是否會自動加載看nginx日誌,less /var/log/messages
開始配置backp133:
首先檢查主從防火牆,selinux和firewalld等關閉掉
selinux永久關閉 vi /etc/selinux/config selinux修改此處爲disabled,reboot重啓生效 關閉firewalld: systemctl disable firewalled 先暫停,不讓開機啓動 systemctl stop firewalld 關閉服務 關閉iptables: systemctl disable iptables systemctl stop iptables
配置133keepalived文件:
vim /etc/keepalived/keepalived.conf global_defs { notification_email { aming@aminglinux.com } notification_email_from root@aminglinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" interval 3 } vrrp_instance VI_1 { state BACKUP #修改第一處,變成從 interface ens33 virtual_router_id 51 priority 90 #權重90,其餘地方都不變 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.188.100 } track_script { chk_nginx } }
編寫133nginx監控腳本
vim /usr/local/sbin/check_ng.sh #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量, #若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived if [ $n -eq "0" ]; then systemctl start nginx n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi
此時關閉131nginx會自動重啓
此時訪問100會訪問到131上去,這裏並無負載均衡
關閉131的keepalived,133的keepalived啓動進入工做狀態