一、單機多節點集羣-普通模式
1、停止RabbitMQ 服務
systemctl stop rabbitmq-server
2、啓動第一個節點
- 沒有指定web管理控制檯使用的端口則默認使用15672
RABBITMQ_NODE_PORT=5673 RABBITMQ+NODENAME=rabbit1 rabbitmq-server start
3、啓動第二個節點
- 需要指定web管理控制檯使用的端口,這裏指定爲:15674
RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server start
4、將rabbit1作爲主節點
# 先停止節點服務
rabbitmqctl -n rabbit1 stop_app
# 重置節點服務
rabbitmqctl -n rabbit1 rest
# 啓動節點服務
rabbitmqctl -n rabbit1 start_app
5、將rabbit2作爲從節點
# 停止節點服務
rabbitmqctl -n rabbit2 stop_app
# 重置節點服務
rabbitmqctl -n rabbit2 reset
# 將rabbit2節點作爲從節點添加到主節點rabbit1,其中localhost是主機名換成自己的即可
rabbitmqctl -n rabbit2 join_cluster rabbit1@'localhost'
# 啓動節點服務
rabbitmqctl -n rabbit2 start_app
6、訪問web管理控制檯
- 如下圖所示已經成功啓動了兩個節點
二、RabbitMQ鏡像集羣配置-鏡像模式
上面已經完成RabbitMQ多節點普通模式集羣配置,普通模式集羣並不保證隊列的高可用性,雖然交換機綁定隊列這些可以複製到集羣的任何一個節點,但是隊列內容不會複製。如果想要在隊列節點宕機或故障也正常應用,就要複製(同步)隊列內容到集羣裏的每一個節點,此時需要將隊列做成鏡像隊列,將普通模式變成鏡像模式:消息會主動在鏡像節點間同步。
鏡像模式要依賴policy模塊,這個模塊是做什麼用的呢?Policy中文來說是政策或策略的意思:它就是要設置那些Exchanges或者queue的數據需要複製、同步,如何複製同步?對就是做這些的。設置Policy可以通過管理網頁設置:如下圖
- Name: 策略名稱
- Pattern: 匹配規則,如果匹配所有的隊列,是^
- Definition: 使用ha-mode模式中的all,表示同步所有匹配的隊列。
也可以通過如下命令設置:
rabbitmqctl set_policy my_ha "^" '{"ha-mode":"all"}'
配置完看隊列如下,其中標識my_ha的說明使用my_ha策略,屬於鏡像模式,沒有表示的就是普通模式
三、負載均衡-HAProxy
1、安裝HAProxy
# 下載HAProxy地址:https://pan.baidu.com/s/1NzhZc85jxOJsx9plnXi6qQ
# 將安裝包上傳到Linux系統
# 下載依賴包
yum install gcc vim wget
# 解壓安裝包
tar -xvf haproxy-1.8.10.tar.gz -C /usr/local
# 進入解壓目錄
cd /usr/local/haproxy-1.8.10
# 執行編譯命令
make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy
# 執行安裝命令
make install PREFIX=/usr/local/haproxy
# 查看haproxy版本
/usr/local/haproxy/sbin/haproxy -v
2、配置HAProxy
# 創建配置文件所在的目錄
mkdir /etc/haproxy
# 創建haproxy配置文件
vim /etc/haproxy/haproxy.cfg
- 配置內容如下:
global
log 127.0.0.1 local0 info
maxconn 4096
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 20
pidfile /var/run/haproxy.pid
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
timeout connect 5s
timeout client 120s
timeout server 120s
listen rabbitmq_cluster
# 定義監聽地址和端口,本機的5672端口
bind 0.0.0.0:5672
# 配置 tcp 模式
mode tcp
# 簡單的輪詢
balance roundrobin
#rabbitmq集羣節點配置 #inter 每隔五秒對mq集羣做健康檢查,2次正確證明服務器可用,
#3次失敗證明服務器不可用,並且配置主備機制
server node1 127.0.0.1:5673 check inter 5000 rise 2 fall 3
server node2 127.0.0.1:5674 check inter 5000 rise 2 fall 3
# 配置 haproxy web 監控,查看統計信息
listen stats
bind 192.168.33.100:8100
mode http
option httplog
stats enable
# 設置 haproxy 監控地址爲:http://192.168.33.100:8100/rabbitmq-stats
stats uri /rabbitmq-stats
stats refresh 5s
3、啓動HAProxy
# 啓動HAProxy並指定配置文件
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
# 瀏覽器訪問如下地址對mq節點進行監控
http://192.168.33.100:8100/rabbitmq-stats
4、注意事項
- 代碼中訪問mq集羣地址則變爲訪問haproxy地址:5672