起因:在實際項目開發過程中,需要使用RabbitMQ來實現消息隊列的功能,但僅僅實現功能之後並不能對自己滿足,既然學壹次,就要更深的了解她,吃壹吃架構方面的相關內容,提升自己。
RabbitMQ在鏡像集群中,機器其實是平行關系,所有的節點都是互相復制的
場景描述:
A是Master
B是Slave
A正常運行,B宕機了,只需要啟動B即可,B就會自動加入集群
A和B都宕機了,只要A在B之前啟動就可以了
A和B都宕機了,A啟動不起來了,即便是B啟動了,有可以B直接啟動不了啦
B和C都加入了A為Master的集群,這個時候都需要將B和C從A的集群中forget,B和C啟動不起來了
RabbitMQv3.2版本以後提供了壹個離線清除集群節點的命令參數,也就是節點無法啟動狀態下
HAProxy是壹款提供高可用的負載均衡器(之前大家都是使用的Nginx居多,upstream反向代理實現負載均衡非常容易),HAProxy可以基於TCP四層(Lvs也是TCP四層的),HTTP七層(Nginx是HTTP七層)的負載均衡應用代理軟件,免費高速可靠的壹種LBS解決方案
HAProxy的並發連接完全可以支持以萬為單位的
Nginx
優點:
1、工作在網絡7層之上,可針對http應用做壹些分流的策略,如針對域名、目錄結構,它的正規規則比HAProxy更為強大和靈活,所以,目前為止廣泛流行。
2、Nginx對網絡穩定性的依賴非常小,理論上能ping通就能進行負載功能。
3、Nginx安裝與配置比較簡單,測試也比較方便,基本能把錯誤日誌打印出來。
4、可以承擔高負載壓力且穩定,硬件不差的情況下壹般能支撐幾萬次的並發量。
5、Nginx可以通過端口檢測到服務器內部的故障,如根據服務器處理網頁返回的狀態碼、超時等,並會把返回錯誤的請求重新提交到另壹個節點。
6、不僅僅是優秀的負載均衡器/反向代理軟件,同時也是強大的Web應用服務器。可作為靜態網頁和圖片服務器,在高流量環境中穩定性也很好。
7、可作為中層反向代理使用。
缺點:
1、適應範圍較小,僅能支持http、https、Email協議。
2、對後端服務器的健康檢查,只支持通過端口檢測,不支持url來檢測
3、負載均衡策略比較少:輪詢、權重、IP_hash、url_hash
HAProxy
優點:
1、HAProxy是支持虛擬主機的,可以工作在4、7層(支持多網段)
2、HAProxy的優點能夠補充Nginx的壹些缺點,比如支持Session的保持,Cookie的引導;同時支持通過獲取指定的url來檢測後端服務器的狀態。
3、HAProxy跟LVS類似,本身就只是壹款負載均衡軟件;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的。
4、HAProxy支持TCP協議的負載均衡轉發,可以對MySQL讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡。
5、HAProxy負載均衡策略非常多,HAProxy的負載均衡算法現在具體有如下8種
缺點:
1、不支持POP/SMTP協議
2、不支持SPDY協議
3、不支持HTTP cache功能。現在不少開源的lb項目,都或多或少具備HTTP cache功能。
4、重載配置的功能需要重啟進程,雖然也是soft restart,但沒有Nginx的reaload更為平滑和友好。
5、多進程模式支持不夠好
HAProxy+Keepalived(負載均衡節點的高可用)
將上面的配置文件內容放入 /etc/haproxy/haproxy.cfg中
啟動HAProxy
啟用成功後可以到控制臺進行驗證
通過federation的配置來進行數據通道搭建
這個時候妳需要自己定義壹個上遊節點upstream(166節點),壹個下遊節點downstream(167節點),federation是單向發送的,相當於消息發送到upstream的壹個exchange上,然後轉發到downstream的queue上
1、 在下遊節點創建壹個exchage和壹個queue和binding的routingkey,用來進行數據接收
2、 在下遊節點建立federation upstream規則和上遊節點進行數據同步
3、 進入下遊節點的federation status沒有任何數據,需要建立策略來保證通道連通
4、 進入下遊節點的Policy菜單,Pattern是個正則表達式,這裏表示以down開頭的exchange和queue都匹配
5、 這個時候看exchange和queue,規則就應用上了
6、 這個時候去federation status看,發現上遊連接已經連接上了
7、 這個時候我們先去看上遊的overview
8、 再看上遊的exchange和queue就已經根據下遊配置的upstream和policy規則將exchange和queue創建好了
灰色的這個重定向exchange不能發送消息,如果要發送則在down-exchange上進行發送
9、 我們在上遊的down-exchange發送壹條消息,進行測試
可以在下遊查看這條消息
10、 因為上遊及節點只是壹個中轉,如果上遊及誒單也要消息down-exchange裏的消息怎麽辦?
只需要在本地建立壹個binding關系就好
不要以為每天把功能完成了就行了,這種思想是要不得的,互勉~!