rabbitmq單機到集羣完整搭建

RabbitMQ 安裝和使用

一、安裝依賴環境

二、安裝RabbitMQ

三、啓動和關閉

四、開啓Web管理插件

五、防火牆添加端口

多機多節點集羣部署

一、 環境準備

二、修改配置文件

三、防火牆添加端口

四、啓動RabbitMQ

單機多節點部署

一、環境準備

二、啓動RabbitMQ

三、防火牆添加端口

鏡像隊列模式集羣

RabbitMQ 安裝和使用

一、安裝依賴環境

1.在 http://www.rabbitmq.com/which-erlang.html 頁面查看安裝rabbitmq需要安裝erlang對應的版本

2.在 https://github.com/rabbitmq/erlang-rpm/releases 頁面找到需要下載的erlang版本,erlang-*.centos.x86_64.rpm就是centos版本的。
3.複製下載地址後,使用wget命令下載

wget -P /home/download https://github.com/rabbitmq/erlang-rpm/releases/download/v21.2.3/erlang-21.2.3-1.el7.centos.x86_64.rpm

4.安裝 Erlang

sudo rpm -Uvh /home/download/erlang-21.2.3-1.el7.centos.x86_64.rpm

5.安裝 socat

sudo yum install -y socat

二、安裝RabbitMQ

1.在官方下載頁面找到CentOS7版本的下載鏈接,下載rpm安裝包

wget -P /home/download https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm

提示:可以在https://github.com/rabbitmq/rabbitmq-server/tags下載歷史版本
2.安裝RabbitMQ

sudo rpm -Uvh /home/download/rabbitmq-server-3.7.9-1.el7.noarch.rpm

三、啓動和關閉

•啓動服務

sudo systemctl start rabbitmq-server

•查看狀態

sudo systemctl status rabbitmq-server

•停止服務

sudo systemctl stop rabbitmq-server

•設置開機啓動

sudo systemctl enable rabbitmq-server

四、開啓Web管理插件

1.開啓插件

rabbitmq-plugins enable rabbitmq_management

說明:rabbitmq有一個默認的guest用戶,但只能通過localhost訪問,所以需要添加一個能夠遠程訪問的用戶。

2.添加用戶

rabbitmqctl add_user admin admin

3.爲用戶分配操作權限

rabbitmqctl set_user_tags admin administrator

4.爲用戶分配資源權限

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

五、防火牆添加端口

•RabbitMQ 服務啓動後,還不能進行外部通信,需要將端口添加都防火牆
1.添加端口

sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent

sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent

sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

2.重啓防火牆

sudo firewall-cmd --reload

多機多節點集羣部署

一、 環境準備

•準備三臺安裝好RabbitMQ 的機器,安裝方法見 安裝步驟

10.10.1.4110.10.1.4210.10.1.43

提示:如果使用虛擬機,可以在一臺VM上安裝好RabbitMQ後,創建快照,從快照創建鏈接克隆,會節省很多磁盤空間

二、修改配置文件

  • 1.修改10.10.1.41機器上的/etc/hosts文件
sudo vim /etc/hosts
  • 2.添加IP和節點名
10.10.1.41 node1
10.10.1.42 node2
10.10.1.43 node3
  • 3.將10.10.1.41上的hosts文件複製到另外兩臺機器上
sudo scp /etc/hosts root@node2:/etc/
sudo scp /etc/hosts root@node3:/etc/

說明:命令中的root是目標機器的用戶名,命令執行後,可能會提示需要輸入密碼,輸入對應用戶的密碼就行了

  • 4.將10.10.1.41上的/var/lib/rabbitmq/.erlang.cookie文件複製到另外兩臺機器上
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/

提示:如果是通過克隆的VM,可以省略這一步
三、防火牆添加端口
•給每臺機器的防火牆添加端口
– 1.添加端口

sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent

sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent

sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

– 2.重啓防火牆

sudo firewall-cmd --reload

四、啓動RabbitMQ

1.啓動每臺機器的RabbitMQ

sudo systemctl start rabbitmq-server

或者

rabbitmq-server -detached

2.將10.10.1.42加入到集羣

停止RabbitMQ 應用

rabbitmqctl stop_app

重置RabbitMQ 設置

rabbitmqctl reset

加入到集羣

rabbitmqctl join_cluster rabbit@node1 --ram

啓動RabbitMQ 應用

rabbitmqctl start_app

3.查看集羣狀態,看到running_nodes,[rabbit@node1,rabbit@node2]表示節點啓動成功

rabbitmqctl cluster_status

提示:在管理界面可以更直觀的看到集羣信息

4.將10.10.1.43加入到集羣

停止 RabbitMQ 應用

rabbitmqctl stop_app

重置 RabbitMQ 設置

rabbitmqctl reset

節點加入到集羣

rabbitmqctl join_cluster rabbit@node1 --ram

