週末的時候一個正在學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上添加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
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裏的腳本名字更改一下就好了
部署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飄移成功
此時再次訪問