(1)了解RabbitMQ服務的安裝與配置。
(2)了解RabbitMQ叢集的配置架構。
(3)了解RabbitMQ叢集的使用。
資料庫主從案例的節點規劃,見表2-1-1。
表2-1-1 節點規劃
IP
主機名
節點
172.30.11.12
rabbitmq1
RabbitMQ 磁盤節點
172.30.11.13
rabbitmq2
RabbitMQ 記憶體節點
172.30.11.14
rabbitmq3
使用OpenStack平台建立三台雲主機進行實驗,雲主機鏡像使用提供的CentOS_7.5_x86_64_XD.qcow2鏡像,flavor使用1核/2G記憶體/20G硬碟,自行配置網絡并使用遠端連接配接工具連接配接雲主機。節點規劃表中的IP位址為作者的IP位址,在進行實操案例的時候,按照自己的環境規劃網絡與IP位址。
使用遠端連接配接工具CRT連接配接到172.30.11.12、172.30.11.13、172.30.11.14這三台虛拟機,并對這三台虛拟機進行修改主機名的操作,172.30.11.12主機名修改為rabbitmq1;172.30.11.13主機名修改為rabbitmq2;172.30.11.14主機名修改為rabbitmq3。指令如下:
rabbitmq1節點:
[root@localhost ~]# hostnamectl set-hostname rabbitmq1
[root@localhost ~]# logout
[root@rabbitmq1 ~]# hostnamectl
Static hostname: rabbitmq1
Icon name: computer-vm
Chassis: vm
Machine ID: 622ba110a69e24eda2dca57e4d306baa
Boot ID: 859720a14f8f4b5e836f5a0fae7097e0
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.2.3.el7.x86_64
Architecture: x86-64
rabbitmq2節點:
[root@localhost ~]# hostnamectl set-hostname rabbitmq2
[root@rabbitmq2 ~]# hostnamectl
Static hostname: rabbitmq2
Boot ID: 5e41c48c85704016ad0bd940500cc255
rabbitmq3節點:
[root@rabbitmq3 ~]# hostnamectl
Static hostname: rabbitmq3
Boot ID: eef9314b97ac4331bfa423f1d3de67bf
三個節點關閉防火牆firewalld及SELinux服務,指令如下:
# setenforce 0
# systemctl stop firewalld
三個節點配置/etc/hosts檔案,修改為如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.30.11.12 rabbitmq1
172.30.11.13 rabbitmq2
172.30.11.14 rabbitmq3
三個節點均使用提供的rabbitmq-repo.tar.gz的壓縮包,上傳至虛拟機的/root目錄下,解壓并放在/opt目錄下,進入/etc/yum.repos.d目錄下,将原來的repo檔案移除,建立local.repo檔案并編輯内容,具體操作指令如下:
# tar -zxvf rabbitmq-repo.tar.gz -C /opt/
# cd /etc/yum.repos.d/
# mv * /media/
# vi local.repo
# cat local.repo
[rabbitmq]
name=rabbitmq
baseurl=file:///opt/rabbitmq-repo
gpgcheck=0
enabled=1
檢視配置的YUM源是否可用,指令如下:
# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
rabbitmq rabbitmq 26
repolist: 26
檢視到repolist數量,即YUM源配置成功。
配置完畢後,三個節點安裝RabbitMQ服務,指令如下:
# yum install -y rabbitmq-server
rabbitmq1節點啟動RabbitMQ服務并檢視服務狀态,指令如下:
# systemctl start rabbitmq-server
#[root@rabbitmq1 ~]# systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2020-10-20 05:48:17 UTC; 1h 7min ago
Process: 13641 ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop (code=exited, status=0/SUCCESS)
Main PID: 13685 (beam)
CGroup: /system.slice/rabbitmq-server.service
├─13685 /usr/lib64/erlang/erts-5.10.4/bin/beam -W w -K true -A30 -P 1048576 -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/ra...
├─13757 inet_gethost 4
└─13758 inet_gethost 4
Oct 20 05:48:14 rabbitmq1 systemd[1]: Starting RabbitMQ broker...
RabbitMQ提供了一個非常友好的圖形化監控頁面插件(rabbitmq_management),讓我們可以一目了然看見Rabbit的狀态或叢集狀态。啟用圖形化頁面插件的具體指令如下:
[root@rabbitmq1 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
啟用圖形化界面後,需要重新開機RabbitMQ服務,指令如下:
[root@rabbitmq1 ~]# service rabbitmq-server restart
Redirecting to /bin/systemctl restart rabbitmq-server.service
在開啟了圖形化監控頁面之後,能通過網頁通路,通路端口為15672,使用指令檢視端口啟動情況,指令如下:
[root@rabbitmq1 ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 13685/beam
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 500/rpcbind
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 11320/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1162/sshd
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 13685/beam
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 932/master
tcp6 0 0 :::5672 :::* LISTEN 13685/beam
tcp6 0 0 :::111 :::* LISTEN 500/rpcbind
tcp6 0 0 :::4369 :::* LISTEN 11320/epmd
tcp6 0 0 :::22 :::* LISTEN 1162/sshd
tcp6 0 0 ::1:25 :::* LISTEN 932/master
可以看到15672端口已開放,打開浏覽器,輸入rabbitmq1節點的ip加端口15672(http://172.30.11.12:15672)通路RabbitMQ監控界面,使用使用者名:密碼guest:guset登入,登入後如下圖所示:
Rabbitmq的叢集是依附于erlang叢集來工作的,是以必須先建構起一個erlang叢集。erlang叢集中各節點是由magic cookie來實作的,每個節點上要保持相同的.erlang.cookie檔案,這個cookie存放在/var/lib/rabbitmq/.erlang.cookie中,檔案是400的權限。必須保證各節點cookie一緻,不然節點之間就無法通信。
檢視rabbitmq1節點的.erlang.cookie檔案,并将該檔案複制到rabbitmq2和rabbitmq3節點的/var/lib/rabbitmq/目錄下,指令如下:
[root@rabbitmq1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
EZYGPUJOTSESXPAUFMWO
[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq2:/var/lib/rabbitmq/
[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq3:/var/lib/rabbitmq/
将.erlang.cookie檔案傳至rabbitmq2和rabbitmq3節點後,需要修改該檔案的使用者與使用者組,指令如下:
[root@rabbitmq2 rabbitmq]# chown rabbitmq:rabbitmq .erlang.cookie
[root@rabbitmq3 rabbitmq]# chown rabbitmq:rabbitmq .erlang.cookie
在rabbitmq2、rabbitmq3節點執行如下指令,将這兩個節點作為RAM節點加入到RabbitMQ叢集中,具體指令如下:
[root@rabbitmq2 rabbitmq]# rabbitmqctl stop_app
Stopping node rabbit@rabbitmq2 ...
...done.
[root@rabbitmq2 rabbitmq]# rabbitmqctl join_cluster --ram rabbit@rabbitmq1
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1 ...
[root@rabbitmq2 rabbitmq]# rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...
[root@rabbitmq3 rabbitmq]# rabbitmqctl stop_app
Stopping node rabbit@rabbitmq3 ...
[root@rabbitmq3 rabbitmq]# rabbitmqctl join_cluster --ram rabbit@rabbitmq1
Clustering node rabbit@rabbitmq3 with rabbit@rabbitmq1 ...
[root@rabbitmq3 rabbitmq]# rabbitmqctl start_app
Starting node rabbit@rabbitmq3 ...
預設rabbitmq啟動後是磁盤節點,在這個cluster指令下,rabbitmq2和rabbitmq3是記憶體節點,rabbitmq1是磁盤節點。
如果要使rabbitmq2、rabbitmq3都是磁盤節點,去掉--ram參數即可。
如果想要更改節點類型,可以使用指令rabbitmqctl change_cluster_node_type disc(ram),前提是必須停掉rabbit應用。
在rabbitmq2和rabbitmq3節點上啟用rabbitmq_management,指令如下:
[root@rabbitmq2 rabbitmq]# rabbitmq-plugins enable rabbitmq_management
[root@rabbitmq2 rabbitmq]# service rabbitmq-server restart
[root@rabbitmq3 rabbitmq]# rabbitmq-plugins enable rabbitmq_management
[root@rabbitmq3 rabbitmq]# service rabbitmq-server restart
啟用rabbitmq2節點和rabbitmq3節點的監控界面後,登入http://172.30.11.12:15672,檢視監控界面,如下圖所示:
可以看到rabbitmq1節點為資料節點,rabbitmq2和rabbitmq3節點為RAM記憶體節點。
檢視插件打開情況,指令如下:
[root@rabbitmq1 ~]# rabbitmq-plugins list
[e] amqp_client 3.3.5
[ ] cowboy 0.5.0-rmq3.3.5-git4b93c2d
[ ] eldap 3.3.5-gite309de4
[e] mochiweb 2.7.0-rmq3.3.5-git680dba8
[ ] rabbitmq_amqp1_0 3.3.5
[ ] rabbitmq_auth_backend_ldap 3.3.5
[ ] rabbitmq_auth_mechanism_ssl 3.3.5
[ ] rabbitmq_consistent_hash_exchange 3.3.5
[ ] rabbitmq_federation 3.3.5
[ ] rabbitmq_federation_management 3.3.5
[E] rabbitmq_management 3.3.5
[e] rabbitmq_management_agent 3.3.5
[ ] rabbitmq_management_visualiser 3.3.5
[ ] rabbitmq_mqtt 3.3.5
[ ] rabbitmq_shovel 3.3.5
[ ] rabbitmq_shovel_management 3.3.5
[ ] rabbitmq_stomp 3.3.5
[ ] rabbitmq_test 3.3.5
[ ] rabbitmq_tracing 3.3.5
[e] rabbitmq_web_dispatch 3.3.5
[ ] rabbitmq_web_stomp 3.3.5
[ ] rabbitmq_web_stomp_examples 3.3.5
[ ] sockjs 0.3.4-rmq3.3.5-git3132eb9
[e] webmachine 1.10.3-rmq3.3.5-gite9359c7
啟動監控管理器指令:
# rabbitmq-plugins enable rabbitmq_management
關閉監控管理器指令:
# rabbitmq-plugins disable rabbitmq_management
檢視所有的隊列:
# rabbitmqctl list_queues
Listing queues ...
清除所有的隊列:
# rabbitmqctl reset
檢視使用者:
# rabbitmqctl list_users
Listing users ...
guest [administrator]
檢視狀态:
# rabbitmqctl status
檢視叢集狀态,在RabbitMQ叢集的任一節點上,可以檢視RabbitMQ叢集的狀态,指令如下:
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1]},{ram,[rabbit@rabbitmq3,rabbit@rabbitmq2]}]},
{running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]}]
可以檢視到rabbitmq1節點為disc磁盤節點,rabbitmq2節點和rabbitmq3節點為RAM記憶體節點。
新增使用者admin,并設定密碼為admin,指令如下:
# rabbitmqctl add_user admin admin
删除admin使用者,指令如下:
# rabbitmqctl delete_user admin
修改admin使用者的密碼為admin123,指令如下:
# rabbitmqctl change_password admin admin123
設定角色指令:
# rabbitmqctl set_user_tags admin administrator monitoring policymaker management
設定使用者權限指令:
# rabbitmqctl set_permissions -p VHostPath admin ConfP WriteP ReadP
查詢所有權限指令:
# rabbitmqctl list_permissions [-p VHostPath]
指定使用者權限指令:
# rabbitmqctl list_user_permissions admin
清除使用者權限指令:
# rabbitmqctl clear_permissions [-p VHostPath] admin