從零安裝 lvs+keepalive+tomcat 實現nginx的高可用

 

 

首先最終實現目標架構圖:

下面開始:

首先: 主nginx 服務器地址:192.168.37.110  

            從 nginx 服務器地址:192.168.37.111

           192.168.37.166 爲 keepalived虛擬VIP地址

第一步:安裝keepalived

1、這裏採用VMware安裝的linux虛擬機實現,使用的版本是 contes7.4  這裏就不貼步驟了,確保虛擬機能夠連接外網

2、安裝gcc gcc-c++(如新環境,未安裝請先安裝)

      yum install -y gcc gcc-c++

3、安裝wget(如新環境,未安裝請先安裝)

    yum -y install wget

4、下載keepalived

     wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

5、解壓安裝包:

   tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

6、下載插件openssl

  yum install -y openssl openssl-devel

7、開始編譯keepalived

  cd /usr/local/keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

8、make一下

 cd /usr/local/keepalived-1.2.18

 make && make install

 

如果安裝報錯: eepalived執行./configure --prefix=/usr/local/keepalived時報錯:configure: error: Popt libraries is required

出現此錯誤的原因:未安裝popt的開發包

解決方法:yum install popt-devel   安裝好popt的開發包。重新./configure 即可。

 

9、將keepalived安裝成linux系統服務

將keepalived安裝成Linux系統服務,因爲沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local),安裝完成之後,需要做一些修改工作:

首先創建文件夾,將keepalived配置文件進行復制:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

然後複製keepalived腳本文件:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/sbin/keepalived /usr/sbin/

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

執行 service keepalived start  發現會報錯

解決辦法:

 cd /usr/sbin

 rm -f keepalived

 cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 

然後再次執行啓動命令:service keepalived start

keepalived 常用命令

service keepalived start

service keepalived stop

可以設置開機啓動:chkconfig keepalived on,到此我們安裝keepalived完畢!

 

10、使用keepalived虛擬VIP

    cd /etc/keepalived      rm -r keepalived.conf  刪除原有的 conf文件   然後重新創建一份 conf文件

    vi /etc/keepalived/keepalived.conf   

   寫入一下配置信息:

! Configuration File for keepalived
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以後,自動開啓服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20
}
#定義虛擬路由,VI_1 爲虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
    ###MASTER 標識主  BACKUP 標識從
    state MASTER #來決定主從
    interface ens33 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
    virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
    mcast_src_ip 192.168.37.110 #填寫本機ip
    priority 100 # 節點優先級,主要比從節點優先級高
    nopreempt # 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題
    advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s #下面是配置 安全權限 可以不需要
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #將 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }
    ###虛擬IP地址配置規範 假設192.168.37.166
    virtual_ipaddress {
        192.168.37.166 #虛擬ip,也就是解決寫死程序的ip怎麼能切換的ip,也可擴展,用途廣泛。可配置多個。
    }
}

  :wq   保存退出

 

第二步:安裝主的nginx服務器   gcc wget openss 前面已經安裝了 就不用繼續裝了

1、安裝PCRE庫

 cd /usr/local/ && wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz

tar -zxvf pcre-8.33.tar.gz

cd pcre-8.33 && ./configure

make && make install

2、安裝zlib庫存

cd /usr/local/

wget http://zlib.net/zlib-1.2.11.tar.gz

tar -zxvf zlib-1.2.11.tar.gz

cd zlib-1.2.11 && ./configure

make && make install

 

3、安裝nginx

cd /usr/local/ && wget http://nginx.org/download/nginx-1.9.10.tar.gz

tar -zxvf nginx-1.9.10.tar.gz

cd nginx-1.9.10 && ./configure

make && make install

然後修改index.html 文件

cd /usr/local/nginx/html     vi index.html

:wq   保存退出

啓動nginx :  /usr/local/nginx/sbin/nginx

記得關閉防火牆

臨時關閉  systemctl stop firewalld

禁止開機啓動  systemctl disable firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

 

然後再本機用瀏覽器訪問nginx服務器地址:http://192.168.37.110/  地址爲 真實ip地址

這裏標識nginx 已經 安裝啓動成功了。

 

然後再啓動 keepalived服務 service keepalived start   

使用 ip a  查看下網絡信息

會發現多了一個  192.168.37.166  這個地址就是 keepalived 虛擬出來的

如果沒有顯示出來,可能你的配置文件,寫的有點問題,修改後關閉keepalived 再次重啓看下效果

然後我們使用 keepalived虛擬出來的ip地址進行訪問 nginx服務 192.168.37.166

發現也能訪問成功

 

到此,完成了一半,keepalived 和 主nginx 已經安裝完成了。

 

第三步,安裝nginx備機,把主nginx服務虛擬機 克隆一份,修改ip地址爲 192.168.37.111

啓動 110   111 兩臺服務器,先把 兩臺服務器的 keepalived 都停止服務

service keepalived stop

注意:由於我們是搭建一主一備,所以 拷貝的備機上面,keepalived的配置文件需要修改,不然就是兩主機,沒有備機了,修改如下  state   mcast_src_ip   priority 

  vi /etc/keepalived/keepalived.conf   

   寫入一下配置信息:

! Configuration File for keepalived
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以後,自動開啓服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20
}
#定義虛擬路由,VI_1 爲虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
    ###MASTER 標識主  BACKUP 標識從
    state BACKUP #來決定主從
    interface ens33 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
    virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
    mcast_src_ip 192.168.37.111 #填寫本機ip
    priority 90 # 節點優先級,主要比從節點優先級高
    nopreempt # 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題
    advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s #下面是配置 安全權限 可以不需要
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #將 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }
    ###虛擬IP地址配置規範 假設192.168.37.166
    virtual_ipaddress {
        192.168.37.166 #虛擬ip,也就是解決寫死程序的ip怎麼能切換的ip,也可擴展,用途廣泛。可配置多個。
    }
}

  :wq   保存退出

然後啓動keepalived服務    service keepalived start    會發現沒有主機上面顯示的虛擬ip的地址信息

然後修改 備機 nginx 上面的 index.html 信息

cd /usr/local/nginx/html     vi index.html

:wq   保存退出

啓動nginx :  /usr/local/nginx/sbin/nginx

記得關閉防火牆

臨時關閉  systemctl stop firewalld

禁止開機啓動  systemctl disable firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

 

在本地使用 nginx備機的ip地址進行訪問nginx服務,先確保 nginx服務是正常的 192.168.37.111

然後 使用 keepalived 虛擬的ip進行訪問 192.168.1.166

同時,在備機上面使用  ip a  命令,發現,存在 虛擬ip地址了,這是因爲主機的 keepalived 服務器掛掉了,把備機啓用了,把備機當成主機使用了, 

此時, 重啓主nginx服務器上的keepalived服務,service keepalived start,然後再主機上面 使用 ip a 命令,發現沒有虛擬ip信息顯示,這個時候,我們需要關閉備機的keepalived服務,service keepalived stop  再去主機上使用 ip a 命令,發現,主機上面出現了 虛擬ip地址信息,然後再啓動備機的 keepalived服務 service keepalived start ,在備機使用 ip a 命令,查看,發現,備機上面不顯示 虛擬ip地址信息了。。。。這樣,主機 備機 就調整正常了。

然後,重啓主機的nginx服務:  /usr/local/nginx/sbin/nginx   

使用 虛擬ip地址訪問,會發現我們訪問的頁面變爲主機nginx頁面地址了

其實上面的步驟,也就直接展示了,當主機keepalived 服務出現問題的時候,我們訪問到的資源地址就是 備機的 nginx服務器地址

我們可以使用 在 110主服務器上使用命令  service keepalived stop  停止服務,然後再用 虛擬ip去訪問發現結果如下:

 同時虛擬ip 會跑去 備機服務器上面

然後, 在 110主服務器上使用命令  service keepalived start 啓動服務,然後再用 虛擬ip去訪問發現結果如下:

訪問nginx服務器自動變爲了 主nginx服務器

 

到此,那麼完成了5分之3.   keepalived nginx 主從服務器搭建好了,然後就是 keepalived 心跳機制,和 tomcat集羣。 接着往下

 

第4步,設置 keepalived心跳機制   以下操作 主機和備機操作一樣

  其實從前面的配置文件中,能發現,我們需要寫一段shell腳本,用來檢測 nginx服務是否在正常提供功能,如果沒有,則啓動nginx服務,如果有,則繼續監聽檢測    腳本文件名爲:nginx_check.sh  

echo 是爲了 手動執行腳本文件測試的時候,讓控制檯輸出 信息  也可以把信息輸出到 日誌文件中,然後把腳本文件做成 linux開機啓動 和 定時任務,這樣  實時檢測 keepalived 和 nginx進程 進行判斷

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
B=`ps -C keepalived --no-header |wc -l`   
if [ $A -eq 0 ];then
echo "==================nginx_check nginx的進程數量等於0===================="  
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
echo "==================啓動後還是爲0,則關閉 keepalived進程====================" 
        /etc/rc.d/init.d/keepalived stop
    fi
fi

C=`ps -C nginx --no-header |wc -l`

if [ $C -gt 0 -a $B -eq 0 ];then
echo "===========nginx_check nginx的進程沒問題,但keepalived進程沒有,啓動keepalived =============" 
     /etc/rc.d/init.d/keepalived start
fi 

腳本存放路徑,和 keepalived 配置文件同一個 目錄,    /etc/keepalived/     

 然後給腳本設置權限

chmod 777 nginx_check.sh

然後測試效果,關閉 主nginx 的nginx 的進程,service keepalived stop  然後瀏覽器訪問,發現keepalived會自動重啓nginx,還能訪問到主nginx服務器,然後接着測試,關閉主機的nginx  以及和  keepalived ,然後 瀏覽器訪問,顯示的是備機的 nginx信息,此時只啓動主機的keepalived服務,然後 瀏覽器訪問,顯示的是主機的 nginx信息,keepalived啓動的時候 自動重啓了nginx服務

重啓多次失敗的話,那麼就 發送郵件通知到 運維人員,這裏就不進行配置了。

 

第五步、配置tomcat的主從

修改nginx配置文件   這裏使用端口號區分,生產環境肯定是每個都在不同的服務器上 這裏就不多解釋了

8080 8081 表示主機   8082  8083 標識從機    下面配置負載均衡 和故障轉移

upstream testproxy {

      server 127.0.0.1:8080;

      server 127.0.0.1:8081;

      server 127.0.0.1:8082 backup;

      server 127.0.0.1:8083 backup;

  }
server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass   http://testproxy;
            index  index.html index.htm;
        }
	     ###nginx與上游服務器(真實訪問的服務器)超時時間 後端服務器連接的超時時間_發起握手等候響應超時時間
	     proxy_connect_timeout 1s;
		 ###nginx發送給上游服務器(真實訪問的服務器)超時時間
         proxy_send_timeout 1s;
	      ### nginx接受上游服務器(真實訪問的服務器)超時時間
         proxy_read_timeout 1s;

    }

然後啓動四個tomcat進行測試即可,這裏就不演示了,我測試過了,沒問題的

正常是:啓動四個tomcat後,訪問nginx服務,會發現,只會訪問8080  8081 兩個端口,然後停止掉 8081 ,就只會訪問 8080,當8080停止掉後,就會在 8082  8083之間負載調用

好了,到此配置結束。大功告成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章