Nginx(haproxy)+keepalived+Tomcat雙主高可用負載均衡

週末的時候一個正在學Linux的朋友問我,高可用怎麼玩?我和他微信了將近三個小時,把Nginx和haproxy雙主高可用教給他了,今天忽然想把這個給寫進博客裏,供給那些正在學習Linux系統的朋友們,但願可以有所幫助!(若是內容中有誤,還望你們指出!)linux

常見的web集羣調度器:nginx

調度器分爲軟件和硬件兩種,常見軟件:lvs nginx haproxy等web

                         常見硬件:f5 綠盟  梭子魚等apache

    lvs在企業生產中抗負載能力很強,可是不支持動靜分離,正則處理,在大型網站中lvs實施複雜,並且維護成本高,工做在TCP四層,lvs就是一個單純的負載均衡軟件vim

    Nginx使用簡單,性能較好,可負載三萬到五萬的併發量,Nginx上功能較多,可作web服務器也可作流量分配,但不支持session會話 cookie引導等, 工做在TCP七層
後端

    haproxy使用簡單,功能多,harpoxy支持兩種工做模式,一個是TCP四層和七層(傳輸層和應用層),它補充了Nginx不能session cookie等工做,支持URL檢測,若是服務器出問題會有很好的幫助,它和lvs同樣只是單純的負載均衡軟件,可是它負載均衡的速度和處理併發上要優於Nginx,haproxy也可對MySQL讀進行負載均衡,對後端MySQL節點進行檢測,若是後端的MySQL slaves數量超出10臺時,性能不如lvs+keepalivedtomcat

       

   

 

                                   部署Nginx+keepalived+Tomcat 雙主高可用負載均衡bash

思路:服務器

1.首先須要四臺服務,兩臺作Nginx負載均衡(Nginx1和Nginx2),另外兩臺看成真實節點服務器(Tomcat1和Tomcat2)微信

2.既然要達到雙主的目的,就須要用兩個VIP(也就是虛擬ip)添加兩條VIP是爲了兩臺調度器互相是對方主服務和從從服務,把兩個VIP添加同一個域名裏,客戶訪問域名時同時工做,使兩臺機器沒有一個是處於閒置浪費狀態,而且當其中一臺機器宕機後,第一臺的VIP會轉移到另外一臺,此時第二臺會有倆個VIP,這樣作最大化使負載均衡達到最理想化狀態

3.而後就是在調度器器上安裝keepalived工具,當某臺調度器宕機後,進行vip飄移,故障切換

 

 

部署環境:

              負載Nginx1  192.168.40.21

              負載Nginx2  192.168.40.22

               Tomcat1  192.168.40.23        

               Tomcat2  192.168.40.24

               VIP  192.168.40.66  192.168.40.67 

 

安裝Tomcat1

須要源碼包  :

        Jdk-7u65-linux-x64.gz   apache-tomcat-7.0.54.tar.gz

 

安裝並生成測試頁

[root@root ~]# tar xf jdk-7u65-linux-x64.gz

[root@root ~]# mv jdk1.7.0_65/ /usr/local/tomcat7/

[root@root ~]# mkdir -p /web/webapp1/

[root@root ~]#vim /web/webapp1/index.jsp

安裝Tomcat2

安裝步驟和Tomcat1同樣,安裝過程略過

Tomcat2測試頁內容:

 

部署Nginx1負載均衡

Nginx搭建過程略,搭建完成後修改Nginx主配置文件,在Nginx上添加Tomcat1Tomcat2的真實節點服務器

  max—fails=1 fail_timeout=10s; 健康檢查:最大鏈接失敗測試1次,失敗超時10秒

部署Nginx2的負載

 

 

Keepalived部署

keepalived能夠說是健康檢查工具,他能夠故障自動切換,節點健康檢查

Nginx1上安裝keepalived

yum -y isntall  keepalived

修改keepalived配置文件,添加VIP以及Nginx 進程監測腳本

 編寫Nginx檢測進程腳本:

 