啓動 RabbitMQ 應用

rabbitmqctl start_app

5.重複地3步,查看集羣狀態

單機多節點部署

一、環境準備
•準備一臺已經安裝好RabbitMQ 的機器,安裝方法見 安裝步驟 ◦10.10.1.41

二、啓動RabbitMQ

1.在啓動前,先修改RabbitMQ 的默認節點名(非必要),在/etc/rabbitmq/rabbitmq-env.conf增加以下內容

1

RabbitMQ 默認節點名,默認是rabbit

2

3
NODENAME=rabbit1

2.RabbitMQ 默認是使用服務的啓動的,單機多節點時需要改爲手動啓動,先停止運行中的RabbitMQ 服務

1
sudo systemctl stop rabbitmq-server

3.啓動第一個節點

1
rabbitmq-server -detached

4.啓動第二個節點

1
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached

5.啓動第三個節點

1
RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached

6.將rabbit2加入到集羣

1

停止 rabbit2 的應用

2

3
rabbitmqctl -n rabbit2 stop_app

4

5

重置 rabbit2 的設置

6

7
rabbitmqctl -n rabbit2 reset

8

9

rabbit2 節點加入到 rabbit1的集羣中

10

11
rabbitmqctl -n rabbit2 join_cluster rabbit1 --ram

12

13

啓動 rabbit2 節點

14

15
rabbitmqctl -n rabbit2 start_app

7.將rabbit3加入到集羣

1

停止 rabbit3 的應用

2

3
rabbitmqctl -n rabbit3 stop_app

4

5

重置 rabbit3 的設置

6

7
rabbitmqctl -n rabbit3 reset

8

9

rabbit3 節點加入到 rabbit1的集羣中

10

11
rabbitmqctl -n rabbit3 join_cluster rabbit1 --ram

12

13

啓動 rabbit3 節點

14

15
rabbitmqctl -n rabbit3 start_app

8.查看集羣狀態,看到{running_nodes,[rabbit3@node1,rabbit2@node1,rabbit1@node1]}說明節點已啓動成功。

1
rabbitmqctl cluster_status

提示:在管理界面可以更直觀的看到集羣信息

三、防火牆添加端口

•需要將每個節點的端口都添加到防火牆

1.添加端口

1
sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent

2
sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent

3
sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent

4
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

5
sudo firewall-cmd --zone=public --add-port=5673/tcp --permanent

6
sudo firewall-cmd --zone=public --add-port=25673/tcp --permanent

7
sudo firewall-cmd --zone=public --add-port=15673/tcp --permanent

8
sudo firewall-cmd --zone=public --add-port=5674/tcp --permanent

9
sudo firewall-cmd --zone=public --add-port=25674/tcp --permanent

10
sudo firewall-cmd --zone=public --add-port=15674/tcp --permanent

2.重啓防火牆

1
sudo firewall-cmd --reload

鏡像隊列模式集羣
•鏡像隊列屬於RabbitMQ 的高可用方案,見:https://www.rabbitmq.com/ha.html#mirroring-arguments
•通過前面的步驟搭建的集羣屬於普通模式集羣,是通過共享元數據實現集羣

•開啓鏡像隊列模式需要在管理頁面添加策略,添加方式:
a.進入管理頁面 -> Admin -> Policies(在頁面右側)-> Add / update a policy

b.在表單中填入:

1
name: ha-all

2
Pattern: ^

3
Apply to: Queues

4
Priority: 0

5
Definition: ha-mode = all

參數說明

name: 策略名稱,如果使用已有的名稱,保存後將會修改原來的信息

Apply to:策略應用到什麼對象上

Pattern:策略應用到對象時,對象名稱的匹配規則(正則表達式)

Priority:優先級,數值越大,優先級越高,相同優先級取最後一個

Definition:策略定義的類容,對於鏡像隊列的配置來說,只需要包含3個部分: ha-mode 、ha-params 和 ha-sync-mode。其中,ha-sync-mode是同步的方式,自動還是手動,默認是自動。ha-mode 和 ha-params 組合使用。組合方式如下:

ha-mode

ha-params

說明

all (empty) 隊列鏡像到集羣類所有節點
exactly count 隊列鏡像到集羣內指定數量的節點。如果集羣內節點數少於此值,隊列將會鏡像到所有節點。如果大於此值,而且一個包含鏡像的節點停止,則新的鏡像不會在其它節點創建。
nodes nodename 隊列鏡像到指定節點,指定的節點不在集羣中不會報錯。當隊列申明時,如果指定的節點不在線,則隊列會被創建在客戶端所連接的節點上。

•鏡像隊列模式相比較普通模式,鏡像模式會佔用更多的帶寬來進行同步,所以鏡像隊列的吞吐量會低於普通模式

•但普通模式不能實現高可用,某個節點掛了後,這個節點上的消息將無法被消費,需要等待節點啓動後才能被消費。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章