RabbitMQ负载均衡(2)——HAProxy
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-load-balance-2-haproxy/
HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案,包括Twitter,Reddit,StackOverflow,GitHub在內的多家知名互聯網公司在使用。HAProxy實現了一種事件驅動、單一進程模型,此模型支持非常大的并發連接數。
安裝HAProxy
首先需要去HAProxy的官網下載HAProxy的安裝文件,目前最新的版本為:haproxy-1.7.8.tar.gz。下載地址為http://www.haproxy.org/#down,相關文檔地址為http://www.haproxy.org/#doc1.7。
將haproxy-1.7.8.tar.gz拷貝至/opt目錄下,與RabbitMQ存放在同一個目錄中。之后解壓縮:
[root@node1 opt]# tar zxvf haproxy-1.7.8.tar.gz將源碼解壓之后,需要運行make來將HAProxy編譯為可執行程序。在執行make之前需要先選擇目標平臺,通常對于UNIX系的操作系統可以選擇TARGET=generic。下面是詳細操作:
[root@node1 opt]# cd haproxy-1.7.8 [root@node1 haproxy-1.7.8]# make TARGET=generic gcc -Iinclude -Iebtree -Wall -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement -fwrapv -DTPROXY -DENABLE_POLL -DCONFIG_HAPROXY_VERSION=\"1.7.8\" -DCONFIG_HAPROXY_DATE=\"2017/07/07\" \-DBUILD_TARGET='"generic"' \-DBUILD_ARCH='""' \-DBUILD_CPU='"generic"' \-DBUILD_CC='"gcc"' \-DBUILD_CFLAGS='"-O2 -g -fno-strict-aliasing -Wdeclaration-after-statement -fwrapv"' \-DBUILD_OPTIONS='""' \-c -o src/haproxy.o src/haproxy.c gcc -Iinclude -Iebtree -Wall -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement -fwrapv... ... gcc -g -o haproxy src/haproxy.o src/base64.o src/protocol.o src/uri_auth.o ...編譯完目錄下有名為“haproxy”的可執行文件。之后再/etc/profile中加入haproxy的路徑,內容如下:
export PATH=$PATH:/opt/haproxy-1.7.8/haproxy最后執行source /etc/profile讓此環境變量生效。
配置HAProxy
HAProxy使用單一配置文件來定義所有屬性,包括從前端IP到后端服務器。下面展示了用于3個RabbitMQ節點組成集群的負載均衡配置。這3個節點的IP地址分別為192.168.02、192.168.0.3、192.168.0.4,HAProxy運行在192.168.0.9這臺機器上。
#全局配置 global#日志輸出配置,所有日志都記錄在本機,通過local0輸出log 127.0.0.1 local0 info#最大連接數maxconn 4096#改變當前的工作目錄chroot /opt/haproxy-1.7.8#以指定的UID運行haproxy進程uid 99#以指定的GID運行haproxy進程gid 99#以守護進程方式運行haproxy #debug #quietdaemon#debug#當前進程pid文件pidfile /opt/haproxy-1.7.8/haproxy.pid#默認配置 defaults#應用全局的日志配置log global#默認的模式mode{tcp|http|health}#tcp是4層,http是7層,health只返回OKmode tcp#日志類別tcplogoption tcplog#不記錄健康檢查日志信息option dontlognull#3次失敗則認為服務不可用retries 3#每個進程可用的最大連接數maxconn 2000#連接超時timeout connect 5s#客戶端超時timeout client 120s#服務端超時timeout server 120s#綁定配置 listen rabbitmq_cluster 5671#配置TCP模式mode tcp#簡單的輪詢balance roundrobin#RabbitMQ集群節點配置server rmq_node1 192.168.0.2:5672 check inter 5000 rise 2 fall 3 weight 1server rmq_node2 192.168.0.3:5672 check inter 5000 rise 2 fall 3 weight 1server rmq_node3 192.168.0.4:5672 check inter 5000 rise 2 fall 3 weight 1#haproxy監控頁面地址 listen monitor :8100mode httpoption httplogstats enablestats uri /statsstats refresh 5s在上面的配置中“listen rabbitmq_cluster bind 192.168.0.9.5671”這里定義了客戶端連接IP地址和端口號。這里配置的負載均衡算法是roundrobin,注意這里的roundrobin是加權輪詢。和RabbitMQ最相關的是“ server rmq_node1 192.168.0.2:5672 check inter 5000 rise 2 fall 3 weight 1”這種,它定義了RabbitMQ服務,每個RabbitMQ服務定義指令包含6個部分:
server <name>:定義RabbitMQ服務的內部標示,注意這里的“rmq_node”是指包含有含義的字符串名稱,不是指RabbitMQ的節點名稱。 <ip>:<port>:定義RabbitMQ服務的連接的IP地址和端口號。 check inter <value>:定義了每隔多少毫秒檢查RabbitMQ服務是否可用。 rise <value>:定義了RabbitMQ服務在發生故障之后,需要多少次健康檢查才能被再次確認可用。 fall <value>:定義需要經歷多少次失敗的健康檢查之后,HAProxy才會停止使用此RabbitMQ服務。 weight <value>:定義了當前RabbitMQ服務的權重。最后一段配置定義的是HAProxy的數據統計頁面。數據統計頁面包含各個服務節點的狀態、連接、負載等信息。在調用:
[root@node1 haproxy-1.7.8]# haproxy -f haproxy.cfg運行HAProxy之后可以在瀏覽器上輸入http://192.168.0.9:8100/stats來加載相關的頁面,如下圖所示:
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-load-balance-2-haproxy/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的RabbitMQ负载均衡(2)——HAProxy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ负载均衡(1)
- 下一篇: RabbitMQ负载均衡(3)——Kee