RabbitMQ從入門到精通----運行與管理

在上文中我們已經簡單的介紹了AMQP消息通信的基本概念,並對運行環境進行了安裝,但是當我們將RabbitMQ部署在線上的時候,有涉及到了RabbitMQ的優化,在本節中我們 着重講解RabbitMQ的管理

服務器的管理

RabbitMQ爲erlang語言編寫,由於erlang語言的特性很好的實現簡單的分佈式,但是我們以前並沒有接觸過Erlang語言,因此很多的優化也會有着不同。

啓動節點

在本節中我們使用術語節點來代替RabbitMQ,Erlang語言與JAVA語言相似,同樣有着虛擬機JVM,不同於JAVA虛擬機的是,多個Erlang程序可以運行在一個相同的虛擬機上面,同樣我們也把Erlang虛擬機的實例稱之爲節點,Erlang程序更爲特殊的是當兩個不同的JVM運行在不同的機子上面時,兩者之間可以進行本地通信,如果運行在Erlang虛擬機上面的程序崩潰了,那麼Erlang虛擬機會自動嘗試啓動應用程序。

啓動節點:

rabbitmq-serer
//參數
-detached  //以後臺守護進程的方式啓動

查看日誌文件:

cat /var/log/rabbitmq/rabbit@[hostname].log

停止節點

rabbitmqctl是RabbitMQ提供的解決方案,他可以用來顯示出所欲的vhost,並且用來 創建vhost或者用戶,同時也能停止RabbitMQ

rabbitmqctl stop -n rabbit@[hostname]

如果我們採用包管理安裝RabbitMQ同樣可以採用服務的方式

service rabbitmq-servver stop

關閉和重啓應用程序

上面我們所講述的啓動節點以及關閉節點都是伴隨着Erlang的虛擬機節點進行啓動和關閉,但是有時候我們的Erlang節點還運行這其他應用程序,我們只能通過停止RabbitMQ應用程序,而不是也停止Erlang虛擬機節點的運行,我們只需要運行:

rabbitmqctl stop_app

rabbitmqctl start_app

RabbitMQ的配置文件

配置文件位置:

/usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example 

簡單的啓動RabbitMQ並不需要配置文件,但是複雜的RabbitMQ則需要配置文件。

RabbitMQ的配置文件,我把它理解爲JSON文件,RabbitMQ,Mnesia是用來存儲RabbitMQ隊列元數據以及交換器信息的,每個表達式的形式都是:

{[option_name],[option_vavlue]}

//多個配置採用 逗號進行分割

RabbitMQ中的每個隊列、交換器以及綁定的元數據(除了消息內容)都是保存在Mnesia的,Mnesia是內建在Erlang的非SQL型數據庫,Mnesia通過將RabbitMQ的元數據保存在一個僅限追加的日誌文件中,然後在定期的將日誌文件中的內容保存爲Mnesia數據的格式。

dump_log_write_threshold  100

即爲當日志文件中有100個條目的時候發生轉儲,當把此值提高的時候,可以減少IO負載並增加持久化消息的性能

RabbitMQ的配置選項:

選項名稱 默認值 描述
tcp_listeners{“ip地址”,”監聽的端口號”} [{“0.0.0.0”,5672}] 定義了RabbitMQ應該監聽的非SSL加密通信的IP地址以及端口號
ssl_listeners{“ip地址”,”監聽的端口號”} 定義了RabbitMQ應該監聽SSL加密的通信地址以及端口號
ssl_options{“鍵”,”值”} 指定SSL的相關選項,有效的選項有cacertfile(CA證書文件),certfile(服務器證書文件),keyfile(服務器密鑰文件),fail_if_no_peer_cert(需要客戶端安裝證書true/false)
vm_memory_high_watermark百分數 0.4 定義了RabbitMQ允許消耗的內存
msg_store_file_size_limit整型字節 1073741824 定義了RabbitMQ垃圾收集之前,消息存儲數據庫的最大大小
queue_index_max_journal_entries整型 262144 定義了RabbitMQ轉儲到消息存儲庫並提交之前,消息存儲日誌文件的最大條目數

請求許可—權限系統

這裏寫圖片描述

