寫在前面 連接rabbitMQ官網 php教程。PHP-RabbitMQphp
1.關於RabbitMQ安裝html
因爲rabbitMq須要erlang語言的支持,在安裝rabbitMq以前須要安裝erlang,執行命令:node
sudo apt-get install erlang-nox
安裝rabbitMQ數據庫
sudo apt-get update sudo apt-get install rabbitmq-server
2.RabbitMQ基本操做服務器
啓動:sudo rabbitmq-server start 關閉: sudo rabbitmq-server stop 重啓: sudo rabbitmq-server restart 查看狀態:sudo rabbitmqctl status
3.RabbitMQ功能
1.路由
2.隊列
3.持久性
4.廣播
5.任務確認
6.負載均衡
參見官網手冊 寫的很是具體詳細。cookie
4.RabbitMQ集羣
1.主機名解析
RabbitMQ節點使用域名相互尋址,所以全部集羣成員的主機名必須可以從全部集羣節點解析,能夠修改hosts文件或者使用DNS解析。 若是要使用節點名稱的完整主機名(RabbitMQ默認爲短名稱),而且可使用DNS解析完整的主機名,則可能須要調查設置環境變量 RABBITMQ_USE_LONGNAME = trueapp
2.集羣節點
RAM節點和disk節點
disk持久化 ram非持久隊列down掉後數據消失 RAM節點是一種特殊狀況,可用於改善高排隊,交換或綁定流失的性能集羣。
變動當前節點類型須要關閉當前節點 rabbitmqctl stop_app
使用 rabbitmqctl change_cluster_node_type disc負載均衡
3.集羣節點驗證
RabbitMQ節點和CLI工具(例如rabbitmqctl)使用cookie來肯定它們是否被容許相互通訊,要使兩個節點可以通訊,它們必須具備相同的共享密鑰,稱爲Erlang Cookie.
Cookie只是一個字符串,最多能夠有255個字符。它一般存儲在本地文件中。該文件必須只能由全部者訪問(400權限)。每一個集羣節點必須具備相同的 cookie,文件位置/var/lib/rabbitmq/.erlang.cookie, 把rabbit二、rabbit3設置成和rabbit2同樣的便可,權限是400工具
4.正常方式啓動全部節點性能
rabbitmq-server -detached rabbitmq-server -detached rabbitmq-server -detached
5.集羣中MQ的操做
1.查看集羣狀態
[root@rabbit1 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1]}]}, {running_nodes,[rabbit@rabbit1]}, {cluster_name,<<"rabbit@rabbit1">>}, {partitions,[]}, {alarms,[{rabbit@rabbit1,[]}]}]
2.加入一個集羣
1)中止要加入的mq應用程序 rabbitmqctl stop_app
2)加入目標mq集羣 rabbitmqctl join_cluster rabbit@rabbit1
3)啓動要加入的mq應用程序 rabbitmqctl start_app
注意:加入集羣會隱式重置節點,從而刪除此節點上之前存在的全部資源和數據
加入後查看狀態
[root@rabbit1 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}, {cluster_name,<<"rabbit@rabbit1">>}, {partitions,[]}, {alarms,[{rabbit@rabbit2,[]},{rabbit@rabbit1,[]}]}]
經過遵循上述步驟,咱們能夠在集羣正在運行的同時隨時向集羣添加新節點
已加入羣集的節點可隨時中止。他們也能夠崩潰。在這兩種狀況下,羣集的其他部分都會繼續運行,而且節點在再次啓動時會自動「跟上」(同步)其餘羣集節點。
*當整個集羣關閉時,最後一個關閉的節點必須是第一個要聯機的節點。
若是要脫機的最後一個節點沒法恢復,可使用forget_cluster_node命令將其從羣集中刪除
若是全部集羣節點同時中止而且不受控制(例如斷電),則可能會留下全部節點都認爲其餘節點在其後中止的狀況。在這種狀況下,您能夠在一個節點上使用force_boot命令使其再次可引導 *
3.集羣移除節點
當節點再也不是節點的一部分時,須要從集羣中明確地刪除節點。咱們首先從集羣中刪除rabbit@rabbit3,並將其返回到獨立操做
1)咱們中止RabbitMQ應用程序 rabbitmqctl stop_app
2)重置節點 rabbitmqctl reset
3)從新啓動RabbitMQ應用程序 rabbitmqctl start_app
4.遠程刪除節點(處理節點無響應時)
1)關閉要刪除的節點 rabbitmqctl stop_app
2)遠程其餘服務器使用 rabbitmqctl forget_cluster_node rabbit@rabbit1
請注意,rabbit1仍然認爲它與rabbit2集羣 ,並試圖啓動它將致使錯誤。咱們須要從新設置才能從新啓動。
3) 被刪除的節點 rabbitmqctl reset #必需要重置
4)被刪除節點重啓 單獨使用 rabbitmqctl start_app
6.主機名更改
RabbitMQ節點使用主機名相互通訊。所以,全部節點名稱必須可以解析全部集羣對等體的名稱。對於像rabbitmqctl這樣的工具也是如此。
除此以外,默認狀況下,RabbitMQ使用系統的當前主機名命名數據庫目錄。若是主機名更改,則會建立一個新的空數據庫。爲避免數據丟失,設置固定且可解析的主機名相當重要。每當主機名更改時,必須從新啓動RabbitMQ節點。
使用rabbit @ localhost 做爲代理節點名稱能夠實現相似的效果。此解決方案的影響是羣集不起做用,由於所選主機名不會從遠程主機解析爲可路由地址。從遠程主機調用時,rabbitmqctl命令一樣會失敗。沒有這種弱點的更復雜的解決方案是使用DNS,例如,若是在EC2上運行,則使用 Amazon Route 53。若是要使用nodename的完整主機名(RabbitMQ默認爲短名稱),而且可使用DNS解析該完整主機名,則可能須要調查設置環境變量 RABBITMQ_USE_LONGNAME = true。
集羣手冊連接 RabbitMQ集羣