1. 程式人生 > >Centos7 安裝最新RabbitMQ及配置

Centos7 安裝最新RabbitMQ及配置

前言

最近在學習SpringCloud,發現其中的訊息匯流排是依靠訊息中介軟體實現的,加之公司也有在使用RabbitMQ,所以就想從零開始,從官網逐步學習一下RabbitMQ。下面的安裝教程是我從官網一步一步翻譯、實踐過來的,如有表達不到位,還請多多指教!RabbitMQ官方安裝教程

1. rpm包安裝

    1.1. 使用者許可權

使用rpm包安裝,要求我們擁有sudo許可權,如果沒有sudo許可權的話,請參考官網如何使用原始碼進行安裝

    1.2. 安裝依賴環境Erlang

方法一:

安裝erlang-rpm包,該包經過RabbitMQ官方處理,去掉了一些無用的依賴,只儲存執行RabbitMQ所需要的Erlang模組。

方法二:

# 下載rpm包
wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

# 從erlang-solutions中更新該包,並將erlang_solutions.repo新增到/etc/yum.repos.d
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

# 安裝
yum install erlang

----------------------------------------------------------------
該包還需依賴到epel源,請確保已有該源,若沒有則可通過以下方式安裝:
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum repolist # 檢視安裝是否成功

由於Erlang Solutions會進行不斷地更新,且RabbitMQ對Erlang的版本有一定的要求(官方版本要求對應表)。所以官方建議我們禁止Erlang版本的自動更新。方法如下:參考如何禁止某個軟體包的自動升級

# 安裝yum-versionlock
yum install yum-plugin-versionlock

# 禁止Erlang自動更新
yum versionlock erlang

注:預設情況下,yum似乎是不會自動更新軟體的,除非安裝了yum-cron這個軟體或者自己寫了某些自動更新指令碼。如果是前者的話,我們也可以 cd /etc/yum 目錄下,將yum-cron.conf中的download_updates = yes 改為 no。

方法三:

使用EPEL("Extra Packages for Enterprise Linux")進行安裝,但該方式安裝到的包可能不是最新版的,所以在安裝前請自行確認好版本號是否適合。

yum install erlang

    1.3. 安裝RabbitMQ Server

從官網下載rpm包並上傳到伺服器上。官方下載連結

# 匯入簽名
rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
# 或
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

# 安裝
yum install rabbitmq-server-3.7.7-1.el7.noarch.rpm

 2. 使用指令碼安裝

#建立erlang.repo庫
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
#安裝
yum install erlang

#建立rabbitmq-server.repo庫
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
#安裝
yum install rabbitmq-server

這種方式雖然會簡單點,但我嘗試過,發現只有翻牆才能安裝成功,所以不太推薦大家使用這種方法。

3. 啟動RabbitMQ Server

# 設定開啟啟動
chkconfig rabbitmq-server on

# 啟動服務
service rabbitmq-server start

#停止服務
service rabbitmq-server stop

4. 配置RabbitMQ

    4.1 找到配置檔案

啟動RabbitMQ後,會在 /var/log/rabbitmq 目錄下生成執行日誌,在日誌的最上方,我們可以看到配置檔案的資訊:

然而,發現剛開始的時候並沒有任何配置檔案。只好照著官方的介紹,到 /usr/share/doc/rabbitmq-server-3.7.7/ 目錄下複製一份模板到 /etc/rabbitmq 目錄下進行修改

cd /usr/share/doc/rabbitmq-server-3.7.7/

cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

這裡值得提一下,從3.7.0開始,rabbitmq的配置檔案引入了一個新的配置檔案 rabbitmq.conf(rabbitmq.conf配置模板),該檔案使用 key= value的格式進行配置,使配置檔案看起來更加簡潔易懂。當兩個配置檔案都存在的時候,rabbitmq只會讀取舊版的配置檔案。另外,官方還提到在 /usr/share/doc/rabbitmq-server-3.7.7/ 目錄下,還有一個名為 advanced.config.example 的配置檔案模板,用來配置rabbitmq的一些高階屬性,但是我並沒有找到,後面發現他已經整合到 rabbitmq.conf.example的檔案末尾了。 