管理用戶

在RabbitMQ中,用戶爲訪問的基本單元,針對一個至多個vhost。

創建用戶:

rabbitmqctl add_user username password

刪除用戶:

rabbitmqctl delete_user username 

當我們刪除用戶的時候,任何與該用戶訪問控制的條目都會被刪除,因此刪除用戶時需要特別謹慎。

查看所有用戶:

rabbitmqctl list_users

更改用戶的密碼:

rabbitmqctl change_password username newpassword

權限系統

權限系統允許大量細粒度控制,同時可以授予用戶讀、寫和配置權限。

  • 讀:有關消費信息的任何操作,包括“清除”整個隊列(同樣需要綁定操作的成功)
  • 寫:發佈信息(同樣需要綁定操作的成功)
  • 配置:隊列和交換器的創建以及刪除

每條訪問控制條目組成:

  1. 被授予訪問權限的用戶
  2. 權限控制應用的vhost
  3. 需要授予的讀/寫/配置權限的組合
  4. 權限範圍—-權限控制僅應用於客戶端命名的隊列或者交換器還是服務器隨機命名的。

每條訪問控制條目是無法跨越vhost的,如果一個用戶想要在多個vhost上賦予想用的權限,那麼必須創建相應個訪問控制條目。

例子:
假設名爲sycmore的vhost,我們想要賦予test用戶完全的訪問權限:

rabbitmqctl set_permission -p sycmore\ test ".*" ".*" ".*"

//-p sycmore爲應用在那個vhost上面
// test 爲指定的用戶
//第一個.*爲用戶在此vhost的配置權限
//第二個.*爲用戶再次vhost的寫權限
//第三個.*爲用戶再次vhost的讀權限

那我們假設配置test用戶在sycmore的vhost上面,沒有配置的權限,擁有vhost的讀權限以及以checks-開始隊列的寫權限

rabbitmqctl set_permission -p sycmore\ test "" "check-.*" ".*"

設置完成之後我們可以通過:

rabbitmqctl list_permission -p sycmore
//查看交換器上面配置的權限

移除權限:

rabbitmqctl clear_permission -p sycmore test
//移除test用戶在sycmore交換器上面的權限 

查看用戶在所有vhost上面的權限:

rabbitmqctl list_user_permission test
//顯示出用戶test在所有vhost上面的權限 

檢查

查看數據統計

查看vhost上面的所有隊列:

rabbitmqctl list_queues -p vhostname

//如果不加-p參數,爲默認的vhost/的所有隊列
rabbitmqctl list_queues [-p <vhostPath> [<QueueInfoItem>]]

我們已經知道了vhostpath的含義,那麼QueueInfoItem爲返回隊列的具體參數信息

rabbitmqctl list_queues -p test name messages consumers memory

//此命令表示顯示出名稱爲test的vhost上面所有隊列的名稱、消息數目、消費者數目、以及內存的使用情況

檢查隊列聲明時的具體屬性:

rabbitmqctl list_queues name durable auto-delete
//durable爲可持久化的
//自動刪除屬性

查看交換器的信息:

rabbitmqctl list_exchanges//默認情況下返回交換器的名稱以及類型

這裏寫圖片描述

我們發現第一個交換器沒有名稱,此爲匿名交換器,每個隊列都會默認綁定到該交換器上面

查看交換器詳細信息

rabbitmqctl list_exchanges name type durable auto-delete
//此參數爲查看交換器的名稱、類型、可持久化以及自動刪除

查看綁定信息:

rabbitmqctl list_bindings

該命令不接收-p以外的參數,每行包含了交換器名稱、隊列名稱、路由鍵和參數。最開始的幾行看起來比較特殊,因爲匿名交換器的原因。

理解RabbitMQ日誌

日誌文件存儲在:

/var/log/rabbitmq/
//目錄中默認有兩個文檔

這裏寫圖片描述

其中sasl日誌文檔,存儲的爲Erlang的相關信息,舉例來說,我們可以在這個文件中找到Erlang的崩潰信息。

rabbit.log則是存儲的RabbitMQ的日誌信息,我們可以從其中查看到服務器正在發生的事件。

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