先安装单机版
1.关闭防火墙,安装依赖 yum install socat
如果是刚修改了主机名hostname,需要先重启服务器(或者修改主机名之后立即执行bash命令强制生效),否则安装的mq会绑定之前的主机名,会安装失败。
2.安装erlang
yum 安装(缺点是版本可能会低)
https://www.rabbitmq.com/releases/erlang/ 这个网址下面下载最新版安装即可
erl查看是否安装完成
3.安装rabbitmq-server
yum安装的版本太低
http://www.rabbitmq.com/releases/rabbitmq-server到这里下载最新版安装
启动服务
*systemctl start rabbitmq-server
先启动服务,再做下面的操作,否则报以下错*
这是因为启动rabbitmq服务的同时也会启动4369服务(/usr/lib64/erlang/erts-8.0.3/bin/epmd -daemon)
rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务
可能会报错,这是因为erlang和rabbitmq版本不一致造成的,但目前不影响使用,所以我没处理
删除自带的用户,自定义用户
rabbitmqctl delete_user guest //删除guest用户
rabbitmqctl add_user admin admin //创建用户并设置密码
rabbitmqctl set_user_tags admin administrator //设置为管理用户
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" //设置权限
systemctl enable rabbitmq-server
部署集群
scp /var/lib/rabbitmq/.erlang.cookie root@slaveip:/var/lib/rabbitmq/
Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信
做完后每台机器都重启一下服务
systemctl restart rabbitmq-server
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@docker(master主机)
rabbitmqctl start_app
rabbitmqctl cluster_status
方法一:
修改每台hosts,把要脱离的那台机器从hosts里删除
在要脱离集群的节点执行:
rabbitmqctl stop_app
rabbitmqctl rest
rabbitmqctl start_app
在其他节点执行:(例如删除RMQ_M_154节点)
rabbitmqctl stop_app
rabbitmqctl forget_cluster_node rabbit@RMQ_M_154
将已有节点的cookies复制到新的节点
在新的节点执行
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@docker(rabbitmq的master节点)
rabbitmqctl start_app
尽管我们部署好了普通模式的集群,但因为节点间只同步队列结构并不进行消息的同步,对于一些可靠性要求较高的场景需要对队列中的消息也同步到所以节点。
使用Rabbit镜像功能,需要基于rabbitmq策略来实现,政策是用来控制和修改群集范围的某个vhost队列行为和Exchange行为,在cluster中任意节点启用策略,策略会自动同步到集群节点。
策略的修改可以通过命令也可以通过WEB,如果我是通过WEB来修改的,非常简单。
Pattern:“^” 表示所有匹配所有队列名称。”^log” 是指同步”log”开头的队列名称。
ha-mode:“all”代表同步到所以节点。