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


周末的時候一個正在學Linux的朋友問我,高可用怎么玩?我和他微信了將近三個小時,把Nginx和haproxy雙主高可用教給他了,今天突然想把這個給寫進博客里,供給那些正在學習Linux系統的朋友們,希望能夠有所幫助!(如果內容中有誤,還望大家指出!)

常見的web集群調度器:

調度器分為軟件和硬件兩種:lvs nginx haproxy等軟件調度器

                          f5 綠盟  梭子魚等硬件調度器

  •     lvs在企業生產中抗負載能力很強,但是不支持動靜分離,正則處理,在大型網站中lvs實施復雜,而且維護成本高,工作在TCP四層,lvs就是一個單純的負載均衡軟件
  •     Nginx使用簡單,性能較好,可負載三萬到五萬的並發量,Nginx上功能較多,可做web服務器也可做流量分配,但不支持session會話 cookie引導等, 工作在TCP七層
  •     haproxy使用簡單,功能多,harpoxy支持兩種工作模式,一個是TCP四層和七層(傳輸層和應用層),它補充了Nginx不能session cookie等工作,支持URL檢測,如果服務器出問題會有很好的幫助,它和lvs一樣只是單純的負載均衡軟件,但是它負載均衡的速度和處理並發上要優於Nginx,haproxy也可對MySQL讀進行負載均衡,對后端MySQL節點進行檢測,如果后端的MySQL slaves數量超出10台時,性能不如lvs+keepalived

       

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

思路:

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上添加Tomcat1和Tomcat2的真實節點服務器

  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,安裝過程和Nginx1的keepalived一樣,並且修改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        
  • 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里的腳本名字更改一下就行了 

部署haproxy2和keepalived

因為安裝步驟和之前一樣,安裝過程略

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

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

部署完完成之后分別開啟服務

/etc/init.d/haproxy restart
/etc/init.d/rsyslog  restart
/etc/init.d/keepalived restart

測試:

使用兩個vip訪問

宕機測試:

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

此時再次訪問

 

 

 


免責聲明!

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



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