Rabbitmq羣集搭建

Rabbitmq羣集搭建

實驗介紹

MQ(Message Queue消息隊列)是一種應用程序對應用程序的通訊方法。應用程序經過讀寫出入隊列的消息(針對應用程序的數據)來通訊,而無需專用連接來鏈接他們。消息傳遞指的是程序之間經過在消息中發送數據進行通訊,而不是經過直接調用彼此來通訊,直接調用一般是用於諸如遠程過程調用的技術。排隊指的是應用程序經過隊列來通訊。隊列的使用除去接收和發送應用程序同時執行的要求。node

RabbitMQ是實現AMQP(高級消息隊列協議)的消息中間件的一種,最初起源於金融系統,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。RabbitMQ主要是爲了實現系統之間的雙向解耦而實現的。當生產者大量產生數據時,消費者沒法快速消費,那麼須要一箇中間層。保存這個數據。git

AMQP,即Advanced Message Queuing Protocol,高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。web

MQ實際應用

RabbitMQ使用Erlang開發的,集羣很是方便,由於Erlang天生就是一門分佈式語言,但其自己並不支持負載均衡。RabbitMQ模式大概分爲三種:vim

  • 單一模式
  • 普通模式(默認就是集羣模式)
  • 鏡像模式(把須要的隊列作成鏡像隊列,存在於多個節點,屬於RabbitMQ的HA方案,在對業務可靠性較高的場合中比較適用)
    要實現鏡像模式,首先須要搭建一個普通集羣模式,在這個模式的基礎上再配置鏡像模式以實現高可用。

試驗環境

IP地址 主機名 操做系統 用途
192.168.58.141 rabbitmq01 CentOS7 磁盤節點
192.168.58.132 rabbitmq02 CentOS7 內存節點
192.168.58.130 rabbitmq03 CentOS7 內存節點

實驗部署

首先咱們須要配置三個節點的hosts文件,將下面內容分別加入到三臺服務器上。瀏覽器

[root@rabbitmq01 /]# vim /etc/hosts
192.168.58.141 rabbitmq01
192.168.58.132 rabbitmq02
192,168.58.130 rabbitmq03

而後須要修改三個節點的主機名,修改每一個節點的/etc/hostname文件安全

[root@rabbitmq01 /]# vim /etc/hostname 
rabbitmq01
[root@rabbitmq02 /]# vim /etc/hostname 
rabbitmq02
[root@rabbitmq03 /]# vim /etc/hostname 
rabbitmq03

而後將三個節點重啓,當啓動之後要關閉防火牆和加強性安全功能。服務器

[root@rabbitmq01 /]# systemctl stop firewalld.service
[root@rabbitmq01 /]# setenforce 0
[root@rabbitmq01 /]# yum install -y epel-release  #安裝epel源
[root@rabbitmq01 /]# yum install -y rabbitmq-server  #安裝rabbitmq軟件包
[root@rabbitmq01 /]# ln -s /usr/lib/rabbitmq/bin/* /usr/bin   #創建軟連接,方便直接使用命令
[root@rabbitmq01 /]# rabbitmq-plugins list           #查看插件安裝狀況
[e] amqp_client                       3.3.5
[ ] cowboy                            0.5.0-rmq3.3.5-git4b93c2d
[ ] eldap                             3.3.5-gite309de4
[e] mochiweb                          2.7.0-rmq3.3.5-git680dba8
[ ] rabbitmq_amqp1_0                  3.3.5
[ ] rabbitmq_auth_backend_ldap        3.3.5
[ ] rabbitmq_auth_mechanism_ssl       3.3.5
[ ] rabbitmq_consistent_hash_exchange 3.3.5
[ ] rabbitmq_federation               3.3.5
[ ] rabbitmq_federation_management    3.3.5
[E] rabbitmq_management               3.3.5
[e] rabbitmq_management_agent         3.3.5
[ ] rabbitmq_management_visualiser    3.3.5
[ ] rabbitmq_mqtt                     3.3.5
[ ] rabbitmq_shovel                   3.3.5
[ ] rabbitmq_shovel_management        3.3.5
[ ] rabbitmq_stomp                    3.3.5
[ ] rabbitmq_test                     3.3.5
[ ] rabbitmq_tracing                  3.3.5
[e] rabbitmq_web_dispatch             3.3.5
[ ] rabbitmq_web_stomp                3.3.5
[ ] rabbitmq_web_stomp_examples       3.3.5
[ ] sockjs                            0.3.4-rmq3.3.5-git3132eb9
[e] webmachine                        1.10.3-rmq3.3.5-gite9359c7

[root@rabbitmq01 /]# rabbitmq-plugins enable rabbitmq_management
#啓用rabbitmq_management服務
[root@rabbitmq01 /]# systemctl start rabbitmq-server.service   #啓動mq服務
[root@rabbitmq01 /]# netstat -ntap | grep 5672
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      3878/beam           
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      3878/beam 
tcp6       0      0 :::5672                 :::*                    LISTEN      3878/beam

有上面三個端口開啓說明正常。15672和55672都是rabbitmq的管理端口,5672是生產者、消費者通訊的端口。cookie

[root@rabbitmq01 /]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq01 ...
[{nodes,[{disc,[rabbit@rabbitmq01]}]},
 {running_nodes,[rabbit@rabbitmq01]},
 {cluster_name,<<"rabbit@rabbitmq01">>},
 {partitions,[]}]
...done.
#檢查三臺的集羣狀態,目前相互獨立,沒有造成集羣。

[root@rabbitmq01 /]# vim /var/lib/rabbitmq/.erlang.cookie 
#三臺節點服務器的這個文件中的編碼須要配置成同樣的,複製內容到其餘兩臺
PKBPLZGDCESRUHHDCOJV

Rabbitmq羣集搭建
Rabbitmq羣集搭建
Rabbitmq羣集搭建
而後將rabbitmq0二、rabbitmq03做爲內存節點與rabbitmq01磁盤節點鏈接起來,在rabbitmq02和rabbit03上執行下面的命令:負載均衡

[root@rabbitmq02 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01 ...
...done.
[root@rabbitmq03 yum.repos.d]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
Clustering node rabbit@rabbitmq03 with rabbit@rabbitmq01 ...
...done.

在rabbitmq01節點上查看集羣狀態:tcp

[root@rabbitmq01 /]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq01 ...
[{nodes,[{disc,[rabbit@rabbitmq01]},
         {ram,[rabbit@rabbitmq03,rabbit@rabbitmq02]}]},
 {running_nodes,[rabbit@rabbitmq01]},
 {cluster_name,<<"rabbit@rabbitmq01">>},
 {partitions,[]}]
...done.
#能夠看到集羣中的成員

打開瀏覽器輸入http://192.168.58.141:15672,能夠看到訪問頁面,帳號密碼都是guest,進入到裏面就能看到圖形化的界面。
Rabbitmq羣集搭建
Rabbitmq羣集搭建

相關文章
相關標籤/搜索