#!/bin/bash
#by:ImproveMyself
#檢測進程腳本
#檢測nginx 進程是否開啓,若是沒有開啓嘗試開啓
jc=`ps -C nginx --no-header|wc -l`
if [ $jc -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
#若是nginx嘗試開啓失敗,那麼就關閉keepalived服務,進行vip飄移
jc2=`ps -C nginx -no-header |wc -l`
if [ $jc -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi


修改keepalived的主配置文件:

位置: /etc/keepalived/

 

同時在Nginx2上部署keepalived,安裝過程和Nginx1keepalived同樣,而且修改keepalived主配置文件

部署完成以後,開啓Nginx keepalive服務,此時使用ip  a 命令查看 Nginx1上的vip,發現vip1的IP

由於VIP 1:192.168.40.66 主調度器是Nginx1 從調度器是Nginx2   ,只有當主調度器宕機以後,VIP1:192.168.40.66才切換到Nginx2上,因此Nginx1上顯示VIP1:192.168.40.66是正確的,vip2:192.168.40.67 此時在Nginx1 上沒有顯示是由於Nginx1如今是VIP2的從調度服務,只有Nginx2 宕機以後VIP2纔會切換到Nginx1上!

而後再查看Nginx2 上的vip,發現vip2的ip,這樣就說明雙主模式已經部署成功了

 

檢測:

使用VIP 192.168.40.66進行訪問

使用VIP 192.168.40.67進行訪問

 

Nginx1宕機後,此時Nginx2上有兩條VIP

使用不一樣VIP訪問,依然成功訪問

 

------------------------------------------------------------------------------------------------------------------

 

 

                                                                                  

                                                     Haproxy+keepalived+Tomcat高可用負載

 

 思路:

基於上面那個環境,如今作haproxy高可用  總體思路和Nginx+keepalived+Tomcat的同樣,只不過是把Nginx調度換成haproxy調度器,測試方法和方式和上面那個案例同樣

 

部署環境:  負載haproxy1  192.168.40.21

                      負載haproxy2  192.168.40.22

                               Tomcat1  192.168.40.23        

                               Tomcat2  192.168.40.24

                                      VIP1  192.168.40.66  

                                      VIP2  192.168.40.67

 

 

 

部署haproxy1環境

 須要的源碼包: haproxy-1.4.24.tar.gz

 

  安裝haproxy

   tar  xf haproxy-1.4.24.tar.gz -C /usr/src/

   cd /usr/src/haproxy-1.4.24/

   make TARGET=linux26 && make install

   mkdir /etc/haproxy

   cp examples/haproxy.cfg  /etc/haproxy/

   cp examples/haproxy.init /etc/init.d/haproxy

   chmod +x /etc/init.d/haproxy

   ln -s /usr/local/sbin/haproxy  /usr/sbin/

 

   修改haproxy配置文件

   vim /etc/haproxy/haproxy.cfg

 

建立haproxy.conf文件,用於日誌管理

vim /etc/rsyslog.d/haproxy.conf

編寫一個監測haproxy進程腳本用於故障切換,寫入在keepalived配置文件裏

腳本和上面的Nginx.sh腳本同樣,你能夠把Nginx.sh複製出一個haproxy.sh,更改一下腳本里的檢測內容就好了

因爲是基於上一個案例上的環境,因此keepalived就不在安裝了,只須要把keepalived裏的腳本名字更改一下就好了 

部署haproxy2keepalived

由於安裝步驟和以前同樣,安裝過程略

修改haproxy.cfg配置文件和日誌管理文件

修改keepalived的主配置文件,而且把腳本寫入

部署完完成以後分別開啓服務

/etc/init.d/haproxy restart

/etc/init.d/rsyslog  restart

/etc/init.d/keepalived restart

 

測試:

使用兩個vip訪問

宕機測試:

 

此時40.22上出現兩條vip,證實vip飄移成功

此時再次訪問

 

 

相關文章
相關標籤/搜索