RabbitMQ學習筆記:CentOS7中安裝RabbitMQ集羣

安裝rabbitmq的前提是 在CentOS7中,如果是在docker中安裝,需要先創建鏡像

docker pull centos:7

創建CentOS7服務器centos7

docker run -d --privileged=true --hostname rabbit1 --name centos7 -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15692:15692 -e TZ=Asia/Shanghai centos:7

創建CentOS7服務器centos8

docker run -d --privileged=true --hostname rabbit2 --name centos8 -p 15673:15672 -p 5673:5672 -p 4363:4369 -p 25673:25672 -p 15693:15692 --link centos7:rabbit1 -e TZ=Asia/Shanghai centos:7

創建CentOS7服務器centos9

docker run -d --privileged=true --hostname rabbit3 --name centos9 -p 15674:15672 -p 5674:5672 -p 4364:4369 -p 25674:25672 -p 15694:15692 --link centos7:rabbit1 --link centos8:rabbit2 -e TZ=Asia/Shanghai centos:7
  • 生產環境是直接部署在CentOS7上,上面的步驟可以直接忽略;
  • 15692端口是爲rabbitmq-prometheus插件開放,如果沒用到可以去掉;
  • -e TZ=Asia/Shanghai環境變量解決容器時間和系統時間不一致問題
  • -it參數會將當前終端連接到容器當中;-d參數啓動容器,並在後臺運行

erlang安裝

第一種方案:

1.從 https://github.com/rabbitmq/erlang-rpm 中可以查看到.repo的配置,選擇如下版本
  • To use Erlang 22.x on CentOS 7:
# In /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
  • 打開CentOS-Base.repo文件
vi /etc/yum.repos.d/CentOS-Base.repo

將上一步中的rabbitmq-erlang配置添加到CentOS-Base.repo文件之中

  • 安裝erlang
yum install erlang
  • 驗證erlang是否安裝成功
[root@f1239428339c /]# erl
Erlang/OTP 22 [erts-10.5.5] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe]

Eshell V10.5.5  (abort with ^G)
1>
  • 出現上述信息說明安裝成功

第二種方案:

從https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7下載erlang-22.1.8-1.el7.x86_64.rpm包

從https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc下載rabbitmq-release-signing-key.asc簽名祕鑰

rpm --import rabbitmq-release-signing-key.asc  #導入rpm庫的密鑰
rpm -ivh erlang-21.2.4-1.el7.centos.x86_64.rpm  #安裝erlang包

RabbitMQ安裝

2.RabbitMQ下載,下載地址是

https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.5

在這裏插入圖片描述在這裏插入圖片描述

  • 可以手動下載指定的版本然後再上傳到CentOS7系統上的home目錄下
  • 使用wget下載指定版本的rabbitmq到CentOS7系統上的home目錄下

如果wget不存在則需要安裝:

yum install wget

下載rabbitmq3.8.5版本

#切換到home目錄
cd /home
##下載RabbitMQ
wget https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm
3.安裝rabbitmq

切換到CentOS7系統的home目錄下,執行如下命令

yum install rabbitmq-server-3.8.5-1.el7.noarch.rpm
4.啓動web管理頁面,啓動rabbitmq-management插件
rabbitmq-plugins enable rabbitmq_management

如果系統提示找不到,則使用如下查看插件名稱:

rabbitmq-plugins list

啓動RabbitMQ應用服務並順帶啓動Erlang虛擬機:

##後臺啓動節點,-detached參數是爲了能讓RabbitMQ服務能以守護進程的方式在後臺運行
rabbitmq-server start -detached

下面的命令安裝過程中不執行:
關閉RabbitMQ應用服務及Erlang虛擬機:

# rabbitmqctl stop [pid_file]停止Erlang虛擬機和RabbitMQ應用服務
# rabbitmqctl shutdown 停止Erlang虛擬機和RabbitMQ應用服務,與stop不同之處是會阻塞直到停止成功
# 如果停止失敗將會返回一個非0的退出碼
rabbitmqctl stop

停止RabbitMQ應用服務,但Erlang虛擬機會繼續運行.此命令主要用於優先執行其它管理操作(這些管理操作需要先停止RabbitMQ應用服務),如. reset.例如:

# 啓動RabbitMQ應用程序
# rabbitmqctl -n rabbit@hostname start_app 在集羣中的一個節點啓動另外一個節點的RabbitMQ應用
rabbitmqctl start_app

啓動RabbitMQ應用服務.

