一、haproxy介紹
HAProxy是一個使用C語言編寫的自由及開放源代碼軟件[1],其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
haproxy 的配置文件由兩部分組成:全局設定和對代理的設定,共分爲五段:global,defaults,frontend,backend,listen。
二、安裝haproxy
去haproxy下載源碼包上傳到服務器或者wget
然後解壓
[root@mymaster yasuobao]# tar -zxvf haproxy-2.0.1.tar.gz
[root@mymaster yasuobao]# cd haproxy-2.0.1
編譯[root@mymaster yasuobao]# make TARGET=linux31
這裏TARGET參數視centos版本而定,uname -r查看系統版本centos6.X需要使用TARGET=linux26 centos7.x使用linux31
安裝
[root@mymaster yasuobao]# make install PREFIX=/usr/local/haproxy
創建conf目錄[root@mymaster yasuobao]# mkdir /usr/local/haproxy/conf
複製文件
[root@mymaster yasuobao]# cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
[root@mymaster yasuobao]# cd /usr/local/haproxy/conf
編輯配置文件
[root@mymaster conf]# vim haproxy.cfg
字段含義如下
global # 全局參數的設置
log 127.0.0.1 local0 info # log語法:log <address_1>[max_level_1] # 全局的日誌配置,使用log關鍵字,指定使用127.0.0.1上的syslog服務中的local0日誌設備,記錄日誌等級爲info的日誌
maxconn 4096 #最大連接數
user nobody #所屬用戶
group nobody #所屬組
daemon #以守護進程方式運行haproxy
nbproc 1 #指定啓動的haproxy進程的個數,只能用於守護進程模式的haproxy,默認爲1
pidfile /usr/local/haproxy/logs/haproxy.pid #指定pid文件生成目錄
defaults
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
retries 3 # 定義連接後端服務器的失敗重連次數,連接失敗次數超過此值後將會將對應後端
timeout connect 10s #連接超時
timeout client 20s #客戶端超時
timeout server 30s #服務器端超時
timeout check 5s #檢測超時
frontend www
bind *:80 #監聽地址爲80
mode http
option httplog #啓用記錄HTTP請求、會話狀態和計時器的功能
option forwardfor #允許在發往服務器的請求首部中插入“X-Forwarded-For”首部。
option httpclose #每次請求完畢後主動關閉http通道
log global #啓用事件和流量日誌
default_backend htmpool #默認後端
backend htmpool
mode http
option redispatch # 當使用了cookie時,haproxy將會將其請求的後端服務器的serverID插入到cookie中,以保證會話的SESSION持久性;而此時,如果後端的服 務器宕掉了, 但是客戶端的cookie是不會刷新的,如果設置此參數,將會將客戶的請求強制定向到另外一個後端server上,以保證服務的正常。
option abortonclose #丟棄由於客戶端等待時間過長而關閉連接但仍在haproxy等待隊列中的請求
balance static-rr #負載均衡算法(#banlance roundrobin 輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數)
cookie SERVERID #允許插入serverid到cookie中,serverid後面可以定義
option httpchk GET /index.html
server myslave02 172.18.74.87:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3 #cookie 1表示serverid 爲1,check inter 1500 是檢測心跳頻率,rise 2是2次正確認爲服務器可用,fall 3是3次失敗認爲服務器不可用,weight代表權重
server myslave 172.18.74.119:80 cookie 1 weight 3 check inter 2000 rise 2 fall 3
listen admin_stats
bind 0.0.0.0:9188 #監聽端口
mode http
log 127.0.0.1 local0 err #全局的日誌配置,local0 是日誌設備,err 表示日誌級別。其中日誌級別有err、 warning、info、debug 四種可選。這個配置表示使用 127.0.0.1 上的 rsyslog 服務中的local0 日誌設備,記錄日誌等級爲err。
stats refresh 30s #統計頁面自動刷新時間
stats uri /haproxy-status #統計頁面url
stats realm welcome login\ Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin123 #統計頁面用戶名和密碼設置
stats hide-version #隱藏統計頁面上HAProxy的版本信息
stats admin if TRUE #通過設置此選項,可以在監控頁面上手工啓用或禁用後端真實服務器,僅在haproxy1.4.9 以後版本有效
啓動haproxy
[root@mymaster conf]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
然後在後端服務器編輯index.html
[root@myslave html]# cat index.html
this is 119 html
[root@myslave02 html]# cat index.html
this is 87 html
curl檢查haproxy是否正常工作
瀏覽器訪問172.18.74.59:9188/haproxy-status,用戶名admin,密碼admin123,登陸。可以看到haproxy的工作狀態