• 2-Centos7下安装部署RabbitMQ


    2-Centos7下安装部署RabbitMQ

    前言

    RabbitMQ是一个开源的强大的企业消息系统,支持主流的操作系统,支持多种开发语言。我们项目中使用RabbitMQ作为消息队列,解耦业务,构建高可靠的消息队列系统。RabbitMQ可以用在订单系统、日志系统、数据收集等常见场景中。

    本文我们介绍如何在CentOS上安装当前最新版的RabbitMQ:v3.8.1,以及如何使用Docker来安装RabbitMQ。

    安装RabbitMQ

    安装 RabbitMQ 之前要安装 Erlang,需要先到RabbitMQ官网看下版本对应关系。

    bc44dbb9dba234fe5939c4b7a40a902e.png
    image-20210428162322998

    当前最新版rabbitmq-server是 3.8.14,最新版Erlang是 23.x。我们可以分别在Github和RabbitMQ官网下载对应的版本的rpm包。

    下载 Erlang 的 rpm 包

    访问 Erlang 的 Github,如下:https://github.com/rabbitmq/erlang-rpm/releases

    e883c0787280d6776f72108cbb923e75.png

    image-20210428162622833
    1. # 下载地址
    2. https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.2/erlang-23.3.2-1.el7.x86_64.rpm

    下载 RabbitMQ 的 rpm 包

    访问 RabbitMQ 的官网,如下:https://www.rabbitmq.com/install-rpm.html#downloads

    aa98063d4bddb2f70b261de591aeb116.png

    image-20210428163132620
    1. # 下载地址
    2. wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm

    下载好rpm包后,接下来我们使用rpm进行安装。

    使用 rpm 安装

    首先安装依赖socat,安装Erlang时需要这个。

    yum install -y socat

    接下来安装Erlang和RabbitMQ。

    1. rpm -ivh erlang-23.3.2-1.el7.x86_64.rpm
    2. rpm -ivh rabbitmq-server-3.8.14-1.el7.noarch.rpm

    执行上述两行命令后,即完成了Erlang和RabbitMQ的安装,就这么简单。

    启动RabbitMQ:

    systemctl start rabbitmq-server

    设置RabbitMQ开机自启动:

    systemctl enable rabbitmq-server

    RabbitMQ其他操作:

    1. #查看启动后的情况
    2. rabbitmqctl status
    3. #关闭服务
    4. rabbitmqctl stop
    5. #重启rabbitmq
    6. systemctl restart rabbitmq-server
    7. #服务状态
    8. systemctl status rabbitmq-server
    9. #查看所有队列
    10. rabbitmqctl list_queues
    11. # 清除某个队列的数据
    12. rabbitmqctl purge_queue queueName
    13. # 清除所有队列数据以及用户数据、配置数据:慎用,记得要先把MQ 的meta data备份出来,reset后,将meta data导入即可。
    14. rabbitmqctl reset
    15. 但是在使用此命令前,要先关闭应用,否则不能清除。关闭应用的命令为:
    16. rabbitmqctl stop_app
    17. 执行了这两条命令后再次启动此应用。命令为:
    18. rabbitmqctl start_app
    19. 再次执行命令:
    20. rabbitmqctl list_queues
    21. #查看所有虚拟主机
    22. rabbitmqctl list_vhosts
    23. #添加用户:
    24. rabbitmqctl  add_user username password
    25.  
    26. #列出所有用户:
    27. rabbitmqctl list_users
    28.  
    29. #删除用户:
    30. rabbitmqctl  delete_user username
    31.  
    32. #清除用户权限:
    33. rabbitmqctl  clear_permissions  -p  vhostpath  username
    34.  
    35. #列出用户权限:
    36. rabbitmqctl  list_user_permissions username
    37.  
    38. #修改密码:
    39. rabbitmqctl  change_password  username  newpassword
    40.  
    41. #设置用户权限:
    42. rabbitmqctl  set_permissions  -p  vhostpath  username  ".*"  ".*"  ".*"
    43.  
    44. #创建虚拟主机: 
    45. rabbitmqctl add_vhost vhostpath
    46.  
    47. #列出所以虚拟主机: 
    48. rabbitmqctl list_vhosts
    49.  
    50. #列出虚拟主机上的所有权限: 
    51. rabbitmqctl list_permissions -p vhostpath
    52.  
    53. #删除虚拟主机: 
    54. rabbitmqctl delete_vhost vhost vhostpath
    55.  
    56. #移除所有数据,要在 rabbitmqctl stop_app 之后使用: 
    57. rabbitmqctl reset
    58.  
    59. #组成集群命令: 
    60. rabbitmqctl join_cluster  [--ram]
    61.  
    62. #查看集群状态: 
    63. rabbitmqctl cluster_status
    64.  
    65. #修改集群节点的存储形式: 
    66. rabbitmqctl change_cluster_node_type disc | ram
    67.  
    68. #摘除节点:
    69. rabbitmqctl   forget_cluster_node  [--offline]  
    70.  
    71. #修改节点名称:
    72. rabbitmqctl  rename_cluster_node   oldnode1  newnode1  [oldnode2  newnode2]  [oldnode3  newnode3...]

    配置RabbitMQ

    1.启用网页版后台管理插件:

    rabbitmq-plugins enable rabbitmq_management

    执行如下:

    33023ac63ccd78b24fd764a6d8a92c02.png

    image-20210428164029666

    2.新建一个用户名为admin,密码为admin的管理员,并授予管理员(administrator)权限。

    1. rabbitmqctl add_user admin admin
    2. rabbitmqctl set_user_tags admin administrator

    执行如下:

    d93d3441f0c82d5e4013b7f86d1d4ee8.png

    image-20210428164202881

    3.设置admin可以使用的虚机权限。

    1. rabbitmqctl add_vhost admin
    2. rabbitmqctl set_permissions -p admin  admin ".*" ".*" ".*"

    执行如下:

    ffde3b82d473ca7e94778bb9f3cca143.png

    image-20210428165843811

    4.插件管理:

    1. #插件列表: 
    2. rabbitmq-plugins list 
    3. #启动插件: 
    4. rabbitmq-plugins enable XXX   (XXX为插件名)
    5. #停用插件: 
    6. rabbitmq-plugins disable XXX

    5.打开后台web管理界面:

    http://localhost:15672/, 刚才我们设置了admin用户,所以可以使用admin登录,也可以使用默认账号和密码都是guest登录。进入管理界面后可以看到:

    使用账号/密码:admin / admin 进行登录,如下:

    07a1125d4724103e69357a06d339cacf.png

    image-20210428170256779

    07d5f9b0dea6d777a7bf809074ac3a12.png

    image-20210428170347443

    我们可以在后台管理用户、队列等信息。

    6.修改RabbitMQ默认端口

    RabbitMQ默认开启了几个端口:

    4369:erlang发现口

    5672:client端通信口,客户端要连接RabbitMQ服务时要用到

    15672:后台管理界面ui端口,进入管理后台时访问url如:http://localhost:15672/

    25672:server间内部通信口

    有时候在生产环境下,我们出于安全等原因希望修改掉默认的端口号。

    我们安装新版的 RabbitMQ-3.8.x 后,发现找不到它的配置文件,按常理,服务的端口开发都可以在配置文件里配置的。但是事实上RabbitMQ-3.8.1并没有生成配置文件,需要我们手动添加配置文件。

    1. [root@..]# ls /etc/rabbitmq/rabbitmq.conf
    2. ls: cannot access /etc/rabbitmq/rabbitmq.conf: No such file or directory # 需要手动添加

    官方建议配置文件的位置:/etc/rabbitmq/rabbitmq.conf

    我们现在要做的是把默认端口5672改成56720,并且允许远程访问。把web管理默认端口15672改成56271。只需如下配置:

    1. # vim /etc/rabbitmq/rabbitmq.conf
    2. # AMQP 0-9-1 and 1.0 port,默认5672,允许远程访问
    3. listeners.tcp.default = 0.0.0.0:56720
    4. # web管理,默认15672
    5. management.tcp.port = 56721
    6. management.tcp.ip   = 0.0.0.0

    执行如下:

    63bb65459274aabe8ec446994c2d66fc.png

    image-20210428171409882

    保存,并重启RabbitMQ服务。

    1. systemctl restart rabbitmq-server
    2. systemctl status rabbitmq-server

    使用netstat -lntp查看端口监听情况:

    5988b413ef22c5b6e0055239814ca571.png

    image-20210428171623853

    7.其他配置

    我们可以到官网地址:https://www.rabbitmq.com/configure.html,了解RabbitMQ的性能优化方面的配置。

    使用Docker安装RabbitMQ

    在开发环境中,我们也可以直接使用 Docker 进行安装更加方便,下面我们继续使用Docker来安装一遍。

    首先,我们得安装docker环境。

    yum install -y docker

    查看docker的版本:

    1. [root@server docker]# docker version
    2. Client:
    3.  Version:         1.13.1
    4.  API version:     1.26
    5.  Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64
    6.  Go version:      go1.10.3
    7.  Git commit:      7d71120/1.13.1
    8.  Built:           Mon Jun  7 15:36:09 2021
    9.  OS/Arch:         linux/amd64
    10. Server:
    11.  Version:         1.13.1
    12.  API version:     1.26 (minimum version 1.12)
    13.  Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64
    14.  Go version:      go1.10.3
    15.  Git commit:      7d71120/1.13.1
    16.  Built:           Mon Jun  7 15:36:09 2021
    17.  OS/Arch:         linux/amd64
    18.  Experimental:    false
    19. [root@server docker]#

    搜索RabbitMQ镜像:

    1. [root@ ~]# docker search rabbitmq
    2. NAME                                        DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    3. rabbitmq                                    RabbitMQ is an open source multi-protocol me…   3703                [OK]                
    4. bitnami/rabbitmq                            Bitnami Docker Image for RabbitMQ               62                                      [OK]
    5. tutum/rabbitmq                              Base docker image to run a RabbitMQ server      22                                      
    6. kbudde/rabbitmq-exporter                    rabbitmq_exporter for prometheus                15                                      [OK]
    7. frodenas/rabbitmq                           A Docker Image for RabbitMQ                     12                                      [OK]
    8. cyrilix/rabbitmq-mqtt                       RabbitMQ MQTT Adapter                           9                                       [OK]
    9. arm32v7/rabbitmq                            RabbitMQ is an open source multi-protocol me…   7

    拉取RabbitMQ镜像:

    docker pull docker.io/rabbitmq

    然后查看镜像:

    1. [root@server docker]# docker images
    2. REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    3. docker.io/rabbitmq   latest              ba647756d55a        3 days ago          221 MB
    4. [root@server docker]#

    然后运行容器:

    docker run --name rabbitmq -d -p 5672:5672 -p 15672:15672 -v /data:/var/lib/rabbitmq docker.io/rabbitmq

    整理写一个重启服务脚本:

    1. [root@server docker_rabbitmq]# cat restart_service.sh 
    2. #!/bin/sh
    3. basedir=`pwd`
    4. datadir=$basedir/data
    5. image=docker.io/rabbitmq
    6. name=rabbitmq
    7. mkdir -p $datadir
    8. # docker run --name rabbitmq -d -p 5672:5672 -p 15672:15672 -v /data:/var/lib/rabbitmq rabbitmq:3.8.1-management
    9. docker stop $name
    10. docker rm $name
    11. docker run -d --name=$name --restart always -p 5672:5672 -p 15672:15672 -v $datadir:/var/lib/rabbitmq $image
    12. [root@server docker_rabbitmq]#

    最后,使用docker ps查看运行的容器。

    1. [root@server docker_rabbitmq]# docker ps
    2. CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                                                                              NAMES
    3. b959544500f4        docker.io/rabbitmq   "docker-entrypoint..."   2 seconds ago       Up 1 second         4369/tcp, 0.0.0.0:5672->5672/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   rabbitmq

    这样,一个RabbitMQ的docker环境就装好了。

    在Docker 配置RabbitMQ

    1.启用网页版后台管理插件:

    rabbitmq-plugins enable rabbitmq_management

    执行如下:

    1. [root@server docker_rabbitmq]# docker exec -it rabbitmq bash
    2. root@b959544500f4:/# rabbitmq-plugins enable rabbitmq_management
    3. Enabling plugins on node rabbit@b959544500f4:
    4. rabbitmq_management
    5. The following plugins have been configured:
    6.   rabbitmq_management
    7.   rabbitmq_management_agent
    8.   rabbitmq_prometheus
    9.   rabbitmq_web_dispatch
    10. Applying plugin configuration to rabbit@b959544500f4...
    11. The following plugins have been enabled:
    12.   rabbitmq_management
    13. started 1 plugins.
    14. root@b959544500f4:/#

    此时可以通过浏览器访问管理页:http://localhost:15672/

    291dfa5a74f867c22ee3f5ce19d9f00d.png

    可以通过默认的账号 guest / guest 登录如下:

    5e568478cbd9df124094ab301acaec73.png

    2.新建一个用户名为admin,密码为admin的管理员,并授予管理员(administrator)权限。

    1. rabbitmqctl add_user admin admin
    2. rabbitmqctl set_user_tags admin administrator

    执行如下:

    1. root@b959544500f4:/# rabbitmqctl add_user admin admin
    2. Adding user "admin" ...
    3. Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
    4. root@b959544500f4:/# 
    5. root@b959544500f4:/# rabbitmqctl set_user_tags admin administrator
    6. Setting tags for user "admin" to [administrator] ...
    7. root@b959544500f4:/#

    3.设置admin可以使用的虚机权限。

    1. rabbitmqctl add_vhost admin
    2. rabbitmqctl set_permissions -p admin  admin ".*" ".*" ".*"

    执行如下:

    1. root@b959544500f4:/# rabbitmqctl add_vhost admin
    2. Adding vhost "admin" ...
    3. root@b959544500f4:/# rabbitmqctl set_permissions -p admin  admin ".*" ".*" ".*"
    4. Setting permissions for user "admin" in vhost "admin" ...
    5. root@b959544500f4:/#

    4.插件管理:

    1. #插件列表: 
    2. rabbitmq-plugins list 
    3. #启动插件: 
    4. rabbitmq-plugins enable XXX   (XXX为插件名)
    5. #停用插件: 
    6. rabbitmq-plugins disable XXX

    5.配置路径说明

    1. rabbit的配置文件目录:/etc/rabbitmq
    2. rabbit的数据文件目录:/var/lib/rabbitmq
    3. rabbit的日志文件目录:/var/log/rabbitmq

    如果需要持续化,可以挂在这些路径:

    1. # 创建挂在路径
    2. mkdir -p ~/rabbitmq/{etc,lib,var/{lib,log}}
    3. # 启动容器
    4. docker run -d -p 1883:1883 -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 61613:61613 -p 61614:61614 -v ~/rabbitmq/etc:/etc/rabbitmq -v ~/rabbitmq/lib:/var/lib/rabbitmq -v ~/rabbitmq/log:/var/log/rabbitmq --name rabbit rabbitmq:management

    后台管理的使用

    1.用户角色

    前面我们使用命令行创建了一个admin用户,也可以在页面上创建,如下:

    e30a68c646e5dc2d71cf7506ad42a723.png

    在这里可以选择不同的角色来创建用户。

    角色说明

    1、 超级管理员(administrator)

    可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。

    2、 监控者(monitoring)

    可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

    3、 策略制定者(policymaker)

    可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。

    4、 普通管理者(management)

    仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。

    5、 其他

    无法登陆管理控制台,通常就是普通的生产者和消费者。

    2.创建 vhost 并授权给用户

    a24cbbe47314f9e2d4f339733a63d81e.png647b0b836fba78f155fc954d28b86aaf.pngf5d5c7f9f555b1555ef5927a9ef5da07.pnge88fc44dcb2cde237a14c74fad2892b3.png39f80d7547f2c096a72da12176949576.png

    3.开启 management_agent 插件

    下面切换 libai 这个用户登录一下,如下:

    f6cfb0f0dd331b92807daadaa863fbd9.png

    提示了这个告警:

    Stats in management UI are disabled on this node

    解决措施:

    1. #进入rabbitmq容器
    2. docker exec -it {rabbitmq容器名称或者id} /bin/bash
    3. #进入容器后,cd到以下路径
    4. cd /etc/rabbitmq/conf.d/
    5. #修改 management_agent.disable_metrics_collector = false
    6. echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
    7. #退出容器
    8. exit
    9. #重启rabbitmq容器
    10. docker retart {rabbitmq容器id}

    下面我们执行如下:

    1. # 进入配置目录
    2. root@b959544500f4:/# cd /etc/rabbitmq/conf.d/
    3. root@b959544500f4:/etc/rabbitmq/conf.d# ls
    4. 10-default-guest-user.conf  management_agent.disable_metrics_collector.conf
    5. root@b959544500f4:/etc/rabbitmq/conf.d# 
    6. # 查看当前的配置
    7. root@b959544500f4:/etc/rabbitmq/conf.d# cat management_agent.disable_metrics_collector.conf
    8. management_agent.disable_metrics_collector = true
    9. # 修改配置
    10. root@b959544500f4:/etc/rabbitmq/conf.d# echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
    11. root@b959544500f4:/etc/rabbitmq/conf.d# 
    12. # 查看修改后的配置
    13. root@b959544500f4:/etc/rabbitmq/conf.d# cat management_agent.disable_metrics_collector.conf 
    14. management_agent.disable_metrics_collector = false
    15. root@b959544500f4:/etc/rabbitmq/conf.d# 
    16. root@b959544500f4:/etc/rabbitmq/conf.d# exit
    17. exit
    18. [root@server docker_rabbitmq]# ls
    19. data  restart_service.sh
    20. # 重启容器
    21. [root@server docker_rabbitmq]# docker restart rabbitmq
    22. rabbitmq
    23. [root@server docker_rabbitmq]#

    配置完毕后,再访问页面如下:

    152b2236778e61da04fa5784e5b7d754.png

  • 相关阅读:
    微软总裁:元宇宙概念应避免炒作,科技行业需配合监管机构
    【ArcGIS Pro二次开发】(73):使用NPOI库操作Excel
    java基于springboot二手车交易管理系统附源码
    mos管实现主副电源自动切换电路,并且“零”压降,静态电流20uA
    Golang:gocron定时任务管理系统的安装与使用
    基于混合模型磁链观测器的异步电机矢量控制的学习
    Web前端大作业——基于HTML+CSS+JavaScript仿英雄联盟LOL游戏网站
    JSON字符串之JS中JSON.parse()
    昇思MindSpore时序AI SIG,共同提高序列大数据分析能力
    Codeforces Round #800 (Div. 2)
  • 原文地址:https://blog.csdn.net/u012887259/article/details/126239606