安装

环境:centos7

下载 erlang:https://github.com/rabbitmq/erlang-rpm/releases/tag/v23.3.3
image.png
下载 rabbitmq:https://www.rabbitmq.com/install-rpm.html#downloads
image.png

安装 erlang

  1. rpm -ivh erlang-23.3.3-1.el7.x86_64.rpm

安装 rabbitmq

  1. rpm -ivh rabbitmq-server-3.8.16-1.el7.noarch.rpm

如果安装 rabbitmq 失败,提示缺少socat依赖,可执行yum install socat -y安装 socat

启动 rabbitmq

  1. systemctl start rabbitmq-server

查看 rabbitmq 状态

  1. systemctl status rabbitmq-server

停止 rabbitmq

  1. systemctl stop rabbitmq-server

错误解决

启动 rabbitmq-server 时如果以下错误

  1. root@172 huangxy]# systemctl start rabbitmq-server
  2. Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.

使用 journalctl -xe 查看错误原因

  1. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: ########## Licensed under the MPL 2.0. Website: https://rabbitm
  2. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Doc guides: https://rabbitmq.com/documentation.html
  3. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Support: https://rabbitmq.com/contact.html
  4. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Tutorials: https://rabbitmq.com/getstarted.html
  5. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Monitoring: https://rabbitmq.com/monitoring.html
  6. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Logs: /var/log/rabbitmq/rabbit@localhost.log
  7. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
  8. 5 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Config file(s): (none)
  9. 5 24 23:00:23 172.16.0.5 rabbitmq-server[18048]: Starting broker... completed with 0 plugins.
  10. 5 24 23:00:23 172.16.0.5 systemd[1]: Started RabbitMQ broker.
  11. -- Subject: Unit rabbitmq-server.service has finished start-up
  12. -- Defined-By: systemd
  13. -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
  14. --
  15. -- Unit rabbitmq-server.service has finished starting up.
  16. --
  17. -- The start-up result is done.
  18. 5 24 23:00:23 172.16.0.5 polkitd[683]: Unregistered Authentication Agent for unix-process:18042:918776 (system bu
  19. 5 24 23:00:41 172.16.0.5 postfix/pickup[18120]: warning: valid_hostname: numeric hostname: 172.16.0.5
  20. 5 24 23:00:41 172.16.0.5 postfix/pickup[18120]: fatal: unable to use my own hostname
  21. 5 24 23:00:42 172.16.0.5 postfix/master[1212]: warning: process /usr/libexec/postfix/pickup pid 18120 exit status
  22. 5 24 23:00:42 172.16.0.5 postfix/master[1212]: warning: /usr/libexec/postfix/pickup: bad command startup -- throt
  23. 5 24 23:01:01 172.16.0.5 anacron[81143]: Job `cron.weekly' started
  24. 5月 24 23:01:01 172.16.0.5 anacron[81143]: Job `cron.weekly' terminated
  25. 5月 24 23:01:01 172.16.0.5 systemd[1]: Started Session 11 of user root.

解决办法:

  1. echo "NODENAME=rabbitmq@localhost" >> /etc/rabbitmq/rabbitmq-env.conf

然后重新启动 rabbitmq 就可以了

参考:https://blog.csdn.net/Remember_Z/article/details/116767740
https://blog.csdn.net/dw_java08/article/details/77856038

修改 nodename

修改 nodename 步骤如下:

  • 停止 rabbitmq 服务
  • 修改 nodename
  • 修改 hosts 文件
  • 重启 rabbitmq 服务

停止 rabbitmq 服务

如果想修改 rabbitmq 的 nodename 的话,需要先停止 rabbitmq

  1. systemctl stop rabbitmq-server

注意要停止整个 rabbitmq 服务,包括 erlang 虚拟机,不能使用 rabbitmqctl stop_app 只停止 rabbitmq 进程,实操发现这样做后面再使用 rabbitmqctl start_app 会报错

修改 NODENAME

然后再修改 rabbitmq-env.conf 文件中的 nodename 配置。rabbitmq-env.conf 文件一般存放在 /etc/rabbitmq/rabbitmq-env.conf,比如我这里将 nodename 由原来的 rabbitmq@localhost 修改为 rabbitmq@car

  1. NODENAME=rabbitmq@car

修改 hosts 文件

由于我们这里的hostname——car是自己随便取的,所以还需要在 /etc/hosts 中添加 hostname 映射,将其映射到本地即可,在 /etc/hosts 文件中添加下面这行。如果 hostname 在 DNS 中能找到,则无需修改 hosts 映射

  1. 127.0.0.1 car

重启 rabbitmq

添加完之后重启 rabbitmq 就可以了

  1. systemctl start rabbitmq-server

注意:修改nodename,一定要先停止 rabbitmq 再修改 /etc/hosts 跟 rabbitmq-evn.conf 文件。如果先修改 rabbitmq-env.conf 文件的话,会导致原本 rabbitmq 无法停止,因为 nodename 已经指向 car 了

集群搭建

以搭建三哥 rabbitmq 节点的集群为例,假设有三台已经安装了rabbitmq的服务器,ip 分别为 172.16.0.10172.16.0.11172.16.0.12,对应的mq节点名称分别为stonehousecar

修改hosts文件

为了各个节点都能相互识别对方的存在,需要在 hosts 文件中添加 IP 地址与节点名称的映射信息

  1. 172.16.0.10 stone
  2. 172.16.0.11 house
  3. 172.16.0.12 car

编辑cookie文件

集群中的 rabbitmq 节点需要通过交换密钥令牌以获得相互认证。所以需要修改 rabbitmq 的 cookie 文件,以确保各个节点的 cookie 文件使用的是同一个值。cookie 文件默认路径为/var/lib/rabbitmq/.erlang.cookie 或者$HOME/.erlang.cookie。如果不确定,可以使用find命令查看 cookie 文件路径
将其中一台服务器的 cookie 文件内容复制到其他服务器节点就可以了

加入集群

  1. $ systemctl start rabbitmq-server
  2. $ rabbitmqctl stop_app
  3. $ rabbitmqctl reset
  4. $ rabbitmqctl join_cluster rabbitmq@stone

注意

  • 最好不要通过克隆现有虚拟机的方式创建虚拟机,这可能导致不可预知的坑,我一开始直接克隆虚拟机,后面 join_cluster 的时候一直 join 不进去,后面把虚拟机删了重新创建就可以了(当然也有可能是其他原因导致的,不一定是克隆虚拟机的问题)
  • 一定要确保 cookie 一样