此命令典型用於在執行了其它管理操作之後,重新啓動停止的RabbitMQ應用服務。如reset.例如:

# 停止RabbitMQ應用程序,但是Erlang VM虛擬機繼續運行
# rabbitmqctl -n rabbit@hostname stop_app 在集羣中的一個節點停止另外一個節點的RabbitMQ應用
rabbitmqctl stop_app
5.增加訪問用戶, 默認用戶guest只能本地訪問(只在主節點執行,如:rabbit1)
# 新增用戶 rabbitmqctl add_user {username} {password}
# 修改用戶密碼 rabbitmqctl change_password {username} {newpassword}
# 驗證用戶密碼 rabbitmqctl authenticate_user {username} {password}
# 刪除用戶 rabbitmqctl delete_user {username}
# 列出所有用戶,結果爲用戶名和用戶TAG rabbitmqctl list_users
# 修改用戶密碼 rabbitmqctl change_password [username] [new_password]
rabbitmqctl add_user admin admin

設置角色(標籤tag):

# 設置用戶標籤(tag) rabbitmqctl set_user_tags {username} {tag...}
# tag有如下幾種選項
# none:無任何角色,新建的用戶默認值
# management:可以訪問WEB管理界面
# policymaker:包含management的所有權限,並且可以管理策略(Policy)和參數(Parameter)
# monitoring:包含management的所有權限,並且可以看到所有連接、信道和節點信息。
# administrator:包含monitoring的所有權限,並且可管理虛擬主機、用戶、權限、策略、參數等,這是最高權限。
rabbitmqctl set_user_tags admin administrator

設置默認vhost("/")訪問權限

# 設置權限rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
# 舉兩個列子
# 爲rabbitmq用戶設置可以對名稱爲test_vhost的vhost下面的資源可配置,可寫,可讀rabbitmqctl set_permissions -p test_vhost rabbitmq ".*" ".*" ".*"
# 爲rabbitmq用戶設置可以對名稱爲test_vhost的vhost下面的以order開頭的資源可配置,所有資源可寫,所有資源可讀rabbitmqctl set_permissions -p test_vhost rabbitmq "^order.*" ".*" ".*
# conf:此處的值是一個正則表達式,用於匹配用戶在哪些資源上擁有可配置權限。
# write:此處的值是一個正則表達式,用於匹配用戶在哪些資源上擁有可寫入權限。
# read:此處的值是一個正則表達式,用於匹配用戶在哪些資源上擁有可讀取權限。
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
=重複上面的步驟分別在不同的服務器上安裝Erlang和RabbitMQ============
接下來在三臺主機rabbit1(主機名)、rabbit2(主機名)、rabbit3(主機名)上的hosts文件添加IP地址和節點(主機名)的映射信息
vi /etc/hosts

配置IP和主機名的映射:

172.30.67.121  rabbit1
172.30.67.122  rabbit2
172.30.67.123  rabbit3

以下命令安裝過程中不執行
查看主機名:

[root@rabbit3 /]# hostname
rabbit3

查看CentOS版本號:

[root@rabbit3 /]# cat /etc/centos-release
CentOS Linux release 7.7.1908 (Core)
以rabbit1節點爲主節點,停止rabbit2、rabbit3節點的服務,命令如下:
rabbitmqctl stop

複製rabbit1主機節點的.erlang.cookie值,確保三個節點的祕鑰令牌相同,cookie相當於祕鑰令牌,集羣中的RabbitMQ節點需要通過交換祕鑰令牌以獲得相互認證;

複製祕鑰要執行如下指令:
##修改文件讀寫權限

chmod 777 /var/lib/rabbitmq/.erlang.cookie

##修改祕鑰值

vi /var/lib/rabbitmq/.erlang.cookie   

##cookie文件權限改爲400

chmod 400 /var/lib/rabbitmq/.erlang.cookie

.erlang.cookie的路徑在/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie;

啓動Erlang虛擬機和RabbitMQ應用:

rabbitmq-server start -detached

關閉RabbitMQ應用:

rabbitmqctl stop_app

執行如下命令加入集羣:

# 指示節點成爲指定節點所在集羣的成員,在加入集羣之前節點要stop_app,並且要reset
# rabbitmqctl join_cluster seed-node [--ram|--disc] 指定加入集羣的節點是ram類型還是disc,默認disc
# 節點離開集羣,可以使用rabbitmqctl reset或rabbitmqctl -n rabbit@rabbit1 forget_cluster_node rabbit@rabbit3
# rabbit@rabbit1爲要離開集羣中的一個節點,rabbit@rabbit3爲當前節點
rabbitmqctl join_cluster rabbit@rabbit1

