高可用實例


 

1.關於高可用
配置負載均衡時,請求通過nginx分發到多個tomcat;
如果其中一個tomcat宕機,將不會被分發請求;
這樣保證了穩定性;
但是,nginx也有宕機的可能,會導致請求無法到達tomcat;
配置高可用集群就是為了解決這一問題,也就是nginx宕機了還能正常完成請求;
 
簡單的高可用:
    兩台nginx,nginx1作為主服務器,nginx2作為從服務器;
    當請求時,首先到達主服務器,然后主服務器分發到多個tomcat中;
    當主服務器宕機時,會自動切換到從服務器;從服務器也可以把請求轉發到多個tomcat中;
    這樣就達到了高可用效果;
 
高可用需求:多個nginx、keepalived、虛擬ip;
 
關於keepalived:
    作用是通過腳本來檢測當前的nginx是否宕機;如果還活着就繼續訪問,否則切換到另備份nginx服務器;
    
關於虛擬ip:
    高可用的多個nginx服務器ip不同,因此需要對外提供一個虛擬ip;
    通過虛擬ip來綁定服務器的ip來進行訪問;
    虛擬ip首先與主服務器綁定,當主服務器掛掉時,會被keepalived檢測到,keepalived會將虛擬ip綁定到備份服務器;
    nginx接收真實請求時相對更容易掛掉,而keepalive沒那么容易掛掉;
 
總之高可用就是我的服務器掛掉,我的系統依然可以完成請求過程; 
 
2.配置高可用的准備工作
1)准備兩個服務器(比如兩個虛擬機 ps:因為電腦太差帶不動兩個虛擬機就不演示了)
 
2)在兩個服務器中都裝上nginx
 
3)在兩台服務器中安裝keepalived
yum安裝命令:
yum install keepalived –y
 
4)主從配置
安裝完成后,在/etc/keepalived目錄下可以找到 keepalived.conf
 
1】配置keepalived.conf
global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.17.129
    smtp_connect_timeout 30
    router_id LVS_DEVEL
}
vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"
    interval 2 #(檢測腳本執行的間隔)
    weight 2
}
vrrp_instance VI_1 {
    state BACKUP # 備份服務器上將 MASTER 改為 BACKUP
    interface ens33 //網卡
    virtual_router_id 51 # 主、備機的 virtual_router_id 必須相同
    priority 90 # 主、備機取不同的優先級,主機值較大,備份機值較小
    advert_int 1
    authentication {    #權限校驗的方式,這里用的是密碼,密碼為1111
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.17.50 // VRRP H 虛擬地址
    }
}
 
global_def    ->全局定義;主要的是router_id;
    router_id的值為服務器的名字;
    服務器的名字可在etc/host文件中查看;
    
vrrp_script chk_http_port    ->檢測腳本及其權重參數;
    script的值為腳本路徑;
    interval位腳本檢測間隔,如果值為2表示每隔2秒檢測一次;
    weight表示權重設置的值;例如:如果weigth的值為-10,當服務器掛掉腳本條件成立時,將服務器的權重降低10;
vrrp_instance VI_1    ->虛擬ip的配置;
    state為狀態,如果是主服務器為MASTER,如果是從服務器用BACKUP;
    interface網卡,在哪個網卡上綁定虛擬ip;網卡的名字可用ifconfig命令查看;
    
    advert_int 1,表示每隔1秒發送一個心跳,檢測服務器是否還活着;
 
2】在/usr/local/src添加檢測腳本nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi
在keepalived.conf中的vrrp_script中引用了該腳本;
大概意思是:啟動nginx,如果nginx掛掉,關閉keepalived所有進程;
 
3】啟動兩台服務器上的nginx和keepalived
nginx啟動:
./nginx
 
keepalived啟動:
systemctl start keeplived.service
 
5)測試效果
從遠程瀏覽器中輸入虛擬ip的地址:
 
關掉主服務器上的nginx和keepalived,再次訪問虛擬ip,依然可以看到頁面
 
 
 
 
 
 
  

 


免責聲明!

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



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