CentOS6和CentOS7環境下RabbitMQ安裝配置和非ROOT權限啓動及集羣搭建最完整教程

本文原發佈於CSDN,同步發佈到掘金node

前言

最近負責的一個項目須要使用 WebSocket 作先後端通訊,我使用了Spring提供支持的STOMP協議,它能夠解決 WebSocket 消息的語義化和集羣狀態下各集羣節點之間消息共享的問題,例如用戶鏈接了機器 A,可是機器 B須要知道該用戶的在線狀態和向這個用戶推送消息。這是WebSocket集羣狀態下必然要面對的問題。git

傳統的作法是使用分佈式session、redis或者經過消息隊列來本身實現這些功能的支持。其實,Spring已經爲咱們提供了相關的功能。github

開啓這個功能,咱們須要一個中繼(relay),理論上任何實現STOMP協議的消息隊列均可以作爲中繼,經常使用的是RabbitMQ和ActiveMQ。我選了 RabbitMQ。web

在搭建 RabbitMQ 的時候,咱們會遇到如下幾個問題:redis

  1. erlang 運行時環境。RabbitMQ 是 erlang 寫的,並且對版本有所要求,網上找的不少教程會出現erlang總是安裝不上或者版本不對的問題。
  2. 非root用戶啓動。RabbitMQ安裝完以後直接執行命令啓動,會自動以rabbitmq用戶啓動進程,而使用該用戶須要root權限
  3. 集羣搭建。服務須要高可用,所以咱們須要一個rabbitmq集羣來支持。

下面是我摸索、使用並總結的安裝和配置的完整教程,轉載請註明出處shell

安裝包下載

erlang

從CentOS7/6無依賴的erlang GitHub release 頁面中下載安裝包: CentOs6下載 erlang-21.2.2-1.el6.x86_64.rpm CentOs7下載 erlang-21.2.2-1.el7.centos.x86_64.rpmvim

簽名key文件

GitHub release 頁面中下載 rabbitmq-release-signing-key.ascsegmentfault

rabbitmq rpm安裝包

在 rabbitmq-server 的 GitHub release 頁面中選擇合適的版本並選擇適合的安裝包,當前最新的release版本是3.7.9 (2019年1月),則: CentOs6下載 rabbitmq-server-3.7.9-1.el6.noarch.rpm CentOs7下載 rabbitmq-server-3.7.9-1.el7.noarch.rpm後端

安裝

安裝包準備好以後,咱們來安裝(yum命令須要root權限centos

# 安裝 erlang
rpm -ivh erlang-21.1.4-1.el6.x86_64.rpm
# 導入簽名
rpm --import rabbitmq-release-signing-key.asc
# 安裝 rabbitmq
yum install -y rabbitmq-server-3.7.9-1.el6.noarch.rpm
複製代碼

若是在 install 的時候報下面的異常

  • groupadd: cannot open /etc/group
  • useradd: cannot open /etc/passwd
  • useradd: cannot open /etc/shadow

則對應地執行這三條命令而後再 install 便可

chattr -i /etc/group
chattr -i /etc/passwd
chattr -i /etc/shadow
複製代碼

配置

管理插件

rabbitmq-plugins enable rabbitmq_management

開始管理插件後能夠登陸 http://localhost:15672管理rabbitmq, 默認帳號密碼都爲 guest,只支持本地登陸

STOMP 插件

rabbitmq-plugins enable rabbitmq_stomp

添加用戶

格式: rabbitmqctl add_user <user> <password> 示例: rabbitmqctl add_user test Passw0rd

添加vhost

格式: rabbitmqctl add_vhost <hostname> 示例: rabbitmqctl add_vhost /wxkf

用戶受權

角色

格式: rabbitmqctl set_user_tags <user> <role> 示例: rabbitmqctl set_user_tags test administrator

vhost受權

格式: rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read> 示例: rabbitmqctl set_permissions -p /wxkf test ".*" ".*" ".*"

非 root 權限啓動 rabbitmq

安裝完成以後 rabbitmq 會在 /usr/sbin/ 目錄下加入所須要的命令,如 rabbitmq-server,默認會以rabbitmq用戶啓動,而使用該用戶須要root權限。可是咱們在生產機器上不可能一直使用 root,所以使用普通用戶啓動 rabbitmq 很是有必要。

只須要兩步就能夠實現

  1. 刪除 /usr/sbin/rabbitmq*
rm -f /usr/sbin/rabbitmq*
複製代碼
  1. 添加軟鏈
# 注意:rabbitmq_server-3.7.9 換成你安裝的對應版本
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmqctl /usr/sbin/rabbitmqctl
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-env /usr/sbin/rabbitmq-env
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-server /usr/sbin/rabbitmq-server
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-defaults /usr/sbin/rabbitmq-defaults
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-diagnostics /usr/sbin/rabbitmq-diagnostics
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-plugins /usr/sbin/rabbitmq-plugins
複製代碼

而後執行 rabbitmq 相關的命令就會以當前用戶執行了

集羣搭建

.erlang.cookie 文件

將第一臺RabbitMQ的 ~/.erlang.cookie 文件複製替換掉其餘的機器相同路徑下的文件,以確保各個節點的cookie文件使用的是同一個值,節點之間經過cookie肯定相互是否可通訊。

注意:若是是直接修改cookie文件的內容,須要受權。 .erlang.cookie 文件默認權限是 400,即只有owner纔有只讀權限,執行 chmod +w .erlang.cookie 添加寫權限,改完以後執行 chmod -w .erlang.cookie 改回原來的權限便可。

配置各節點的hosts文件

sudo vim /etc/hosts

# 格式:ip 節點名
xxx.xxx.xxx.xxx rmq-broker-test-1
xxx.xxx.xxx.xxx rmq-broker-test-2
xxx.xxx.xxx.xxx rmq-broker-test-3
複製代碼

注意:節點名稱爲機器的 hostname,能夠經過執行 hostname 命令查看(若是全稱包含 . 會被截斷,只取 . 前面的部分,如hostname 爲 bhj-185-73.os.org 則節點名稱爲bhj-185-73)。

組成集羣

  1. 先啓動任意一個節點,以 node1 爲例,在 node1 機器上執行
rabbit-server -detached
複製代碼
  1. 再啓動其餘機器並加入集羣,以 node2 爲例,在 node2 機器上執行
# 啓動 rabbit-server
rabbit-server -detached
# 中止rabbitmq服務(這命令只是中止對外服務,進程還在)
rabbitmqctl stop_app
# 加入集羣,集羣格式爲 rabbit@節點名
rabbitmqctl join_cluster rabbit@node1
# 開啓rabbitmq服務
rabbitmqctl start_app
複製代碼

集羣搭建完成以後能夠經過web管理界面查看集羣集羣信息,地址爲任意節點的ip,端口號爲 15672,如 http://locahost:15672

管理界面
集羣部分參考: CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集羣服務與使用
相關文章
相關標籤/搜索