雖然新版配置檔案很簡潔,但在配置LDAP Support時需要比較複雜的資料結構,所以我們將該配置放在advanced.config配置。rabbitmq在啟動的時候能同時載入這兩個配置檔案檔案。

    4.2 開啟管理後臺

rabbitmq自帶了管理後臺外掛,只要開啟這個外掛,就可以通過瀏覽器檢視rabbitmq的資訊以及管理它。

rabbitmq-plugins enable rabbitmq_management

# 開放埠
firewall-cmd --add-port=15672/tcp --permanent
firewall-cmd --reload

瀏覽器訪問 http://ip:15672 ,進入如下頁面就證明外掛啟動成功了。

    4.3 配置使用者許可權

rabbitmq 預設會幫我們建立一個guest使用者,密碼也是guest。因此為了安全,建議刪除該使用者或修改密碼。該使用者擁有所有的許可權的,但預設不能通過遠端訪問,只能通過localhost訪問。為了能遠端訪問rabbitmq,我們可以取消guest使用者的本地訪問限制:

# 新版配置檔案 rabbitmq.conf 開啟以下注釋
loopback_users.guest = false

# 舊版配置檔案 rabbitmq.config 開啟以下注釋,並記得去掉後面的逗號
{loopback_users, []},

或者新增一個新的使用者:

# 新增使用者
rabbitmqctl add_user 使用者名稱 密碼

# 賦予使用者管理員角色
rabbitmqctl set_user_tags 使用者 administrator

 在使用rabbitmqctl 命令的時候,我遇到了下面一個大坑,希望你們遇到的時候能順利點:

Error: unable to perform an operation on node '[email protected]'. Please see diagnostics information and suggestions below.

Most common reasons for this are:

 * Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
 * CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
 * Target node is not running

In addition to the diagnostics info below:

 * See the CLI, clustering and networking guides on http://rabbitmq.com/documentation.html to learn more
 * Consult server logs on node [email protected]

DIAGNOSTICS
===========

attempted to contact: [[email protected]]

[email protected]:
  * connected to epmd (port 4369) on yky
  * epmd reports node 'rabbit' uses port 25672 for inter-node and CLI tool traffic
  * can't establish TCP connection to the target node, reason: timeout (timed out)
  * suggestion: check if host 'yky' resolves, is reachable and ports 25672, 4369 are not blocked by firewall

Current node details:
 * node name: [email protected]
 * effective user's home directory: /var/lib/rabbitmq
 * Erlang cookie hash: xy7BSDdfGOwsW5CEeaA/QA==

在網上找了很久,遇到該問題的幾乎都是window上.erlang.config不一致的問題。但我通過 find / -name '*.erlang.config' 全域性搜尋,發現該檔案只有在/var/lib/rabbitmq 目錄出現過,根本不存就在不一致的問題。到後來才發現是我的主機名yky沒有對映好。

因此解決方法就是將主機名加入到 /etc/hosts 檔案中:

 

    4.4 修改rabbitmq開啟檔案數量

使用上一步配置的使用者登入進管理後臺,可知rabbitmq預設的檔案開啟數是1024,這對訊息中介軟體來說太低了。官方建議我們在正式環境至少配置65536,而在開發環境中配置到4096。

修改方法:

4.4.1 官方方法:

# 開啟limits.conf
vim /etc/systemd/system/rabbitmq-server.service.d/limits.conf

# 在Service 下新增 LimitNOFILE = 300000
[Service]
LimitNOFILE = 300000

# 重啟服務
service rabbitmq-server restart

4.4.2  個人成功方法:

# 開啟rabbitmq-server.service,(沒辦法,找不到官方說的limits.conf)
vim /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service

# 同樣在Service模組下,加入LimitNOFILE = 300000
[Service]
LimitNOFILE = 300000

# 重啟rabbitmq,訪問管理後臺,發現開啟檔案數並沒有修改成功,依舊是1024

# 開啟 sysctl.conf
vim /etc/sysctl.conf

# 新增:
fs.file-max = 65535

# 重新啟動機子
reboot

#再次訪問管理後臺,發現開啟數已改為300000

結語 

折騰了很久,總算把整個安裝過程縷清了,感覺還是有收穫的,畢竟這是我第一次一步一步跟著官方文件採坑過來的。也特別感謝以下兩位大佬的文章: