阿里云環(huán)境遷移記錄 - RabbitMQ集群搭建

來源: 阿里云
作者:layveen
時間:2021-04-09
17041
要實(shí)現(xiàn)鏡像模式,需要先搭建一個普通集群模式,在這個模式的基礎(chǔ)上再配置鏡像模式以實(shí)現(xiàn)高可用。RabbitMQ的集群節(jié)點(diǎn)包括內(nèi)存節(jié)點(diǎn)、磁盤節(jié)點(diǎn)。RabbitMQ支持消息的持久化也就是數(shù)據(jù)寫在磁盤上,默認(rèn)是磁盤節(jié)點(diǎn)。

RabbitMQ模式大概分為以下三種:

(1)單一模式。

(2)普通模式(默認(rèn)的集群模式)。

(3) 鏡像模式(把需要的隊(duì)列做成鏡像隊(duì)列,存在于多個節(jié)點(diǎn),屬于RabbiMQ的HA方案,在對業(yè)務(wù)可靠性要求較高的場合中比較適用)。

要實(shí)現(xiàn)鏡像模式,需要先搭建一個普通集群模式,在這個模式的基礎(chǔ)上再配置鏡像模式以實(shí)現(xiàn)高可用。

RabbitMQ的集群節(jié)點(diǎn)包括內(nèi)存節(jié)點(diǎn)、磁盤節(jié)點(diǎn)。

RabbitMQ支持消息的持久化也就是數(shù)據(jù)寫在磁盤上,默認(rèn)是磁盤節(jié)點(diǎn)。

RabbitMQ相關(guān)端口

4369 (epmd), 25672 (Erlang distribution)

5672, 5671 (AMQP 0-9-1 without and with TLS)

15672 (if management plugin is enabled)

61613, 61614 (if STOMP is enabled)

1883, 8883 (if MQTT is enabled)

RabbitMQ 集群節(jié)點(diǎn)設(shè)置

server103.example.com IP: 192.168.72.103 Node: disk

server105.example.com IP: 192.168.72.105 Node: disk

server106.example.com IP: 192.168.72.106 Node: disk

rabbitMQ單機(jī)安裝配置

1. 安裝erlang依賴

yum install -y epel-release

或者通過yum源安裝

#添加EPEL源

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

添加Erlang源

rpm -Uvh http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

2. 安裝RabbitMQ Server

yum install -y rabbitmq-server

(默認(rèn)安裝目錄為:/usr/lib/rabbitmq/bin/)

或者通過yum源安裝

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm

rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc

yum install rabbitmq-server-3.6.1-1.noarch.rpm

3. 單機(jī)配置

#調(diào)整系統(tǒng)限制

vi /etc/sysctl.conf

fs.file-max = 300000

#設(shè)置生效

sysctl -p

#查看

sysctl fs.file-max

#調(diào)整用戶限制

vi /etc/security/limits.conf

*              soft     nofile          65536

*              hard     nofile          65536

#添加host

echo "192.168.72.103 server103" >> /etc/hosts

#防火墻打開端口

firewall-cmd --permanent --add-port=15672/tcp

firewall-cmd –-reload

#設(shè)置自動重啟

chkconfig rabbitmq-server on

service rabbitmq-server start

#啟動監(jiān)控插件

rabbitmq-plugins list //查看插件安裝情況

rabbitmq-plugins enable rabbitmq_management //啟用rabbitmq_management服務(wù)

4. 用戶管理

#添加用戶

rabbitmqctl add_user admin admin

rabbitmqctl add_user travel 88gongxiangrbq

#設(shè)置用戶角色

rabbitmqctl set_user_tags admin administrator

rabbitmqctl set_user_tags travel administrator

#設(shè)置用戶權(quán)限(設(shè)置admin用戶配置、寫、讀的權(quán)限)

rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

rabbitmqctl set_permissions -p / travel ".*" ".*" ".*"

#刪除guest用戶

rabbitmqctl delete_user guest

rabbitmq從3.3.0開始禁止使用guest/guest權(quán)限通過除localhost外的訪問。

如果想使用guest/guest通過遠(yuǎn)程機(jī)器訪問,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中設(shè)置loopbackusers為[]。

[{rabbit, [{loopbackusers, []}]}].

#管理界面

在瀏覽器中打開http://192.268.72.104:15672

#默認(rèn)配置說明

cat /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.1/sbin/rabbitmq-defaults

系統(tǒng)prefix是空

配置文件路徑是 /etc/rabbitmq/rabbitmq.config (erlang會自動加上.config后綴)

環(huán)境配置文件是 /etc/rabbitmq/rabbitmq-env.conf

日志文件目錄是 /var/log/rabbitmq

插件文件目錄是 安裝目錄下的plugins,這里RPM安裝方式下是 /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.1/plugins

集群配置

1. 配置三臺機(jī)器的主機(jī)名(三臺機(jī)器分別執(zhí)行)

hostnamectl set-hostname server103

hostnamectl set-hostname server105

hostnamectl set-hostname server106

查看效果:

hostname

配置三臺機(jī)器的hosts解析(三臺機(jī)器都添加如下配置)

vi /etc/hosts

192.168.72.103 server103

192.168.72.105 server105

192.168.72.106 server106

2. 設(shè)置每個節(jié)點(diǎn)Cookie

Rabbitmq的集群是依賴于erlang的集群來工作的,所以必須先構(gòu)建起erlang的集群環(huán)境。Erlang的集群中各節(jié)點(diǎn)是通過一個magic cookie來實(shí)現(xiàn)的,這個cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的權(quán)限。所以必須保證各節(jié)點(diǎn)cookie保持一致,否則節(jié)點(diǎn)之間就無法通信

選擇其中一臺作為集群主節(jié)點(diǎn),將其cookiecopy到另外兩臺機(jī)器上。

chmod 700 /var/lib/rabbitmq/.erlang.cookie

echo -n "YACWQCCKIKHSVKFFJYBL" > /var/lib/rabbitmq/.erlang.cookie

chmod 400 /var/lib/rabbitmq/.erlang.cookie

網(wǎng)上看到有些朋友,將其中一臺的cookie,遠(yuǎn)程發(fā)送到其他節(jié)點(diǎn)服務(wù)器,這樣容易導(dǎo)致cookie文件的屬組變化,默認(rèn)為rabbitmq,下面的一個錯誤會提到。

#修改cookie后需要重啟mq

ps -ef | grep ^rabbitmq | awk '{print $2}' | xargs kill -9

service rabbitmq-server start

常見的啟動失?。?/p>

Starting rabbitmq-server (via systemctl): Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.

查看日志:

tail -f /var/log/rabbitmq/startup_log 

{error_logger,{{2019,2,19},{16,10,19}},"Error when reading /var/lib/rabbitmq/.erlang.cookie: eacces",[]}

