1. 程式人生 > >在Ubuntu上安裝rabbitMq server

在Ubuntu上安裝rabbitMq server

下載Server

標準Ubuntu和Debian倉庫

rabbitmq-server被包含在標準Debian和Ubuntu倉庫中。然而,包含的版本經常是過舊的。你可以從rabbitmq.com或者是Package Cloud中的apt倉庫中來安裝最新的安裝包。檢查Debian包管理和Ubuntu包管理來獲取哪一個發行版的版本是可用的。

你也可以下載上面連結中的安裝包並且使用dpkg安裝,或使用官方的APT倉庫(見下面)。

支援的釋出

下面是RabbitMQ 3.6.3 支援的基於Debian發行版的列表。

  • Ubuntu 14.04到17.02
  • Debian Jessie
  • Debian Wheezy

如果是依賴滿足的話,該安裝包可能也可以正常工作在其他基於Debian的發行版上,但是他們的測試和支援是盡力而為的。

安裝Erlang/OTP

RabitMQ需要Erlang/OTP來執行。在標準Debial和Ubuntu中的Erlang/OTP也是過時的。考慮安裝一個新的版本,例如19.3。

Erlang發行序列 提供他的倉庫
20.x Erlang解決方案 。從3.6.11開始支援,以前版本不支援
19.x Erlang解決方案。Ubuntu Zesty(17.04)
18.x Erlang解決方案。Ubuntu Yakkety(16.10),Ubuntu Xenial(16.04)
17.x Erlang解決方案。Debian Jessie, Debian Wheezy backports

Erlang版本固定

apt包固定可以被使用來避免不期望的Erlang更新。下面引用的檔案的例子將會固定esl-erlang包到19.3.6並且erlang-*包到19.3


    # /etc/apt/preferences.d/erlang
    Package: erlang*
    Pin: version 1:19.3-1
    Pin-Priority: 1000

    Package: esl-erlang
    Pin: version 1
:19.3.6 Pin-Priority: 1000

上面的例子應該被放到/etc/apt/preference.d/下面的一個檔案中,例如/etc/apt/preference.d/erlang

使用下面的命令可以使有效的包鎖定被驗證。

    sudo apt-cache policy

包依賴

當使用apt安裝的時候,所有的依賴在最近的發行中都應該自動滿足。在不滿足的情況下,所有的依賴包應該從一個合適的倉庫中可用。然而,當使用dpkg安裝的時候,就不會出現這樣的情況。下面是RabbitMQ服務例如3.6.3的依賴列表。


    erlang-nox (>= 1:16.b.3) | esl-erlang. Erlang can installed either from the standard repositories, backport repositories or Erlang Solutions.
    init-system-helpers >= 1.13. Required for systemd support.
    socat
    adduser
    logrotate

APT倉庫

RabbitMQ維護自己的APT倉庫。我們在Package Cloud中也有可選擇的倉庫。

使用rabbitmq.com APT倉庫

執行下面的命令將APT倉庫新增到你的/etc/apt/sources.list.d中。


    echo 'deb http://www.rabbitmq.com/debian/ testing main' |
     sudo tee /etc/apt/sources.list.d/rabbitmq.list

(請注意單詞在這行中的testing指向我們RabbitMQ的發行版的狀態,不是任何特定的Debian發行版。你可以使用Debian穩定的,測試的或不穩定的或者是Ubuntu來用他。我們使用”testing”來描述發行版來強調我們發行的有些頻繁。)

(可選的)為了避免未簽名包的警告,使用apt-key(8)來新增我們的公共key到你的可信的key列表中。


    wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc |
     sudo apt-key add -

我們公共的簽名key從Bintray中也是可用的。


    wget -O- https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc |
         sudo apt-key add -

執行下面的命令來更新包列表。


    sudo apt-get update

安裝rabbitmq-server包。


sudo apt-get install rabbitmq-server

執行RabbitMQ伺服器

定置化RabbitMQ環境變數

伺服器應該使用預設值啟動的。你可以定製化RabbitMQ環境。也可以去檢視如何配置元件

開啟服務

當RabbitMQ伺服器包被安裝的時候,該服務預設是以守護程序啟動的。

作為一個管理員,在Debian中使用service rabbitmq-server start啟動和停止服務。

注意:該服務被設定為以系統使用者rabbitmq來執行。如果你改變了節點資料庫或日誌的位置,你必須確定檔案是屬於這個使用者的(並且更新環境變數)。

埠訪問

SELinux,或者是類似的機制可能會阻止RabbitMQ繫結埠。當這種事情發生的時候,RabbitMQ將會啟動失敗。防火牆會阻止節點和CLI工具之間的通訊。確保下面的埠是開著的:

  • 4369:epmd,一個被RabbitMQ節點和CLI工具使用的夥伴搜尋服務。
  • 5672,5671:被帶有或不帶有TLS的AMQP 0-9-1和1.0客戶端使用的埠。
  • 25672:被Erlang發行版用於內部節點和CLI工具通訊並且從一個動態的範圍被分配(預設限制到一個單一的埠,以AMQP埠+20000來計算)。
  • 15672:HTTP API客戶端和rabbitmqadmin(僅僅管理外掛被使能的時候)
  • 61613,61614:帶有或不帶有TLS的STOMP客戶端(僅僅在STOMP外掛被使能的時候)
  • 1883,8883:(如果MQTT外掛被使能的時候,帶有或不帶有TLS的MQTT客戶端。)
  • 15674:STOMP-over-WebSocket客戶端(僅僅Web STOMP外掛被使能的時候)
  • 15675:MQTT-over-WebSocket客戶端(僅僅是Web MQTT 外掛被使能的時候)

預設使用者訪問

該代理使用密碼guest建立了一個使用者guest。未配置的客戶端大體上將會使用這些證書。預設情況下,這些證書只有作為localhost連線的時候才會被使用,所在連線其他機器之前你需要做一些操作。

檢視文件訪問控制來獲取更多資訊來建立更多使用者,刪除guest使用者,或者是對guest使用者允許遠端訪問。

在Linux中控制系統限制

執行生產工作負載的RabbitMQ的安裝可能需要系統限制和核心引數整定,來處理一定數量的並行連線和佇列。需要滿足的主要設定就是開啟檔案的最大數量,也被稱為ulimit -n。在很多作業系統中的預設值對於訊息代理來說太低了(例如在多個Linux發行版上是1024)。我們推薦在生產環境中對使用者rabbitmq最少允許65536個檔案描述符。4096對大多數開發工作負載來說應該是充足的。

使用systemd(最近Linux發行版)

在發行版中使用systemd。系統限制是由位於/etc/systemd/system/rabbitmq-server.service.d/limits.conf檔案來控制的。例如:


    [Service]
    LimitNOFILE=300000

沒有systemd(較早期的Linux發行版)

在發行版中,使RabbitMQ能夠調整每一個使用者限制最直接的方式就是不使用systemd而是在服務啟動之前,編輯/etc/default/rabbitmq-server(RabbitMQ Debian包提供的)或者是rabbitmq-env.conf來喚起ulimit。


    ulimit -S -n 4096

該軟體limit不能超過硬限制(在大多數發行版中預設為4096)。硬限制可以通過檔案/etc/security/limits.conf來增加。這也要求使能pam_limits.so模組,並且重啟重新登入系統。

注意在執行的OS程序中,limits是不能被改變的。

驗證limit

RabbitMQ管理頁面展示了可用的檔案描述符的數量。


    rabbitmqctl status

包含同樣的值。

下列命令:


    cat /proc/$RABBITMQ_BEAM_PROCESS_PID/limits

可以被用於顯示一個執行的程序的有限的限制(limits)。$RABBITMQ_BEAM_PROCESS_PID是執行RabbitMQ的Erlang VM的作業系統PID,就像是rabbitmqctl status返回的值。

配置管理工具

配置管理工具提供了系統限制調整的協助。我們的開發工具指導列出了相關的模組和專案。

管理代理

停止服務或者是檢查他的狀態等,你可以使用包特定指令碼或者是執行rabbitmqctl命令。在系統路徑中他是可用的。所有的rabbitmqctl命令將會報告節點缺少,如果沒有代理正在執行的話。

執行rabbitmqctl stop來停止服務。

執行rabbitmqctl status來檢查其是否在執行。

日誌

來自服務的所有的輸出被送到位於RABBITMQ_LOG_BASE目錄中的RABBITMQ_NODENAME.log檔案中。其他的日誌資料被寫到RABBITMQ_NODENAME-sasl.log中。

代理經常依賴於日誌檔案,所有一個完整的日誌歷史被維護。

你可以使用輪替程式來做所有必要的迴圈和壓縮,並且你可以修改它。預設情況下,這個指令碼沒有執行預設位於/var/log/rabbitmq目錄中的檔案。檢視/etc/logrotate.d/rabbitmq-server來配置輪替。

安裝及遇到問題

安裝erlang-19.3

使用下面的命令安裝erlang:

dpkg -i esl-erlang_19.3-1_ubuntu_xenial_amd64.deb 

安裝的時候,可能會遇到下面這樣的錯誤:

Selecting previously unselected package esl-erlang.
(Reading database ... 67827 files and directories currently installed.)
Preparing to unpack esl-erlang_19.3-1_ubuntu_xenial_amd64.deb ...
Unpacking esl-erlang (1:19.3) ...
dpkg: dependency problems prevent configuration of esl-erlang:
 esl-erlang depends on libwxbase2.8-0 | libwxbase3.0-0 | libwxbase3.0-0v5; however:
  Package libwxbase2.8-0 is not installed.
  Package libwxbase3.0-0 is not installed.
  Package libwxbase3.0-0v5 is not installed.
 esl-erlang depends on libwxgtk2.8-0 | libwxgtk3.0-0 | libwxgtk3.0-0v5; however:
  Package libwxgtk2.8-0 is not installed.
  Package libwxgtk3.0-0 is not installed.
  Package libwxgtk3.0-0v5 is not installed.
 esl-erlang depends on libsctp1; however:
  Package libsctp1 is not installed.

dpkg: error processing package esl-erlang (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 esl-erlang

使用下面的命令來解決相關依賴關係:

sudo apt-get -f -y install

安裝rabbitmq server

dpkg -i rabbitmq-server_3.6.12-1_all.deb 

在安裝的時候,可能也會遇到缺少依賴關係,在我這裡,遇到的錯誤是:

Selecting previously unselected package rabbitmq-server.
(Reading database ... 88141 files and directories currently installed.)
Preparing to unpack rabbitmq-server_3.6.12-1_all.deb ...
Unpacking rabbitmq-server (3.6.12-1) ...
dpkg: dependency problems prevent configuration of rabbitmq-server:
 rabbitmq-server depends on socat; however:
  Package socat is not installed.

dpkg: error processing package rabbitmq-server (--install):
 dependency problems - leaving unconfigured
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu16) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 rabbitmq-server

這裡是說socat未安裝,所以我需要安裝socat包。

sudo apt-get install socat