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...