天天看點

搭建Keepalived + Nginx + Tomcat 的主備架構

簡單介紹:

Nginx 是HTTP反向代理伺服器;

Keepalived 主要用來避免服務的單點故障;

Tomcat 輕量級web應用伺服器。

架構拓撲圖

搭建Keepalived + Nginx + Tomcat 的主備架構

請求邏輯圖

搭建Keepalived + Nginx + Tomcat 的主備架構

搭建步驟

1、準備工作

系統:

centos7
           

軟體:上傳至 /usr/local 目錄

1. apache-tomcat-8.5.24.tar.gz
2. nginx-1.12.2.tar.gz
3. keepalived-1.3.9.tar.gz
           

伺服器:

192.168.201.130(Master)
192.168.201.131(Backup)
           
設定固定IP,必要的話,請自行百度
vim  /etc/sysconfig/network 
           
輸入如下内容(131伺服器類似)
DNS1=192.168.201.130
DNS2=8.8.8.8
           
重新開機網卡:
service network restart
           

2、安裝依賴包

yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel
           

如果出現錯誤:

Another app is currently holding the yum lock; waiting for it to exit…

可能是系統自動更新正在運作,yum在鎖定狀态中,但是kill有時候也殺不掉,那麼執行以下指令後,再繼續操作:

rm -f /var/run/yum.pid
           

3、Tomcat 安裝

前提:tomcat壓縮檔案上傳至指定位置:

#進入指定目錄
cd /usr/local/
#檢視所有檔案
ls
#解壓tomcat
tar -zxvf apache-tomcat-8.5.24.tar.gz
#進入tomcat-8.5.24/bin
cd apache-tomcat-8.5.24/bin
#啟動tomcat
./startup.sh
           

如遇到權限不足,則輸入su,接着輸入密碼即可

啟動成功後,外網輸入ip位址:8080,但是通路不了,則需要關閉防火牆:
#停止firewall
systemctl stop firewalld.service 
#禁止firewall開機啟動
systemctl disable firewalld.service 
#檢視預設防火牆狀态(關閉後顯示notrunning,開啟後顯示running)
firewall-cmd --state 
           

預設端口号為:8080,浏覽器通路:

192.168.201.130:8080
192.168.201.131:8080
           

3、Nginx 安裝

#進入指定目錄
cd /usr/local/
#檢視所有檔案
ls
#解壓安裝包
tar -zxvf nginx-1.12.2.tar.gz
#進入nginx-1.12.2目錄
cd nginx-1.12.2
#執行編譯
./configure --with-http_stub_status_module --with-http_ssl_module  --prefix=/usr/local/nginx
#執行安裝
sudo make && sudo make install
           

修改Nginx配置檔案

vi /usr/local/nginx/conf/nginx.conf
           

内容如下:

#nginx程序數
worker_processes  1;

#單個程序最大連接配接數
events {
    worker_connections  1024;
}

