使用Haproxy實現負載均衡,使用 Keepalive 實現高可用,整體架構圖如下。
:-: 
<br/>
搭建步驟如下:
[TOC]
# 1. haproxy實現負載均衡
HAProxy 提供高可用性、負載均衡及基于 TCPHTTP 應用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案,包括 Twitter、Reddit、StackOverflow、GitHub 在內的多家知名互聯網公司在使用。HAProxy 實現了一種事件驅動、單一進程模型,此模型支持非常大的井發連接數。
<br/>
擴展 nginx、lvs、haproxy 之間的區別: http://www.ha97.com/5646.html
<br/>
**1. 下載 haproxy(在 node1 和 node2)**
```shell
yum -y install haproxy
```
**2.node1 和 node2 的 haproxy.cfg 都修改如下**
```shell
------------node1,ip為node1的ip------------
# vim /etc/haproxy/haproxy.cfg
#配置集群節點
backend app
balance roundrobin #輪詢算法
server node1 192.168.0.109:5672 check
server node2 192.168.0.112:5672 check
server node3 192.168.0.113:5672 check
#監控頁面地址
listen private_monitoring :8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s # 5s刷新頁面
```
**3.分別啟動node1和node2的 haproxy**
```shell
haproxy -f /etc/haproxy/haproxy.cfg
ps -ef | grep haproxy
```
**4.訪問監控地址**
http://192.168.0.109:8100/stats ,或者 http://192.168.0.112:8100/stats 。

<br/>
# 2. Keepalive實現高可用
*本節沒有完善,不能用*
<br/>
試想如果前面配置的 HAProxy 主機突然宕機或者網卡失效,那么雖然 RbbitMQ 集群沒有任何故障但是對于外界的客戶端來說所有的連接都會被斷開,結果將是災難性的。為了確保負載均衡服務的可靠性同樣顯得十分重要,這里就要引入 Keepalived, 它能夠通過自身健康檢查、資源接管功能做高可用(雙機熱備),實現故障轉移。
**1. node1和node2上下載 Keepalive**
```shell
yum -y install keepalived
```
**2. 修改 node1上的 keepalived.conf**
```shell
[root@node1 ~]# vim /etc/keepalived/keepalived.conf
```
**3. 修改 node2 上的 keepalived.conf**
```shell
[root@node2 ~]# vim /etc/keepalived/keepalived.conf
```
**4. 在 node1 和 node2 上都編寫下面的監控腳本**
為了防止 HAProxy 服務掛掉之后 Keepalived 還在正常工作而沒有切換到 Backup 上,所以這里需要編寫一個腳本來檢測 HAProxy 務的狀態,當 HAProxy 服務掛掉之后該腳本會自動重啟HAProxy 的服務,如果不成功則關閉 Keepalived 服務,這樣便可以切換到 Backup 繼續工作。
```shell
# vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
haproxy -f /etc/haproxy/haproxy.cfg
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi
# chmod 777 /etc/keepalived/check_haproxy.sh
```
**5. 啟動 node1 和 node2 上的 keepalive 服務**
```shell
systemctl start keepalived
```
**6. 跟蹤日志的命令**
```shell
tail -f /var/log/messages -n 200
```
- 消息隊列
- 什么是MQ
- MQ的作用
- MQ的分類
- MQ的選擇
- RabbitMQ
- RabbitMQ是什么
- 四大核心概念
- 工作原理
- 環境搭建
- windows系統下的搭建
- centos7系統下的搭建
- 常用命令
- 服務相關命令
- 管理用戶命令
- 管理隊列命令
- 第一個RabbitMQ程序
- 工作隊列
- 輪詢分發消息
- 消息應答
- 持久化
- 發布確認
- 發布確認原理
- 發布確認策略
- 交換機概念
- 交換機類型
- 無名交換機
- Fanout交換機
- Direct交換機
- Topic交換機
- 死信隊列
- 死信概念
- 死信來源
- 死信實戰
- 延遲隊列
- 什么是延遲隊列
- TTL設置方式
- 隊列TTL延遲隊列
- 消息TTL延遲隊列
- 插件打造延遲隊列
- 延遲隊列總結
- 發布確認高級
- 代碼實現
- 回退消息
- 備份交換機
- 冪等性
- 冪等性概念
- 消息重復消費
- 消費端冪等性保障
- 優先級隊列
- 使用場景
- 設置優先級
- 惰性隊列
- 什么是惰性隊列
- 隊列的兩種模式
- 聲明惰性隊列
- RabbitMQ集群
- 為什么要搭建集群
- 集群搭建步驟
- 集群工作方式
- 脫離集群
- 鏡像隊列
- 高可用負載均衡