RabbitMQ負載均衡(2) HAProxy

2021-09-22 23:28:12 字數 3822 閱讀 4410

haproxy提供高可用性、負載均衡以及基於tcp和http應用的**,支援虛擬主機,它是免費、快速並且可靠的一種解決方案,包括twitter,reddit,stackoverflow,github在內的多家知名網際網路公司在使用。haproxy實現了一種事件驅動、單一程序模型,此模型支援非常大的併發連線數。

將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使用單一配置檔案來定義所有屬性,包括從前端ip到後端伺服器。下面展示了用於3個rabbitmq節點組成集群的負載均衡配置。這3個節點的ip位址分別為192.168.02、192.168.0.3、192.168.0.4,haproxy執行在192.168.0.9這台機器上。

#全域性配置

global

#日誌輸出配置,所有日誌都記錄在本機,通過local0輸出

log127.0.0.1

local

0 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是4層,http是7層,health只返回ok

mode tcp

#日誌類別tcplog

option tcplog

#不記錄健康檢查日誌資訊

option dontlognull

#3次失敗則認為服務不可用

retries 3

#每個程序可用的最大連線數

maxconn 2000

#連線超時

timeout connect5s

#客戶端超時

timeout client 120

s#服務端超時

timeout server 120

s#繫結配置

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監控頁面位址

s

在上面的配置中「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 :定義rabbitmq服務的內部標示,注意這裡的「rmq_node」是指包含有含義的字串名稱,不是指rabbitmq的節點名稱。

::定義rabbitmq服務的連線的ip位址和埠號。

check inter :定義了每隔多少毫秒檢查rabbitmq服務是否可用。

rise :定義了rabbitmq服務在發生故障之後,需要多少次健康檢查才能被再次確認可用。

fall :定義需要經歷多少次失敗的健康檢查之後,haproxy才會停止使用此rabbitmq服務。

weight :定義了當前rabbitmq服務的權重。

最後一段配置定義的是haproxy的資料統計頁面。資料統計頁面包含各個服務節點的狀態、連線、負載等資訊。在呼叫:

[root@node1 haproxy-1.7.8]# haproxy -f haproxy.cfg
執行haproxy之後可以在瀏覽器上輸入來載入相關的頁面,如下圖所示:

RabbitMQ 集群 負載均衡

集群的配置已經搭建好了,也成功跑通,成功做到了高可用,但是我們的程式連線節點並不會管哪個伺服器在忙 哪個伺服器空閒,完全看心情想連誰就連誰。而且 中要把每個ip的節點都手動的寫出來 既然是手動的就很有可能發現寫錯這種情況,同樣web ui 通常也不知道開啟哪個好,因為每個伺服器都有乙個 web ui...

ZK實現HA和負載均衡

思路 zk做路由,client從zk那裡拿到可用的server位址 最好這裡做個快取 通過自己的負載均衡演算法得到要連線的位址,client去連線指定server,server要做的是,當server啟動後去zk註冊自己 建立臨時檔案 子節點變化 當某台server宕機,server與zk的鏈結會斷...

rabbitmq之HAProxy負載均衡

官網 wget download 1.7 src haproxy 1.7.8.tar.gz2 安裝 檢視系統核心版本 uname r 如下圖 根據下圖選擇編譯引數 3 解壓安裝 4 配置 複製haproxy檔案到 usr sbin下 cp usr local haproxy sbin haproxy...