安装
环境:centos7
下载 erlang:https://github.com/rabbitmq/erlang-rpm/releases/tag/v23.3.3
下载 rabbitmq:https://www.rabbitmq.com/install-rpm.html#downloads
安装 erlang
rpm -ivh erlang-23.3.3-1.el7.x86_64.rpm
安装 rabbitmq
rpm -ivh rabbitmq-server-3.8.16-1.el7.noarch.rpm
如果安装 rabbitmq 失败,提示缺少
socat依赖,可执行yum install socat -y安装socat
启动 rabbitmq
systemctl start rabbitmq-server
查看 rabbitmq 状态
systemctl status rabbitmq-server
停止 rabbitmq
systemctl stop rabbitmq-server
错误解决
启动 rabbitmq-server 时如果以下错误
root@172 huangxy]# systemctl start rabbitmq-serverJob 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 查看错误原因
5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: ########## Licensed under the MPL 2.0. Website: https://rabbitm5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Doc guides: https://rabbitmq.com/documentation.html5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Support: https://rabbitmq.com/contact.html5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Tutorials: https://rabbitmq.com/getstarted.html5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Monitoring: https://rabbitmq.com/monitoring.html5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Logs: /var/log/rabbitmq/rabbit@localhost.log5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: /var/log/rabbitmq/rabbit@localhost_upgrade.log5月 24 23:00:22 172.16.0.5 rabbitmq-server[18048]: Config file(s): (none)5月 24 23:00:23 172.16.0.5 rabbitmq-server[18048]: Starting broker... completed with 0 plugins.5月 24 23:00:23 172.16.0.5 systemd[1]: Started RabbitMQ broker.-- Subject: Unit rabbitmq-server.service has finished start-up-- Defined-By: systemd-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel---- Unit rabbitmq-server.service has finished starting up.---- The start-up result is done.5月 24 23:00:23 172.16.0.5 polkitd[683]: Unregistered Authentication Agent for unix-process:18042:918776 (system bu5月 24 23:00:41 172.16.0.5 postfix/pickup[18120]: warning: valid_hostname: numeric hostname: 172.16.0.55月 24 23:00:41 172.16.0.5 postfix/pickup[18120]: fatal: unable to use my own hostname5月 24 23:00:42 172.16.0.5 postfix/master[1212]: warning: process /usr/libexec/postfix/pickup pid 18120 exit status5月 24 23:00:42 172.16.0.5 postfix/master[1212]: warning: /usr/libexec/postfix/pickup: bad command startup -- throt5月 24 23:01:01 172.16.0.5 anacron[81143]: Job `cron.weekly' started5月 24 23:01:01 172.16.0.5 anacron[81143]: Job `cron.weekly' terminated5月 24 23:01:01 172.16.0.5 systemd[1]: Started Session 11 of user root.
解决办法:
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
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
NODENAME=rabbitmq@car
修改 hosts 文件
由于我们这里的hostname——car是自己随便取的,所以还需要在 /etc/hosts 中添加 hostname 映射,将其映射到本地即可,在 /etc/hosts 文件中添加下面这行。如果 hostname 在 DNS 中能找到,则无需修改 hosts 映射
127.0.0.1 car
重启 rabbitmq
添加完之后重启 rabbitmq 就可以了
systemctl start rabbitmq-server
注意:修改nodename,一定要先停止 rabbitmq 再修改 /etc/hosts 跟 rabbitmq-evn.conf 文件。如果先修改 rabbitmq-env.conf 文件的话,会导致原本 rabbitmq 无法停止,因为 nodename 已经指向 car 了
集群搭建
以搭建三哥 rabbitmq 节点的集群为例,假设有三台已经安装了rabbitmq的服务器,ip 分别为 172.16.0.10、172.16.0.11、172.16.0.12,对应的mq节点名称分别为stone、house、car
修改hosts文件
为了各个节点都能相互识别对方的存在,需要在 hosts 文件中添加 IP 地址与节点名称的映射信息
172.16.0.10 stone172.16.0.11 house172.16.0.12 car
编辑cookie文件
集群中的 rabbitmq 节点需要通过交换密钥令牌以获得相互认证。所以需要修改 rabbitmq 的 cookie 文件,以确保各个节点的 cookie 文件使用的是同一个值。cookie 文件默认路径为/var/lib/rabbitmq/.erlang.cookie 或者$HOME/.erlang.cookie。如果不确定,可以使用find命令查看 cookie 文件路径
将其中一台服务器的 cookie 文件内容复制到其他服务器节点就可以了
加入集群
$ systemctl start rabbitmq-server$ rabbitmqctl stop_app$ rabbitmqctl reset$ rabbitmqctl join_cluster rabbitmq@stone
注意
- 最好不要通过克隆现有虚拟机的方式创建虚拟机,这可能导致不可预知的坑,我一开始直接克隆虚拟机,后面 join_cluster 的时候一直 join 不进去,后面把虚拟机删了重新创建就可以了(当然也有可能是其他原因导致的,不一定是克隆虚拟机的问题)
- 一定要确保 cookie 一样