{error_logger,{{2019,2,19},{16,10,19}},crash_report,[[{initial_call,{auth,init,['Argument__1']}},{pid,<0.20.0>},{registered_name,[]},{error_info,{exit,{"Error when reading /var/lib/rabbitmq/.erlang.cookie: eacces",[{auth,init_cookie,0,[{file,"auth.erl"},{line,285}]},{auth,init,1,[{file,"auth.erl"},{line,139}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}},{ancestors,[net_sup,kernel_sup,<0.10.0>]},{messages,[]},{links,[<0.18.0>]},{dictionary,[]},{trap_exit,true},{status,running},{heap_size,610},{stack_size,27},{reductions,643}],[]]}

主要是訪問cookie失敗導(dǎo)致的,可以嘗試修改cookie的權(quán)限和屬組:

cd /var/lib/rabbitmq/

chown rabbitmq:rabbitmq .erlang.cookie

chmod 400 .erlang.cookie

啟動成功后查看狀態(tài):

rabbitmqctl status

狀態(tài)顯示可能會遇到鏈接不上的錯誤,如下:

Status of node rabbit@server104 ...

Error: unable to connect to node rabbit@server104: nodedown

DIAGNOSTICS

attempted to contact: [rabbit@server104]

rabbit@server104:

  * connected to epmd (port 4369) on server104

  * epmd reports node 'rabbit' running on port 25672

  * TCP connection succeeded but Erlang distribution failed

  * suggestion: hostname mismatch?

  * suggestion: is the cookie set correctly?

  * suggestion: is the Erlang distribution using TLS?

原因:

RabbitMQ的erlang.cookie和用戶的cookie沖突了,需要用rabbitmq的cookie去覆蓋用戶的cookie。

解決方式:

sudo cp /var/lib/rabbitmq/.erlang.cookie ——/.erlang.cookie

重啟

加入集群

將 server103、server105 、server106組成集群:

默認(rèn)是磁盤節(jié)點(diǎn),如果是內(nèi)存節(jié)點(diǎn)的話,需要加--ram參數(shù)

在server103、server105上分別運(yùn)行:

rabbitmqctl stop_app

rabbitmqctl join_cluster rabbit@server106 --ram

rabbitmqctl start_app

3427953d96e97853f6d95419931a5db1.png

#將節(jié)點(diǎn)從集群中去掉

rabbitmqctl forget_cluster_node rabbit@server104

節(jié)點(diǎn)恢復(fù)過程中把數(shù)據(jù)刪掉很重要,恢復(fù)一單結(jié)點(diǎn),再清數(shù)據(jù)

節(jié)點(diǎn)增加:

1. rabbitmq-server -detached   --- .erlang.cooike的權(quán)限,400 屬主rabbitmq

2. rabbitmqctl stop_app

3. rabbitmqctl join_cluster --ram rabbit@rabbitmq1

4. rabbitmqctl start_app

5. rabbitmqctl  cluster_status

節(jié)點(diǎn)刪除

1.  rabbitmq-server -detached

以上為基礎(chǔ),正常運(yùn)行的mq節(jié)點(diǎn)直接進(jìn)行2、3兩步;4可省略或更改為rabbitmqctl stop

2. rabbitmqctl stop_app

3. rabbitmqctl reset 

4. rabbitmqctl start_app

設(shè)置鏡像策略

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

如果想切換節(jié)點(diǎn)類型,譬如由disc-->ram,可以先恢復(fù)到單結(jié)點(diǎn),重啟,清數(shù)據(jù),再添加集群。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于阿里云,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
阿里云助力《誅仙世界》端游正式開服!
阿里云助力《誅仙世界》端游正式開服!
近?,完美世界游戲歷時多年打造的新國?仙俠MMORPG端游《誅仙世界》在阿?云上正式開服。
阿里云
云服務(wù)
2024-12-292024-12-29
一文詳解阿里云AI大基建
一文詳解阿里云AI大基建
面向AI時代,阿里云基礎(chǔ)設(shè)施是如何創(chuàng)新與發(fā)展的?計(jì)算、網(wǎng)絡(luò)、存儲、服務(wù)器、集群、可觀測等,阿里云全新升級的AI Infra到底有哪些重磅更新?
阿里云
云服務(wù)
2024-11-022024-11-02
AI時代云安全新范式,阿里云安全能力全線升級!
AI時代云安全新范式,阿里云安全能力全線升級!
AI時代,云安全面臨著新的挑戰(zhàn),不僅要持續(xù)面對以往的傳統(tǒng)問題,更需要全新理念落地于產(chǎn)品設(shè)計(jì)、技術(shù)演進(jìn)、架構(gòu)設(shè)計(jì),才能實(shí)現(xiàn)效果、性能、和成本的最優(yōu)解。
AI
阿里云
云服務(wù)
2024-09-272024-09-27
連續(xù)四年!阿里云領(lǐng)跑中國公有云大數(shù)據(jù)平臺
連續(xù)四年!阿里云領(lǐng)跑中國公有云大數(shù)據(jù)平臺
近日,國際數(shù)據(jù)公司(IDC)發(fā)布《中國大數(shù)據(jù)平臺市場份額,2023:數(shù)智融合時代的真正到來》報告——2023年中國大數(shù)據(jù)平臺公有云服務(wù)市場規(guī)模達(dá)72.2億元人民幣,其中阿里巴巴市場份額保持領(lǐng)先,占比達(dá)40.2%,連續(xù)四年排名第一。
阿里云
云服務(wù)
2024-09-182024-09-18
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家