1. 程式人生 > >HAProxy 參數配置

HAProxy 參數配置

策略 fall 極限 uri connect mod def 下一個 daemon

RabbitMQ集群部署完成,通過HAProxy反向代理來提供統一的對RabbitMQ的訪問入口。

1.Haproxy提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。(負載均衡策略有很多:輪詢、加權輪詢、源地址哈希、最小連接數等等)

2.為什麽使用集群?面對大量業務訪問、高並發請求可以使用高性能的服務器來提升RabbitMQ服務的負載能力。當單機容量達到極限時,采取集群的策略來對負載能力做進一步的提升和提升系統穩定性,但是這裏還存在一個負載不均衡的問題。如果一個集群中有3個節點,所有的客戶端都與其中的單個節點node1建立TCP連接,那麽node1的網絡負載必然會大大增加而顯得難以承受,其他節點又由於沒有那麽多的負載而造成硬件資源的浪費。通過使用 haproxy 的負載策略來轉發客戶端的請求到RabbitMQ集群中,緩解隊列集群中單一節點網絡負載等情況

3.RabbitMQ集群的搭建方式有多種,其中就包括我們今天要說的RabbitMQ+HAProxy的形式。

HAProxy是部署在Linux服務器的一個非常容易安裝的程序包,對於安裝我們不再贅述,我們只說明HAProxy的配置。

HAProxy部署完成以後,在配置文件/etc/haproxy/haproxy.cfg(Haproxy的安裝路徑) 的後面加上以下配置

  1 # 配置文件
  2 -------------------------------------------------------
  3 # 全局配置
  4 global
  5 
  6     # 設置日誌文件輸出定向
7 log 127.0.0.1 local3 info 8 9 # 改變當前工作目錄 10 chroot /usr/local/haproxy 11 12 # 用戶與用戶組 13 user haproxy 14 group haproxy 15 16 # 守護進程啟動,運維方式為後臺工作 17 daemon 18 19 # 最大連接數 20 maxconn 4000 21 22 # 作用於其後緊跟的listen塊,直至下一個defaults 塊,下一個default 將替換上一個塊作用於以後的listen
23 defaults 24 25 # 啟用每個實例日誌記錄事件和流量。 26 log global 27 28 # 默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK 29 mode http 30 31 # maxconn 65535 maxconn 每個進程可用的最大連接數 32 # retries 3 當對server的connection失敗後,重試的次數   33 # option abortonclose 啟用或禁用在隊列中掛起的中止請求的早期丟棄 34 # option redispatch 啟用或禁用在連接故障情況下的會話重新分配 35 # option dontlognull 啟用和禁用 記錄 空連接 36 # option httpclose 每次請求完畢後主動關閉http通道,HA-Proxy不支持keep-alive模式 37 # option forwardfor 獲得客戶端IP 38 # option httplog 記錄HTTP 請求,session 狀態和計時器 39 option httplog 40 option dontlognull 41 timeout connect 5000 42 timeout client 50000 43 timeout server 50000 44 45 46 #前端配置,http_front名稱可自定義 47 frontend http_front 48 49 # bind *:443 ssl crt /etc/haproxy/cert.pem 啟用ssl證書 50 # bind *:80 發起http請求道80端口,會被轉發到設置的ip及端口 51 bind *:80 52 53 #haproxy的狀態管理頁面,通過/haproxy?stats來訪問 54 stats uri /haproxy?stats 55 default_backend http_back 56 57 #後端配置,http_back名稱可自定義 58 backend http_back 59 60 # 負載均衡方式 61 # source 根據請求源IP 62 # static-rr 根據權重 63 # leastconn 最少連接者先處理 64 # uri 根據請求的uri 65 # url_param 根據請求的url參數 66 # rdp-cookie 據據cookie(name)來鎖定並哈希每一次請求 67 # hdr(name) 根據HTTP請求頭來鎖定每一次HTTP請求 68 # roundrobin 輪詢方式 69 balance roundrobin 70 71 #設置健康檢查頁面 72 option httpchk GET /index.html 73 74 #傳遞客戶端真實IP 75 option forwardfor header X-Forwarded-For 76 77 # inter 2000 健康檢查時間間隔2秒 78 # rise 3 檢測多少次才認為是正常的 79 # fall 3 失敗多少次才認為是不可用的 80 # weight 30 權重 81 # 需要轉發的ip及端口 82 server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30 83 server node2 192.168.179.131:8082 check inter 2000 rise 3 fall 3 weight 30 84 85 ------------------------------------------------------- 86 87 88 89 # haproxy的acl規則 90 ------------------------------------------------------- 91 92 frontend http_front 93 bind *:80 94 stats uri /haproxy?stats 95 96 #創建一個acl,is_http_back2是acl的名稱,可自定義,用於判斷主機名是否為www.back2.com 97 acl is_http_back2 hdr_end(host) www.back2.com 98 99 #通過正則判斷主機名中是否為bbs.back.com或forum.back.com 100 acl is_host_bbs hdr_reg(host) -i ^(bbs.back.com|forum.back.com) 101 102 #判斷ua是否為android 103 acl is_ua_android hdr_reg(User-Agent) -i android 104 105 #判斷主機名開頭是否為img.或css.或js. 106 acl is_host_static hdr_beg(host) -i img. css. js. 107 108 #判斷url路徑中是否有/bbs 109 acl is_path_bbs path_beg -i /bbs 110 111 #判斷url文件結尾 112 acl is_php path_end -i .php 113 114 #通過正則判斷url中結尾以 115 acl is_static_file url_reg -i /*.(css|jpg|png|jpeg|gif)$ 116 117 #效果同上 118 acl is_static_file2 path_end -i .css .jpg .png .jpeg .gif 119 120 #如果主機名是www.back2.com那麽就使用後端http_back2 121 use_backend http_back2ifis_http_back2 122 123 #默認使用的後端 124 default_backend http_back 125 126 backend http_back 127 balance roundrobin 128 option httpchk GET /index.html 129 option forwardfor header X-Forwarded-For 130 server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30 131 132 backend http_back2 133 balance roundrobin 134 option httpchk GET /index.html 135 option forwardfor header X-Forwarded-For 136 server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30 137 138 -------------------------------------------------------

4.HAProxy及RabbitMQ均部署完成後,可以通過查看HAProxy的監控頁面,來確認HAProxy是否正確安裝

技術分享圖片

5.HAProxy及RabbitMQ的部署關系

技術分享圖片

針對HAProxy參數配置,比較固定,調整的時機也很小,但每個參數都有其必要的作用,因此了解每個常用HAProxy參數是非常有必要的。

針對RabbitMQ集群,順便提一下,部署了集群以後,務必針對重要隊列開啟鏡像,因為可以最大限度的避免消息丟失。

HAProxy 參數配置