#http伺服器配置
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #長連接配接逾時時間,機關是秒
    keepalive_timeout  65;
    #upstream負載均衡配置,配置路由到tomcat的服務位址以及權重
    #上線後,在130伺服器上啟動多個執行個體,upstream配置本機多個執行個體
    upstream localhost{
       server 192.168.201.130:8080 weight=2;
       server 192.168.201.131:8080 weight=2;
    }
    
    #虛拟主機的配置
    server {
        #監聽端口
        listen       80;
        #域名可以有多個,用空格隔開
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
            #nginx跟後端伺服器連接配接逾時時間(代理連接配接逾時)
            proxy_connect_timeout 3;
            #後端伺服器資料回傳時間(代理發送逾時)
            proxy_send_timeout 30;
            #連接配接成功後,後端伺服器響應時間(代理接收逾時)
            proxy_read_timeout 30;
            proxy_pass http://localhost;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
           

配置完成後,啟動Nginx

#進入指定目錄
cd /usr/local/nginx/sbin
#驗證nginx配置檔案是否正确
./nginx -t   
#出現 nginx.conf test is successful 則表示成功
#啟動nginx
./nginx
#重新開機nginx
./nginx -s reload
#檢視nginx程序
ps -ef|grep nginx
           

4、Keepalived 安裝

#進入指定目錄
cd /usr/local/
#檢視所有檔案
ls
#解壓安裝包
tar -zxvf keepalived-1.3.9.tar.gz
#進入keepalived-1.3.9目錄
cd keepalived-1.3.9
#執行編譯
./configure --prefix=/usr/local/keepalived --sysconf=/etc
#執行安裝
sudo make && sudo make install
           
#檢查一下/etc/keepalived 下有沒有配置檔案,如果沒有,可手動建立
vim /etc/keepalived/keepalived.conf
           

Master 配置檔案:

global_defs {
    #hostname
    router_id nginx_master 
}
vrrp_script chk_nginx {
    #檢測nginx的腳本
    script "/home/keepalived/nginx_check.sh" 
    #每2秒檢測一次
    interval 2    
    #如果某一個nginx當機 則權重減20                          
    weight -20                                                          
}
vrrp_instance VI_1 {
    #狀态 MASTER BACKUP
    state MASTER                                                        
    #綁定的網卡
    interface ens33     
    #虛拟路由的ID号,兩個節點設定必須一樣                               
    virtual_router_id 51      
    #本機的IP              
    mcast_src_ip 192.168.201.130         
    priority 90
    advert_int 1
    # 設定驗證資訊,兩個節點必須一緻
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛拟IP,兩個節點設定必須一樣。
    virtual_ipaddress {
        192.168.201.222
    }
    # nginx存活狀态檢測腳本
    track_script {
        chk_nginx
    }
}    
           

Backup配置檔案:

global_defs {
    #hostname
    router_id nginx_backup 
}
vrrp_script chk_nginx {
    #檢測nginx的腳本
    script "/home/keepalived/nginx_check.sh" 
    #每2秒檢測一次
    interval 2     
    #如果某一個nginx當機 則權重減20                         
    weight -20                                                          
}
vrrp_instance VI_1 {
    #狀态 MASTER BACKUP
    state BACKUP                            
    #綁定的網卡
    interface ens33     
    #虛拟路由的ID号,兩個節點設定必須一樣                               
    virtual_router_id 51      
    #本機的IP              
    mcast_src_ip 192.168.201.131         
    priority 90
    advert_int 1
    # 設定驗證資訊,兩個節點必須一緻
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛拟IP,兩個節點設定必須一樣。
    virtual_ipaddress {
        192.168.201.222
    }
    # nginx存活狀态檢測腳本
    track_script {
        chk_nginx
    }
}    
           

建立Nginx服務檢測腳本

/home/keepalived/nginx_check.sh
           
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    #嘗試重新啟動nginx
    /usr/local/nginx/sbin/nginx 
    #睡眠2秒
    sleep 2  
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        #啟動失敗,将keepalived服務殺死。将vip漂移到其它備份節點
        killall keepalived 
    fi
fi
           

配置開機自啟

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
#添加到開機自啟
chkconfig keepalived on
           

配置完成後,啟動keepalived

#啟動Keepalived服務
service keepalived start
#然後再Master機器上檢視VIP位址
ip addr
           
Master機器,可以檢視到虛拟IP:192.168.201.222綁定在了ens33(正常為eth0)上;
Backup機器,則沒有虛拟ip。
           

如果啟動出現錯誤,則先排除是否應權限不足引起後,其餘問題多半出現在keepalived.conf。

測試

1、正常情況

通路虛拟IP(192.168.201.222:80)

能通路指定服務,即通路 master

> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.130:80(nginx)
> 192.168.201.130:8080(nginx配置的tomcat服務中的其中一個)
           

2、異常情況

通路虛拟IP(192.168.201.222:80)

master服務異常,即通路 backup

> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.131:80(nginx)
> 192.168.201.131:8080(nginx配置的tomcat服務中的其中一個)
           

采用監控手段,擷取伺服器異常報警,及時修複後,啟動tomcat服務、nginx服務、keepalived服務,則vip通路将自動切換回master。

補充

需要考慮session同步的問題
           

指令彙總

#啟動tomcat,進入 /usr/local/tomcat-8.5.24/bin
./startup.sh

#重新開機nginx,進入/usr/local/nginx/sbin目錄
./nginx -s reload

#重新整理systemctl配置
systemctl daemon-reload
#停止keepalived服務
service keepalived stop
#啟動keepalived服務
service keepalived start
#重新開機keepalived服務
service keepalived restart
#檢視keepalived程序
ps -aux |grep keepalived  
#修改keepalived配置檔案
vim /etc/keepalived/keepalived.conf
           

以上内容均來自于百度,但确實是經過自己實踐所得,希望讓大家能夠更簡單的使用此架構。

參考1:https://my.oschina.net/feinik/blog/1590941

參考2:https://my.oschina.net/xshuai/blog/917097

版權聲明:本文為CSDN部落客「weixin_33971977」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33971977/article/details/91943546