啓動RabbitMQ應用:

rabbitmqctl start_app

在任意一個節點上執行設置鏡像模式命令

# 設置集羣爲鏡像隊列
# rabbitmqctl set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}
rabbitmqctl set_policy -p / --priority 0 --apply-to queues ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

查看已經添加的策略

rabbitmqctl list_policies

常用操作命令

  • 6.集羣相關操作命令
#  設置集羣名稱
rabbitmqctl set_cluster_name rabbit@rabbit_cluster
#重命名節點名稱
rabbitmqctl  rename_cluster_node   oldnode1  newnode1  [oldnode2  newnode2]  [oldnode3  newnode3...]
# 刪除集羣上指定的節點,刪除是遠程端點必須rabbitmqctl stop_app
# --offline 啓用從脫機節點刪除節點。這隻在所有節點都脫機並且最後一個要關閉的節點無法聯機的情況下才有用,
# 從而阻止整個集羣啓動。它不應該在任何其他情況下使用,因爲它可能導致不一致
# rabbitmqctl -n rabbit@rabbit1 forget_cluster_node rabbit@rabbit3 在其它節點上操作,從節點rabbit@rabbit1刪除節點rabbit@rabbit3
rabbitmqctl forget_cluster_node NodeName [--offline] 
# 指示已加入集羣的節點上線後聯繫clusternode,這不同於join_cluster,因爲它不加入任何集羣,
# 它會檢查clusternode已經以集羣的形式存在於集羣中了
# 需要這個命令的動機是當節點離線時,集羣可以變化.考慮這樣的情況,節點A和節點B都在集羣裏邊,
# 這裏節點A掉線了,C又和B集羣了,然後B又離開了集羣.當A醒來的時候,它會嘗試聯繫B,
# 但這會失敗,因爲B已經不在集羣中了.update_cluster_nodes -n A C 可解決這種場景
# rabbitmqctl update_cluster_nodes clusternode
rabbitmqctl update_cluster_nodes -n rabbit@A rabbit@B rabbit@C
# 查看集羣狀態
rabbitmqctl cluster_status
# 更改集羣節點類型
rabbitmqctl change_cluster_node_type [disk|ram]
  • 7.CentOS7查看主機名
[root@rabbit2 ~]# hostname
rabbit2
  • 8.清空節點的狀態,並將其恢復到空白狀態
# 表示設置RabbitMQ節點爲原始狀態。會從該節點所屬的cluster中都刪除,從管理數據庫中刪除所有數據,例如配置的用戶和vhost,還會刪除所有的持久消息。
# 要想reset和force_reset操作執行成功,RabbitMQ應用需要處於停止狀態,即執行過 rabbitmqctl stop_app
rabbitmqctl reset 
# 表示強制性地設置RabbitMQ節點爲原始狀態。它和reset的區別在於,可以忽略目前管理數據庫的狀態和cluster的配置,無條件的reset。
# 雖然會忽略目前管理的mnesia數據庫和cluster配置,但是會刪除掉當前節點的mnesia數據庫配置和cluster配置,集羣中的其它節點需要使用rabbitmqctl forget_cluster_node rabbit@hostname
# 該方法的使用,應當用在當數據庫或者cluster配置損壞的情況下作爲最後的方法。
rabbitmqctl force_reset
  • 9.查看節點的日誌
##日誌存放在/var/log/rabbitmq目錄下
tail -f /var/log/rabbitmq/rabbit\@rabbit3.log
  • 10.環境變量和配置文件默認位置在
##配置文件
/etc/rabbitmq/rabbitmq.conf
##環境變量配置文件
/etc/rabbitmq/rabbitmq-env.conf
##cookie地址
/var/lib/rabbitmq/.erlang.cookie
##mnesia數據庫地址
/var/lib/rabbitmq/mnesia/
# 插件地址
/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.1/plugins
##日誌位置
/var/log/rabbitmq/rabbit\@rabbit1.log

GitHub地址:https://github.com/mingyang66/spring-parent/blob/master/spring-boot-control-rabbitmq-service/RabbitMQ%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%9ACentOS7%E4%B8%AD%E5%AE%89%E8%A3%85RabbitMQ%E9%9B%86%E7%BE%A4.md

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