天天看點

rabbitmq

(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