配置RabbitMQ默認羣集模式

RabbitMQ是什麼?

MQ(Msaaage Queue,消息隊列)是一種應用程序對應用程序的通訊方式。應用程序經過讀寫出入隊列的消息(針對應用程序的數據)來通訊,而無須專用連接來鏈接它們。消息傳遞指的是程序之間經過在消息中發送數據進行通信。而不是經過直接調用彼此來通訊。隊列的使用除去了接收和發送應用程序同時執行的要求。前端

RabbirMQ使用場景

在項目中,將一些無需即時返回且耗時的操做提取出來,進行異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提升系統的吞吐量
RabbitMQ支持消息的持久化,也就是數據寫在磁盤上。爲了數據安全考慮,大多數企業都會選擇持久化。固然若是不須要消息持久化,那麼使用內存節點便可。RabbitMQ的集羣節點包括內存節點、磁盤節點。最合適的方案就是既有內存節點,又有磁盤節點。linux

RabbitMQ實際應用

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

  • 單一模式
  • 普通模式(默認的集羣模式)
  • 鏡像模式(把須要的隊列作成鏡像隊列,存在於多個節點,屬於RabbitMQ的HA方案,在對業務可靠性要求較高的場合中比較適用)

要實現鏡像模式,須要先搭建一個普通集羣模式,在這個模式的基礎上再配置鏡像模式能夠實現高可用。vim

RabbitMQ功能

  • 異步消息:支持多種消息傳遞協議,消息隊列,傳遞確認,靈活路由到隊列,多種交換類型。
  • 開發經驗:與BOSH,Chef,Docker和Puppet一塊兒部署。使用喜歡的編程語言開發跨語言消息,例如:Java,.NET,PHP,Python,JavaScript,Ruby,Go 等等。
  • 分佈式部署:部署爲集羣以實現高可用性和吞吐量; 聯合多個可用區和區域
  • 企業和雲就緒:可插拔身份驗證,受權,支持TLS和LDAP。輕量級,易於部署在公共雲和私有云中。
  • 工具和插件:支持持續集成,運營指標和與其餘企業系統集成的各類工具和插件。靈活的插件方法,用於擴展RabbitMQ功能。
  • 管理和監督:用於管理和監控 RabbitMQ的HTTP-API,命令行工具和UI

RabbitMQ集羣搭建

實現步驟

設計架構模式:在一個集羣裏,有三臺服務器,其中一臺使用磁盤模式,另兩臺使用內存模式。兩臺內存模式的節點速度更快,所以經過客戶端鏈接訪問它們。可是在客戶端不可能分別鏈接兩臺內存節點,確定是經過前端反向代理去輪詢分發請求。若是擔憂前端反向代理服務器故障,能夠經過keepalived軟件作一個高可用架構。而磁盤模式的節點,因爲磁盤IO相對較慢,所以僅做數據備份使用。瀏覽器

環境準備

  • 關閉防火牆及selinux
    systemctl stop firewalld.service
    setenforce 0
  • 虛擬機規劃以下
主機名 IP地址 操做系統 系統用途 軟件包
mq01 172.16.10.28 CentOS-7-x86_64 磁盤節點 rabbitmq-server-3.3.5
mq02 172.16.10.29 CentOS-7-x86_64 內存節點 rabbitmq-server-3.3.5
mq03 172.16.10.31 CentOS-7-x86_64 內存節點 rabbitmq-server-3.3.5

修改主機名及hosts文件

vim /etc/hostname
mq01.localdomain           //三臺服務器都須要修改,分別改成mq02,mq03,名稱能夠自定義
vim /etc/hosts
172.16.10.28 mq01
172.16.10.29 mq02
172.16.10.31 mq03         //hosts文件三臺服務器都一致,與hostname修改的內容要對應
reboot                             //修改以後重啓虛擬機生效

安裝rabbitmq軟件

yum install epel-release -y 
yum install rabbitmq-server -y

查看節點服務

rabbitmq-plugins list

配置RabbitMQ默認羣集模式

啓動管理服務

rabbitmq-plugins enable rabbitmq_management

配置RabbitMQ默認羣集模式

啓動rabbitmq服務

systemctl start rabbitmq-server.service
netstat -ntap | grep 5672

在服務啓動以後,如果有三個端口開放,則表示服務服務開啓成功。其中15672和25672都是rabbitmq的管理端口,5672則是和生產者、消費者通訊的端口。安全

查看鏈接狀態

先查看單個鏈接是否可以,三臺服務器都要作測試,若是鏈接失敗,就要檢查前面的hostname和hosts文件設置有沒有錯誤。服務器

rabbitmqctl cluster_status

配置RabbitMQ默認羣集模式

修改.erlang.cookie文件

Rabbitmq的集羣是依賴於Erlang的集羣來工做的,因此必須先構建起Erlang的集羣環境。在Erlang的集羣中,各節點經過一個magic cookie來實現的,這個cookie存放在/var/lib/rabbitmq/.erlang.cookie(該文件爲隱藏文件)中,文件是400的權限。必須使各節點cookie保持一致,不然節點之間就沒法通訊。注意在做修改時,應先關閉rabbitmq服務cookie

cat .erlang.cookie                                    //查看文件中的值,修改兩個內存節點,使三個值相同
systemctl stop rabbitmq-server.service   //關閉兩個內存節點的rabbimq服務,並修改cookie值
systemctl start rabbitmq-server.service   //修改完成以後再啓動服務

配置RabbitMQ默認羣集模式

將內存節點與磁盤節點相連

將mq0二、mq03做爲內存節點,mq01做爲磁盤節點。節點mq01和mq02上操做一致,先中止rabbitmq應用,而後(在mq02服務器上)調用cluster命令將mq02鏈接到mq01;(在mq03服務器上)將mq03鏈接到mq01,使三者成爲一個集羣,最後啓動rabbitmq應用。架構

rabbitmqctl stop_app                                       //關閉應用
rabbitmqctl join_cluster --ram rabbit@mq01   //將內存節點鏈接到磁盤節點  --ram表示做爲內存節點
rabbitmqctl start_app                                       //開啓應用,mq02與mq03操做相同

查看端口,確保服務都正常

netstat -ntap | grep 5672

mq01

配置RabbitMQ默認羣集模式

mq02

配置RabbitMQ默認羣集模式

mq03

配置RabbitMQ默認羣集模式

訪問管理網頁

打開瀏覽器訪問http://172.16.10.28:15672,默認帳號和密碼均爲「guest」
配置RabbitMQ默認羣集模式
配置RabbitMQ默認羣集模式app

相關文章
相關標籤/搜索