Linux集群之keepalive+Nginx


集群從功能實現上分高可用和負載均衡:

高可用集群,即“HA"集群,也常稱作“雙機熱備”。

當提供服務的機器宕機,備胎將接替繼續提供服務;

實現高可用的開源軟件有:heartbeat、keepalived。,keepalived還有負載均衡的功能。

核心原理都是通過心跳線連接兩台服務器,一台用於提供服務,當這台機子宕機了,另外一台服務器頂替。;

  1. 負載均衡集群,需要有一台服務器作為分發器,它負責把用戶的請求分發給后端的服務器處理,在這個集群里,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少為2台,實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F5、Netscaler。

keepalivied工作原理:

keepalived通過VRRP(Virtual Router Redundancy Protocl,虛擬路由冗余協議)來實現高可用。

  1. 它是實現路由高可用的一種通信協議,在這個協議里會將多台功能相同的路由器組成一個小組,這個小組里會有1個master角色和N(N>=1)個backup角色。
  2. master會通過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認為master宕機了。此時就需要根據各個backup的優先級來決定誰成為新的mater。
  3. Keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。

環境: master:192.168.123.128 keepalive+Nginx

   backup:192.168.123.129 keepalive+Nginx

VIP(Virtual IP):192.168.123.100   虛擬IP;

nginx的安裝 在這里就不說了,這里主要說的不是這個;

安裝keepalive: 

yum install -y keepalived

修改配置文件:

vim /etc/keepalived/keepalived.conf

keepalived.conf內容如下:

global_defs {
   notification_email {
     1012447978@qq.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   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 gys
    }
    virtual_ipaddress {
        192.168.123.100        
    }

    track_script{
        chk_nginx
    }
}
View Code

自定義腳本,監控Nginx服務:

vim /usr/local/sbin/check_ng.sh

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,並且再次檢測進程數量
# 如果還為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
View Code

附權,否則keepalived無法調用

chmod 777 /usr/local/sbin/check_ng.sh

啟動keepalived

systemctl start keepalived

根據上面的配置文件;如果本機的Nginx沒有啟動,keepalived啟動的時候會把Nginx拉起來。

查看nginx是否起成功

ps -ef|grep nginx

查看keepalived是否起成功

ps -ef|grep keepalived

Master配置完成后,129上配置backup;

vim /etc/keepalived/keepalived.conf

內容如下:

global_defs {
   notification_email {
     gys@qq.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   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
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass gys
    }
    virtual_ipaddress {
        192.168.123.100        
    }

    track_script{
        chk_nginx
    }
}
View Code

監控腳本內容如下

#!/bin/bash
# 時間變量  用於記錄日志
d=`date --date today +%Y%m%d_%H:%M:%S`
# 計算Nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
# 如果進程為0,則啟動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
View Code

附權:

chmod 777 /usr/local/sbin/check_ng.sh

啟動keepalived

systemctl start keepalived

本實例中,可以模擬出master宕機后,訪問vip地址,可以過度到backup上,但是無法通過keepalived來拉起Nginx。

如果有人知道怎么回事,麻煩告訴我一聲;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM