HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代理,支援虛拟主機,它是免費、快速并且可靠的一種解決方案。HAProxy特别适用于那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運作在目前的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整合進您目前的架構中,同時可以保護你的web伺服器不被暴露到網絡上.
haproxy 配置中分成五部分内容,分别如下:
1、global:參數是程序級的,通常是和作業系統相關。這些參數一般隻設定一次,如果配置無誤,就不需要再次進行修改
2、defaults:配置預設參數,這些參數可以被用到frontend,backend,Listen元件
3、frontend:接收請求的前端虛拟節點,Frontend可以更加規則直接指定具體使用後端的backend
4、backend:後端服務叢集的配置,是真實伺服器,一個Backend對應一個或者多個實體伺服器
5、Listen Fronted和backend的組合體
一、安裝HAProxy
1.下載下傳最新haproxy安裝包,官網:2.上傳到Linux的haproxy使用者根目錄下,并解壓:
tar -zxvf haproxy-1.5.8.tar.gz
建立目錄/home/haproxy/haproxy
3.安裝
cd haproxy-1.5.8
make TARGET=linux26 ARCH=x86_64 PREFIX=/home/haproxy/haproxy #将haproxy安裝到/home/haproxy/haproxy ,TARGET是指定核心版本
make install PREFIX=/home/haproxy/haproxy
進入/home/haproxy/haproxy 目錄建立/home/haproxy/haproxy/conf目錄,複制配置examples
cp /home/haproxy/haproxy-1.5.8/examples/haproxy.cfg /home/haproxy/haproxy/conf/
4.修改配置
配置說明如下:(參考:http://freehat.blog.51cto.com/1239536/1347882)
[plain] view plain copy
print?
- ###########全局配置#########
- global
- log 127.0.0.1 local0 #[日志輸出配置,所有日志都記錄在本機,通過local0輸出]
- log 127.0.0.1 local1 notice #定義haproxy 日志級别[error warringinfo debug]
- daemon #以背景形式運作harpoxy
- nbproc 1 #設定程序數量
- pidfile /home/haproxy/haproxy/conf/haproxy.pid #haproxy 程序PID檔案
- ulimit-n 819200 #ulimit 的數量限制
- maxconn 4096 #預設最大連接配接數,需考慮ulimit-n限制
- #chroot /usr/share/haproxy #chroot運作路徑
- uid 99 #運作haproxy 使用者 UID
- gid 99 #運作haproxy 使用者組gid
- #debug #haproxy 調試級别,建議隻在開啟單程序的時候調試
- #quiet
- ########預設配置############
- defaults
- log global
- mode http #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health隻會傳回OK
- option httplog #日志類别,采用httplog
- option dontlognull #不記錄健康檢查日志資訊
- retries 2 #兩次連接配接失敗就認為是伺服器不可用,也可以通過後面設定
- option forwardfor #如果後端伺服器需要獲得用戶端真實ip需要配置的參數,可以從Http Header中獲得用戶端ip
- option httpclose #每次請求完畢後主動關閉http通道,haproxy不支援keep-alive,隻能模拟這種模式的實作
- #option redispatch #當serverId對應的伺服器挂掉後,強制定向到其他健康的伺服器,以後将不支援
- option abortonclose #當伺服器負載很高的時候,自動結束掉目前隊列處理比較久的連結
- maxconn 4096 #預設的最大連接配接數
- timeout connect 5000ms #連接配接逾時
- timeout client 30000ms #用戶端逾時
- timeout server 30000ms #伺服器逾時
- #timeout check 2000 #心跳檢測逾時
- #timeout http-keep-alive10s #預設持久連接配接逾時時間
- #timeout http-request 10s #預設http請求逾時時間
- #timeoutqueue 1m #預設隊列逾時時間
- balance roundrobin #設定預設負載均衡方式,輪詢方式
- #balance source # 設定預設負載均衡方式,類似于nginx的ip_hash
- #balnace leastconn #設定預設負載均衡方式,最小連接配接數
- ########統計頁面配置########
- listen admin_stats
- bind 0.0.0.0:1080 #設定Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱
- mode http #http的7層模式
- option httplog #采用http日志格式
- #log 127.0.0.1 local0 err #錯誤日志記錄
- maxconn 10 #預設的最大連接配接數
- stats refresh 30s #統計頁面自動重新整理時間
- stats uri /stats #統計頁面url
- stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本
- stats auth admin:admin #設定監控頁面的使用者和密碼:admin,可以設定多個使用者名
- stats auth Frank:Frank #設定監控頁面的使用者和密碼:Frank
- stats hide-version #隐藏統計頁面上HAProxy的版本資訊
- stats admin if TRUE #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本)
- ########設定haproxy 錯誤頁面#####
- errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
- errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
- errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
- errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
- errorfile 504 /home/haproxy/haproxy/errorfiles/504.http
- ########frontend前端配置##############
- bind *:80
- #這裡建議使用bind *:80的方式,要不然做叢集高可用的時候有問題,vip切換到其他機器就不能通路了。
- acl web hdr(host) -i www.abc.com
- #acl後面是規則名稱,-i是要通路的域名,
- acl img hdr(host) -i img.abc.com
- 如果通路www.abc.com這個域名就分發到下面的webserver 的作用域。
- #如果通路img.abc.com.cn就分發到imgserver這個作用域。
- use_backend webserver if web
- use_backend imgserver if img
- ########backend後端配置##############
- backend webserver #webserver作用域
- mode http
- balance roundrobin
- #banlance roundrobin 輪詢,balance source 儲存session值,支援static-rr,leastconn,first,uri等參數
- option httpchk /index.html HTTP/1.0 #健康檢查
- #檢測檔案,如果分發到背景index.html通路不到就不再分發給它
- server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3
- server web2 10.16.0.10:8085 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代表權重
- backend imgserver
- option httpchk /index.php
- balance roundrobin
- server img01 192.168.137.101:80 check inter 2000 fall 3
- server img02 192.168.137.102:80 check inter 2000 fall 3
- ########tcp配置#################
- listen test1
- bind 0.0.0.0:90
- mode tcp
- option tcplog #日志類别,采用tcplog
- maxconn 4086
- #log 127.0.0.1 local0 debug
- server s1 10.18.138.201:80 weight 1
- server s2 10.18.102.190:80 weight 1
###########全局配置#########
global
log 127.0.0.1 local0 #[日志輸出配置,所有日志都記錄在本機,通過local0輸出]
log 127.0.0.1 local1 notice #定義haproxy 日志級别[error warringinfo debug]
daemon #以背景形式運作harpoxy
nbproc 1 #設定程序數量
pidfile /home/haproxy/haproxy/conf/haproxy.pid #haproxy 程序PID檔案
ulimit-n 819200 #ulimit 的數量限制
maxconn 4096 #預設最大連接配接數,需考慮ulimit-n限制
#chroot /usr/share/haproxy #chroot運作路徑
uid 99 #運作haproxy 使用者 UID
gid 99 #運作haproxy 使用者組gid
#debug #haproxy 調試級别,建議隻在開啟單程序的時候調試
#quiet
########預設配置############
defaults
log global
mode http #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health隻會傳回OK
option httplog #日志類别,采用httplog
option dontlognull #不記錄健康檢查日志資訊
retries 2 #兩次連接配接失敗就認為是伺服器不可用,也可以通過後面設定
option forwardfor #如果後端伺服器需要獲得用戶端真實ip需要配置的參數,可以從Http Header中獲得用戶端ip
option httpclose #每次請求完畢後主動關閉http通道,haproxy不支援keep-alive,隻能模拟這種模式的實作
#option redispatch #當serverId對應的伺服器挂掉後,強制定向到其他健康的伺服器,以後将不支援
option abortonclose #當伺服器負載很高的時候,自動結束掉目前隊列處理比較久的連結
maxconn 4096 #預設的最大連接配接數
timeout connect 5000ms #連接配接逾時
timeout client 30000ms #用戶端逾時
timeout server 30000ms #伺服器逾時
#timeout check 2000 #心跳檢測逾時
#timeout http-keep-alive10s #預設持久連接配接逾時時間
#timeout http-request 10s #預設http請求逾時時間
#timeoutqueue 1m #預設隊列逾時時間
balance roundrobin #設定預設負載均衡方式,輪詢方式
#balance source # 設定預設負載均衡方式,類似于nginx的ip_hash
#balnace leastconn #設定預設負載均衡方式,最小連接配接數
########統計頁面配置########
listen admin_stats
bind 0.0.0.0:1080 #設定Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱
mode http #http的7層模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err #錯誤日志記錄
maxconn 10 #預設的最大連接配接數
stats refresh 30s #統計頁面自動重新整理時間
stats uri /stats #統計頁面url
stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin #設定監控頁面的使用者和密碼:admin,可以設定多個使用者名
stats auth Frank:Frank #設定監控頁面的使用者和密碼:Frank
stats hide-version #隐藏統計頁面上HAProxy的版本資訊
stats admin if TRUE #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本)
########設定haproxy 錯誤頁面#####
errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
errorfile 504 /home/haproxy/haproxy/errorfiles/504.http
########frontend前端配置##############
bind *:80
#這裡建議使用bind *:80的方式,要不然做叢集高可用的時候有問題,vip切換到其他機器就不能通路了。
acl web hdr(host) -i www.abc.com
#acl後面是規則名稱,-i是要通路的域名,
acl img hdr(host) -i img.abc.com
如果通路www.abc.com這個域名就分發到下面的webserver 的作用域。
#如果通路img.abc.com.cn就分發到imgserver這個作用域。
use_backend webserver if web
use_backend imgserver if img
########backend後端配置##############
backend webserver #webserver作用域
mode http
balance roundrobin
#banlance roundrobin 輪詢,balance source 儲存session值,支援static-rr,leastconn,first,uri等參數
option httpchk /index.html HTTP/1.0 #健康檢查
#檢測檔案,如果分發到背景index.html通路不到就不再分發給它
server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3
server web2 10.16.0.10:8085 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代表權重
backend imgserver
mode http
option httpchk /index.php
balance roundrobin
server img01 192.168.137.101:80 check inter 2000 fall 3
server img02 192.168.137.102:80 check inter 2000 fall 3
########tcp配置#################
listen test1
bind 0.0.0.0:90
mode tcp
option tcplog #日志類别,采用tcplog
maxconn 4086
#log 127.0.0.1 local0 debug
server s1 10.18.138.201:80 weight 1
server s2 10.18.102.190:80 weight 1
5.加上日志支援
# vim /etc/syslog.conf
在最下邊增加
local3.* /home/haproxy/haproxy/logs/haproxy.log
local0.* /home/haproxy/haproxy/logs/haproxy.log
#vim /etc/sysconfig/syslog
修改: SYSLOGD_OPTIONS="-r -m 0"
重新開機日志服務service syslog restart
6.啟動服務
啟動服務:
# /home/haproxy/haproxy/sbin/haproxy -f /home/haproxy/haproxy/conf/haproxy.cfg
重新開機服務:
# /home/haproxy/haproxy/sbin/haproxy -f /home/haproxy/haproxy/conf/haproxy.cfg -st `cat /home/haproxy/haproxy/conf/haproxy.pid`
停止服務:
# killall haproxy
7.監控
通路:http://192.168.101.125:1080/stats
配置參考:
- log 127.0.0.1 local0
- log 127.0.0.1 local1 notice
- #log loghost local0 info
- maxconn 1000
- #uid 99
- #gid 99
- daemon
- #debug
- log global
- mode http
- option httplog
- option dontlognull
- retries 3
- timeout connect 5000
- timeout client 50000
- timeout server 50000
- #log 127.0.0.1 local0 err #錯誤日志記錄
- maxconn 10 #預設的最大連接配接數
- stats admin if TRUE #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本)
- listen web 0.0.0.0:8080
- cookie SERVERID insert indirect nocache
- balance roundrobin
- server app1_1 192.168.100.204:8081 cookie app1inst1 check inter 2000 rise 2 fall 5
- server app1_2 192.168.100.208:8081 cookie app1inst2 check inter 2000 rise 2 fall 5
- listen tcptest
- bind 0.0.0.0:5222
- option tcplog #采用tcp日志格式
- balance source
- server s1 192.168.100.204:7222 weight 1
- server s2 192.168.100.208:7222 weight 1
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 1000
#uid 99
#gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
listen admin_stats
bind 0.0.0.0:1080 #設定Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱
mode http #http的7層模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err #錯誤日志記錄
maxconn 10 #預設的最大連接配接數
stats refresh 30s #統計頁面自動重新整理時間
stats uri /stats #統計頁面url
stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin #設定監控頁面的使用者和密碼:admin,可以設定多個使用者名
stats auth Frank:Frank #設定監控頁面的使用者和密碼:Frank
stats hide-version #隐藏統計頁面上HAProxy的版本資訊
stats admin if TRUE #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本)
listen web 0.0.0.0:8080
cookie SERVERID insert indirect nocache
balance roundrobin
server app1_1 192.168.100.204:8081 cookie app1inst1 check inter 2000 rise 2 fall 5
server app1_2 192.168.100.208:8081 cookie app1inst2 check inter 2000 rise 2 fall 5
listen tcptest
bind 0.0.0.0:5222
mode tcp
option tcplog #采用tcp日志格式
balance source
#log 127.0.0.1 local0 debug
server s1 192.168.100.204:7222 weight 1
server s2 192.168.100.208:7222 weight 1
關注90後夢想大師,夢想從未止步.