1. 程式人生 > >負載均衡-haproxy安裝配置

負載均衡-haproxy安裝配置

用戶 dont source .net 錯誤頁 plog oar ack blank

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. mode http
  80. option httpchk /index.php
  81. balance roundrobin
  82. server img01 192.168.137.101:80 check inter 2000 fall 3
  83. server img02 192.168.137.102:80 check inter 2000 fall 3
  84. ########tcp配置#################
  85. listen test1
  86. bind 0.0.0.0:90
  87. mode tcp
  88. option tcplog #日誌類別,采用tcplog
  89. maxconn 4086
  90. #log 127.0.0.1 local0 debug
  91. server s1 10.18.138.201:80 weight 1
  92. 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

技術分享

配置參考:

[plain] view plain copy print?技術分享技術分享
  1. global
  2. log 127.0.0.1 local0
  3. log 127.0.0.1 local1 notice
  4. #log loghost local0 info
  5. maxconn 1000
  6. #uid 99
  7. #gid 99
  8. daemon
  9. #debug
  10. #quiet
  11. defaults
  12. log global
  13. mode http
  14. option httplog
  15. option dontlognull
  16. retries 3
  17. timeout connect 5000
  18. timeout client 50000
  19. timeout server 50000
  20. listen admin_stats
  21. bind 0.0.0.0:1080 #設置Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱
  22. mode http #http的7層模式
  23. option httplog #采用http日誌格式
  24. #log 127.0.0.1 local0 err #錯誤日誌記錄
  25. maxconn 10 #默認的最大連接數
  26. stats refresh 30s #統計頁面自動刷新時間
  27. stats uri /stats #統計頁面url
  28. stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本
  29. stats auth admin:admin #設置監控頁面的用戶和密碼:admin,可以設置多個用戶名
  30. stats auth Frank:Frank #設置監控頁面的用戶和密碼:Frank
  31. stats hide-version #隱藏統計頁面上HAProxy的版本信息
  32. stats admin if TRUE #設置手工啟動/禁用,後端服務器(haproxy-1.4.9以後版本)
  33. listen web 0.0.0.0:8080
  34. cookie SERVERID insert indirect nocache
  35. balance roundrobin
  36. server app1_1 192.168.100.204:8081 cookie app1inst1 check inter 2000 rise 2 fall 5
  37. server app1_2 192.168.100.208:8081 cookie app1inst2 check inter 2000 rise 2 fall 5
  38. listen tcptest
  39. bind 0.0.0.0:5222
  40. mode tcp
  41. option tcplog #采用tcp日誌格式
  42. balance source
  43. #log 127.0.0.1 local0 debug
  44. server s1 192.168.100.204:7222 weight 1
  45. 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

負載均衡-haproxy安裝配置