RabbitMQ集群
RabbitMQ 集群
一、集群
1.1 集群类型
1.1.1 普通集群
创建好集群后的默认模式
queue创建后,如果没有其他的policy,消息实体只存在于其中一个节点,A、B两个rabbitMQ节点仅有相同的元数据,即队列结构,但队列的数据仅保存在创建节点A上,当consumer从B节点拉去时,A、B节点会临时进行消息传输,把A中的实体取出,并经过B节点发送给consumer。
consumer可以连接任何一个节点获取消息。而当A节点故障后,B节点将无法获取A节点中还未消费的消息实体。
1.1.2 镜像集群
把需要的队列做成镜像队列。
镜像模式再普通集群模式基础上增加一些策略,消息实体在节点之间同步(HA方案)。镜像模式会增加集群内部的网络带宽占用和服务器占用。
在对可靠性较高场合使用,一个队列要做成镜像队列,需要先设置policy,然后客户端创建队列的时候,rabbitmq集群根据“队列名称”自动设置是普通集群模式或镜像队列。
1.2 节点类型
节点类型分为内存节点和磁盘节点。
内存节点:只将数据保存在内存中,速度更快,存在数据丢失风险。
磁盘节点:将数据保存在内存和磁盘中(默认模式)。
1.3 推荐架构
集群中有3台或以上机器,其中1台使用磁盘模式,其它节点使用内存节点。
二、部署集群
2.1 创建rabbitMQ集群
rabbitmq集群依赖erlang的集群来工作,先建立erlang的集群环境。
erlang集群环境中的节点是通过magic cookie实现。这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件为400权限。各节点cookie需要一致,否则无法通信。
systemctl stop rabbitmq-server
#停止所有节点的rabbitmq服务
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.1:/var/lib/rabbitmq/.erlang.cookie
#同步magic cookie 到所有rabbitmq节点
systemctl start rabbitmq-server
#启动所有节点的rabbitmq服务
rabbitmqctl cluster_status
#查看当前节点的运行状态
#早期版本是json格式信息
rabbitmqctl stop_app
#停止节点服务,停止写入
rabbitmqctl reset
#清空元数据
rabbitmqctl join_cluster rabbit@mq-server-01 --ram
#加入到集群中
#集群添加通过主机名连接,需要先做好解析,否则无法连接。
rabbitmqctl start_app
#启动节点服务2.2 启动镜像模式
rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}'
#在任一节点执行一次即可
rabbitmqctl cluster_status
#查看当前节点的运行状态2.3 创建账号
rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"2.4 启用rabbitmq_management插件
在所有节点启用rabbitmq_management插件,否则在web管理界面会看不到统计数据。
rabbitmq-plugins enable rabbitmq_management
#启用插件