天天看點

負載均衡-haproxy安裝配置

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?

  1. ###########全局配置#########  
  2. global  
  3.     log 127.0.0.1   local0 #[日志輸出配置,所有日志都記錄在本機,通過local0輸出]  
  4.     log 127.0.0.1   local1 notice  #定義haproxy 日志級别[error warringinfo debug]  
  5.         daemon      #以背景形式運作harpoxy  
  6.         nbproc 1   #設定程序數量  
  7.         pidfile /home/haproxy/haproxy/conf/haproxy.pid   #haproxy 程序PID檔案  
  8.     ulimit-n 819200   #ulimit 的數量限制  
  9.     maxconn 4096    #預設最大連接配接數,需考慮ulimit-n限制  
  10.         #chroot /usr/share/haproxy #chroot運作路徑  
  11.     uid 99                    #運作haproxy 使用者 UID  
  12.         gid 99                    #運作haproxy 使用者組gid  
  13.         #debug      #haproxy 調試級别,建議隻在開啟單程序的時候調試  
  14.         #quiet  
  15. ########預設配置############  
  16. defaults  
  17.     log global  
  18.         mode http               #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health隻會傳回OK  
  19.         option  httplog         #日志類别,采用httplog  
  20.     option  dontlognull     #不記錄健康檢查日志資訊  
  21.     retries 2               #兩次連接配接失敗就認為是伺服器不可用,也可以通過後面設定  
  22.     option  forwardfor   #如果後端伺服器需要獲得用戶端真實ip需要配置的參數,可以從Http Header中獲得用戶端ip  
  23.     option  httpclose    #每次請求完畢後主動關閉http通道,haproxy不支援keep-alive,隻能模拟這種模式的實作  
  24.         #option redispatch       #當serverId對應的伺服器挂掉後,強制定向到其他健康的伺服器,以後将不支援  
  25.         option abortonclose     #當伺服器負載很高的時候,自動結束掉目前隊列處理比較久的連結  
  26.         maxconn 4096            #預設的最大連接配接數  
  27.         timeout connect  5000ms  #連接配接逾時  
  28.         timeout client 30000ms  #用戶端逾時  
  29.         timeout server 30000ms  #伺服器逾時  
  30.         #timeout check 2000      #心跳檢測逾時  
  31.     #timeout http-keep-alive10s   #預設持久連接配接逾時時間  
  32.     #timeout http-request   10s   #預設http請求逾時時間  
  33.         #timeoutqueue          1m     #預設隊列逾時時間  
  34.     balance roundrobin    #設定預設負載均衡方式,輪詢方式  
  35.         #balance source        # 設定預設負載均衡方式,類似于nginx的ip_hash  
  36.         #balnace leastconn     #設定預設負載均衡方式,最小連接配接數  
  37. ########統計頁面配置########  
  38. listen admin_stats  
  39.         bind 0.0.0.0:1080               #設定Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱  
  40.         mode http                       #http的7層模式  
  41.         option httplog                  #采用http日志格式  
  42.         #log 127.0.0.1 local0 err       #錯誤日志記錄  
  43.         maxconn 10                      #預設的最大連接配接數  
  44.         stats refresh 30s               #統計頁面自動重新整理時間  
  45.         stats uri /stats                #統計頁面url  
  46.         stats realm XingCloud\ Haproxy  #統計頁面密碼框上提示文本  
  47.         stats auth admin:admin     #設定監控頁面的使用者和密碼:admin,可以設定多個使用者名  
  48.         stats auth  Frank:Frank   #設定監控頁面的使用者和密碼:Frank  
  49.         stats hide-version              #隐藏統計頁面上HAProxy的版本資訊  
  50.     stats  admin if TRUE       #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本)  
  51. ########設定haproxy 錯誤頁面#####  
  52. errorfile 403  /home/haproxy/haproxy/errorfiles/403.http  
  53. errorfile 500 /home/haproxy/haproxy/errorfiles/500.http  
  54. errorfile 502 /home/haproxy/haproxy/errorfiles/502.http  
  55. errorfile 503 /home/haproxy/haproxy/errorfiles/503.http  
  56. errorfile 504 /home/haproxy/haproxy/errorfiles/504.http  
  57. ########frontend前端配置##############  
  58. bind *:80  
  59.     #這裡建議使用bind *:80的方式,要不然做叢集高可用的時候有問題,vip切換到其他機器就不能通路了。  
  60.     acl web hdr(host) -i www.abc.com  
  61.     #acl後面是規則名稱,-i是要通路的域名,  
  62.     acl img hdr(host) -i img.abc.com  
  63.     如果通路www.abc.com這個域名就分發到下面的webserver 的作用域。  
  64.     #如果通路img.abc.com.cn就分發到imgserver這個作用域。  
  65.     use_backend webserver if web  
  66.     use_backend imgserver if img  
  67. ########backend後端配置##############  
  68. backend webserver             #webserver作用域  
  69.     mode http  
  70.     balance   roundrobin        
  71.     #banlance roundrobin 輪詢,balance source 儲存session值,支援static-rr,leastconn,first,uri等參數  
  72.     option  httpchk /index.html HTTP/1.0  #健康檢查  
  73.     #檢測檔案,如果分發到背景index.html通路不到就不再分發給它  
  74.     server  web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3  
  75.     server  web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3  
  76.     #cookie 1表示serverid為1,check inter 1500 是檢測心跳頻率    
  77.     #rise 2是2次正确認為伺服器可用,fall 3是3次失敗認為伺服器不可用,weight代表權重  
  78. backend imgserver  
  79.     option  httpchk /index.php  
  80.     balance     roundrobin                            
  81.     server      img01 192.168.137.101:80  check inter 2000 fall 3  
  82.     server      img02 192.168.137.102:80  check inter 2000 fall 3  
  83. ########tcp配置#################  
  84. listen test1  
  85.         bind 0.0.0.0:90  
  86.         mode tcp  
  87.     option  tcplog          #日志類别,采用tcplog  
  88.         maxconn 4086  
  89.         #log 127.0.0.1 local0 debug  
  90.         server s1 10.18.138.201:80  weight 1  
  91.         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

配置參考:

  1.         log 127.0.0.1   local0  
  2.         log 127.0.0.1   local1 notice  
  3.         #log loghost    local0 info  
  4.         maxconn 1000  
  5.         #uid 99  
  6.         #gid 99  
  7.         daemon  
  8.         #debug  
  9.         log     global  
  10.         mode    http  
  11.         option  httplog  
  12.         option  dontlognull  
  13.         retries 3  
  14.         timeout connect 5000  
  15.         timeout client  50000  
  16.         timeout server 50000  
  17.         #log 127.0.0.1 local0 err               #錯誤日志記錄  
  18.         maxconn 10                                              #預設的最大連接配接數  
  19.         stats  admin if TRUE       #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本)  
  20. listen  web 0.0.0.0:8080  
  21.         cookie  SERVERID insert indirect nocache  
  22.         balance roundrobin  
  23.         server  app1_1 192.168.100.204:8081 cookie app1inst1 check inter 2000 rise 2 fall 5  
  24.         server  app1_2 192.168.100.208:8081 cookie app1inst2 check inter 2000 rise 2 fall 5  
  25. listen tcptest  
  26.         bind 0.0.0.0:5222  
  27.         option tcplog                  #采用tcp日志格式  
  28.         balance source  
  29.         server s1 192.168.100.204:7222    weight 1  
  30.         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後夢想大師,夢想從未止步.