RabbitMQ 3.8.3 搭建鏡像集群簡明筆記


背景

項目需要用到 RabbitMQ ,同時要求做鏡像集群。

實戰

以下實驗基於 Centos6RabbitMQ 3.8.3

系統版本 ip 主機名
Centos 6 192.168.201.170 mq1
Centos 6 192.168.201.171 mq2
Centos 6 192.168.201.172 mq3

三台服務器記得配置好 hosts

cat <<EOF>> /etc/hosts
192.168.201.170 mq1
192.168.201.171 mq2
192.168.201.172 mq3
EOF

安裝

# 三台都要操作
wget https://mirrors.huaweicloud.com/rabbitmq-server/v3.8.3/rabbitmq-server-3.8.3-1.el6.noarch.rpm
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v22.3.2/erlang-22.3.2-1.el6.x86_64.rpm
yum localinstall erlang-22.3.2-1.el6.x86_64.rpm rabbitmq-server-3.8.3-1.el6.noarch.rpm -y

配置

# 三台都要操作
# 安裝簡單,配置比較麻煩
# 我這里需要修改 RabbitMQ 的默認數據目錄
mkdir -p /data/rabbitmq/{mnesia,log}
chown -R rabbitmq.rabbitmq /data/rabbitmq/
cat <<EOF> /etc/rabbitmq/rabbitmq-env.conf 
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log
EOF
#不知道為什么,只要修改過 /etc/rabbitmq 的文件,就要重新授權
chown -R rabbitmq.rabbitmq /etc/rabbitmq/
# 啟動
/etc/init.d/rabbitmq-server start
# 啟用 web 界面,此處必須,不然搭建集群會提示 “Node statistics not available”
rabbitmq-plugins enable rabbitmq_management
# 查看狀態
/etc/init.d/rabbitmq-server status

搭建普通集群

前面我們在安裝 RabbitMQ的時候也裝了 erlang,裝完以后本機會出現一個隱藏文件叫 .erlang.cookie,路徑在 $HOME/var/lib/rabbitmq/.erlang.cookie ,但是很多博客都只寫其中一個路徑。

On UNIX systems, the cookie will be typically located in /var/lib/rabbitmq/.erlang.cookie (used by the server) and $HOME/.erlang.cookie (used by CLI tools). Note that since the value of $HOME varies from user to user, it's necessary to place a copy of the cookie file for each user that will be using the CLI tools. This applies to both non-privileged users and root.

這玩意干嘛用的呢?RabbitMQ的集群是依賴erlang集群,而 erlang集群是通過這個cookie進行通信認證的,所以要保證所有機器的 .erlang.cookie 內容一致,且為只讀權限。

所以可以把 mq1.erlang.cookie 復制到 mq2mq3 機器,然后修改權限

# mq1 操作
scp /var/lib/rabbitmq/.erlang.cookie 192.168.201.171:/var/lib/rabbitmq
scp /var/lib/rabbitmq/.erlang.cookie 192.168.201.172:/var/lib/rabbitmq
# mq2、mq3 操作
chmod 400 /var/lib/rabbitmq/.erlang.cookie

mq2mq3 加入集群

rabbitmqctl stop_app
# => Stopping node rabbit@mq2 ...done.

rabbitmqctl reset
# => Resetting node rabbit@mq2 ...

# 如果要設置為內存節點,則改為 rabbitmqctl join_cluster --ram rabbit@mq1
rabbitmqctl join_cluster rabbit@mq1
# => Clustering node rabbit@mq2 with [rabbit@mq1] ...done.

rabbitmqctl start_app
# => Starting node rabbit@mq2 ...done.

查看集群狀態

rabbitmqctl cluster_status
...
Basics

Cluster name: rabbit@mq1

Disk Nodes

rabbit@mq1
rabbit@mq2
rabbit@mq3

Running Nodes

rabbit@mq1
rabbit@mq2
rabbit@mq3
...

鏡像集群

J簡單的說,鏡像隊列機制就是將隊列在 N 個節點之間設置主從關系,消息會在 N 個節點之間進行自動同步,且如果其中一個節點不可用,並不會導致消息丟失或服務不可用的情況,提升 MQ 集群的整體高可用性。

配置

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM