1、Haproxy概念 php
Haproxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速而且可靠的一種解決方案。Haproxy特別適用於那些負載特大的web站點,這些站點一般又須要會保持或七html
層處理。Haproxy運行在當前的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很 簡單安全的整合進您當前的架構中,同時能夠保護你的web服務器不被暴露到網絡上。 前端
2、安裝Haproxy linux
# mkdir /usr/local/haproxy # tar zxvf haproxy-1.5.3.tar.gz # cd haproxy-1.5.3 # make TARGET=linux2628 PREFIX=/usr/local/haproxy # make install PREFIX=/usr/local/haproxy # mkdir /etc/haproxy # cp examples/haproxy.cfg /etc/haproxy/ # groupadd -g 1001 haproxy # useradd -g haproxy haproxy -s /sbin/nologin
3、配置Haproxy web
Haproxy配置中分紅五部份內容,固然這些組件不是必選的,能夠根據須要選擇做爲配置。redis
global:參數是進程級的,一般和操做系統(OS)相關。這些參數通常只設置一次,若是配置無誤,就不須要再次 配置進行修改;算法
default:配置默認參數的,這些參數能夠被利用配置到frontend,backend,listen組件;後端
frontend:接收請求的前端虛擬節點,Frontend能夠根據規則直接指定具體使用後端的backend(可動態選擇);安全
backend:後端服務集羣的配置,是真實的服務器,一個Backend對應一個或者多個實體服務器;bash
listen:Frontend和Backend的組合體。
編寫haproxy.cfg文件:
# vi /etc/haproxy/haproxy.cfg # 兩節點配置一致
global log 127.0.0.1 local0 #日誌輸出配置,全部日誌都記錄在本機,經過local0輸出 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 51200 #最大鏈接數 chroot /usr/local/haproxy #改變當前工做目錄。 pidfile /var/run/haproxy.pid uid haproxy gid haproxy daemon #之後臺程序運行 #quiet nbproc 1 #進程數 defaults log global mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK retries 3 #兩次鏈接失敗就認爲是服務器不可用,也能夠經過後面設置 option httplog #日誌類別,採用httplog option dontlognull #option redispatch #當serverId對應的服務器掛掉後,強制定向到其餘健康的服務器 #option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接 maxconn 20000 #默認的最大鏈接數 timeout connect 5000ms #鏈接超時 timeout client 30000ms #客戶端超時 timeout server 30000ms #服務器超時 timeout check 2000 #心跳檢測超時 listen admin_stats bind 0.0.0.0:8888 #監聽端口 stats enable #開啓統計頁面功能 option httplog #採用http日誌格式 stats refresh 10s #統計頁面自動刷新時間 stats uri /stats #統計頁面url stats realm Haproxy Manager #統計頁面密碼框上提示文本 stats auth admin:123456 #統計頁面用戶名和密碼設置,開啓登陸驗證功能 stats admin if TRUE #若登陸用戶驗證經過,則賦予管理功能 stats hide-version #隱藏統計頁面上HAProxy的版本信息 listen web *:88 option httpclose #每次請求完畢後主動關閉http通道,ha-proxy不支持keep-alive,只能模擬這種模式的實現 option forwardfor #若是後端服務器須要得到客戶端真實ip須要配置的參數,能夠從Http Header中得到客戶端ip balance roundrobin #負載均衡算法 #option httpchk HEAD /index.php HTTP/1.0 #啓用HTTP協議檢查服務器監控狀態,在web服務器上分別創建index.html頁面,能夠添加不一樣的內容,給待會測試用,內容分別填寫100:80,150:8080,200:8080好了,若是沒有,haproxy會認爲對應的web服務器掛掉了。 server web1 192.168.1.101:8080 cookie 100 check inter 5000 fall 1 rise 2 server web2 192.168.1.102:8080 cookie 150 check inter 5000 fall 1 rise 2 ##server 服務器定義:cookie 表示server id;check inter 2000 是檢測心跳頻率;rise 2 是2次正確認爲服務器可用;fall 5 是5次失敗認爲服務器不可用;weight 表明權重 附:這裏還說一下啊,HAProxy的算法如今也愈來愈多了,具體有以下8種: ①roundrobin,表示簡單的輪詢,這個很少說,這個是負載均衡基本都具有的; ②static-rr,表示根據權重,建議關注; ③leastconn,表示最少鏈接者先處理,建議關注; ④source,表示根據請求源IP,這個跟Nginx的IP_hash機制相似,咱們用其做爲解決session問題的一種方法,建議關注; ⑤ri,表示根據請求的URI; ⑥rl_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name; ⑦hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求; ⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
4、經過腳原本啓動與關閉haproxy
一、編寫haproxy腳本
# vi /etc/rc.d/init.d/haproxy
#!/bin/bash
BASE_DIR="/var/run"
ARGV="$@"
start()
{
echo "START HAPoxy SERVERS"
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
}
stop()
{
echo "STOP HAPoxy Listen"
kill -TTOU $(cat $BASE_DIR/haproxy.pid)
echo "STOP HAPoxy process"
kill -USR1 $(cat $BASE_DIR/haproxy.pid)
}
case $ARGV in
start)
start
ERROR=$?
;;
stop)
stop
ERROR=$?
;;
restart)
stop
start
ERROR=$?
;;
*)
echo "hactl.sh [start|restart|stop]"
esac
exit $ERROR
二、讓腳本隨系統自動啓動
# chmod +x /etc/rc.d/init.d/haproxy
# chkconfig --add haproxy
haproxy does not support chkconfig
----解決上面的問題的辦法是在/etc/rc.d/init.d/haproxy中添加下面兩行到#!/bin/bash以後
# vi /etc/rc.d/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 10 90
#description:haproxy
----其中2345是默認啓動級別,級別有0-6共7個級別。----等級0表示:表示關機----等級1表示:單用戶模式----等級2表示:無網絡鏈接的多用戶命令行模式----等級3表示:有網絡鏈接的多用戶命令行模式----等級4表示:不可用----等級5表示:帶圖形界面的多用戶模式----等級6表示:從新啓動----10是啓動優先級,90是停機優先級,優先級範圍是0-100,數字越大,優先級越低。
三、啓動與中止haproxy
# service haproxy stopSTOP HAPoxy ListenSTOP HAPoxy process# ps -ef |grep haproxy |grep -v grep# service haproxy startSTART HAPoxy SERVERS# ps -ef |grep haproxy |grep -v greproot 11259 1 0 15:33 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg