在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