HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理支持虛擬主機它是免費、快速而且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點這些站點一般又須要會話保持或七層處理。HAProxy運行在當前的硬件上徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中 同時能夠保護你的web服務器不被暴露到網絡上。php
HAProxy實現了一種事件驅動, 單一進程模型此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管理的用戶端(User-Space) 實現全部這些任務因此沒有這些問題。此模型的弊端是在多核系統上這些程序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做。html
代理前端
Server25.example.com 172.25.45.25node
Server26.example.com 172.25.45.26ios
Realserver web
Server27.example.com 172.25.45.27vim
Server28.example.com 172.25.45.28後端
####HAproxy的安裝配置api
Server25和server26瀏覽器
yum install haproxy -y
cd /etc/haproxy/
vim haproxy.cfg
註釋 60-86 行而後
87 listen westos 172.25.45.100:80
88 balance roundrobin
89 server web1 172.25.45.27:80 check
90 server web2 172.25.45.28:80 check
netstat -antlp 查看有沒有別的服務影響haproxy
/etc/init.d/haproxy start
Server27
yum install httpd
vim /var/www/html/index.html 編輯內容爲:
server27.example.com
/etc/init.d/httpd start
Server28:
yum install httpd
vim /var/www/html/index.html 編輯內容爲:
server28.example.com
/etc/init.d/httpd start
##########Heartbeat的配置
Server25
yum install *.rpm -y
rpm -q heartbeat -d 查看heartbeat的相關配置文件夾目錄
cp /usr/share/doc/heartbeat-3.0.4/{authkeys,ha.cf,haresources} /etc/ha.d
vim /etc/ha.d/ha.cf 修改內容爲:
34 logfacility local0##直接往系統日誌寫入
48 keepalive 2##心跳間隔
56 deadtime 30##心跳無反應被認爲服務掛掉的時間
61 warntime 10##心跳無反應警告時間
71 initdead 60##資源初始化
76 udpport 649## UDP 端口 --> 本身設置 <同一個交換機上的端口不能重複>
91 bcast eth0 # Linux##廣播
157 auto_failback on##服務自動回切
211 node server25.example.com##主機節點信息前爲主後爲輔
212 node server26.example.com##被機節點信息
220 ping 172.25.45.250## ping 某個 ip 要求能 ping 通肯定網絡服務此處 ip 通常爲網關地址與fence配合使用來進行斷網服務如:server26能夠ping通某個ip而server5不行此時fence便會進行斷電重啓server25
253 respawn hacluster /usr/lib64/heartbeat/ipfail
259 apiauth ipfail gid=haclient uid=hacluster
vim /etc/ha.d/authkeys 修改內容爲
23 auth 1
24 1 crc##明文
chmod 600 authkeys
vim /etc/ha.d/haresources 修改內容爲:
151 server25.example.com IPaddr::172.25.45.100/24/eth0 haproxy## 此處域名必定爲
主機的域名ip爲 vip(虛擬ip) haproxy表示須要調用的腳本名稱
scp authkeys ha.cf haresources 172.25.45.26:/etc/ha.d
/etc/init.d/heartbeat start
Tail -f /var/log/messages
Ip a s 此時虛擬ip在server25上
Server26
yum install *.rpm -y
/etc/init.d/heartbeat start
測試
當虛擬ip在server25上時在真機測試
此時關掉server25上的heartbeat服務server26便會接管server25上的服務此時虛擬ip在server26上
此時在真機上繼續測試,測試結果說明server26接管了server25的服務
########### 查看詳細信息 #######
Vim /etc/haproxy/ haproxy.cfg 修改內容爲:
/etc/init.d/haproxy reload
@@@檢查服務運行測試:在瀏覽器端輸入 172.25.45.100:8080/status 而後在server27和server28關閉httpd服務看顏色的變化
######### 自定義前端和後端 後端的動靜分離##########
Server25:
vim /etc/haproxy/haproxy.cfg 修改內容爲:
frontend westos 172.25.45.100:80 ##自定義前端
acl url_static path_beg -i /p_w_picpaths ##定義url_static 條件:以/p_w_picpaths開頭
acl url_static path_end -i .jpg .gif ##定義url_static 條件:以.jpg .gif .png 結尾
use_backend static if url_static
default_backend app ###默認使用動態若是符合 url_static就使用靜態
backend static
balance roundrobin
server web1 172.25.45.27:80 check ###靜態後端
backend app
balance roundrobin
server web2 172.25.45.28:80 check ##動態後端
server27:
cd /var/www/html
mkdir p_w_picpaths
cd p_w_picpaths 而後往該目錄中放入OSI.gif與redhat.jpg
測試:在瀏覽器中輸入 172.25.45.100/p_w_picpaths/redhat.jpg 或者 172.25.45.100/p_w_picpaths/OSI.gif
此處以/p_w_picpaths開頭以.gif結尾 (靜)
若直接輸入172.25.45.100則訪問動)
############## 設置訪問權限 ##########
Server25
vim /etc/haproxy/haproxy.cfg 修改內容爲
block if badhost##不容許訪問
測試:真機(172.25.45.250)在瀏覽器中輸入 172.25.15.100會有 403 報錯
Yum install httpd -y
vim /etc/httpd/conf/httpd.conf 修改默認端口:
135 #Listen 12.34.56.78:80
136 Listen 8000
vim /var/www/html/index.html 修改內容爲:
/etc/init.d/httpd start
繼續在server25上操做
vim /etc/haproxy/haproxy.cfg 修改內容爲
添加95、96行
真機測試
也能夠這樣作
vim /etc/haproxy/haproxy.cfg 修改內容爲
註釋掉95、96行添加106行
測試在真機訪問
關掉server28的httpd
[kiosk@foundation45 Desktop]$ curl 172.25.45.100
網頁正在維護中
############### 自動補全全域名 #########
真機:
vim /etc/hosts:
172.25.45.100 server25.example.comwestos.orgwww.westos.org
Server25
vim /etc/haproxy.conf 修改內容爲:
添加97-100行註釋帶年109行
99##在瀏覽器中輸入 westos.org 自動補充成 www.westos.org
100##在瀏覽器中輸入 172.25.30.99 自動補充成 www.westos.org
/etc/init.d/haproxy reload
測試:真機(172.25.45.250)在瀏覽器中輸入 westos.org 或者 172.25.45.100 會自動補齊爲www.westos.org
################### 讀寫分離 ############
Server25:
vim /etc/haproxy.conf 修改內容爲
添加100-103行將108、109修改成下圖
acl read method GET##定義讀取
acl read method HEAD##定義讀取
acl write method PUT##定義寫入/上傳
acl write method POST##定義寫入/上傳
use_backend app if write##當 寫入/上傳 時使用app動態後端
default_backend static##默認後端爲靜態static後端
/etc/init.d/haproxy reload
Server27 和 server28都要作的操做:
cd /var/www/html
cd upload/
mv * ..
cd ..
vim upload_file.php 修改第 4 行內容:
&& ($_FILES["file"]["size"] < 2000000))##此處增大了上傳文件指定大小
chmod 777 upload/
/etc/init.d/httpd restart
測試:在真機瀏覽器中輸入 www.westos.org/p_w_picpaths 中能夠讀取
在真機瀏覽器中輸入 www.westos.org 中能夠上傳文件(文件格式爲.jpg .gif .png -->在 /etc/haproxy/haproxy.conf 中可查)