RabbitMQ負載均衡(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 #quiet
daemon
#debug
#當前進程pid文件
pidfile /opt/haproxy-1.7.8/haproxy.pid

#默認配置
defaults
#應用全局的日志配置
log global
#默認的模式mode{tcp|http|health}
#tcp是4層,http是7層,health只返回OK
mode tcp
#日志類別tcplog
option 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 1
server rmq_node2 192.168.0.3:5672 check inter 5000 rise 2 fall 3 weight 1
server rmq_node3 192.168.0.4:5672 check inter 5000 rise 2 fall 3 weight 1

#haproxy監控頁面地址
listen monitor :8100
mode http
option httplog
stats enable
stats uri /stats
stats 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來加載相關的頁面,如下圖所示:
這里寫圖片描述


歡迎支持筆者新書:《RabbitMQ實戰指南》以及關注微信公眾號:Kafka技術專欄。
這里寫圖片描述


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com