RabbitMQ 消息服务用户手册
(UBP, Message Queue)
XXX
2016 年 7 月
RabbitMQ 消息服务用户手册
第 2 页
1 基础知识
1.1 集群总体概述
Rabbitmq Broker 集群是多个 erlang 节点的逻辑组,每个节点运行 Rabbitmq 应用,他们之间共享用户、
虚拟主机、队列、exchange、绑定和运行时参数。
1.2 集群复制信息
除了 message queue(存在一个节点,从其他节点都可见、访问该队列,要实现 queue 的复制就需要做
queue 的 HA)之外,任何一个 Rabbitmq broker 上的所有操作的 data 和 state 都会在所有的节点之间进行复
制。
1.3 集群运行前提
1、集群所有节点必须运行相同的 erlang 及 Rabbitmq 版本。
2、hostname 解析,节点之间通过域名相互通信,本文为 3 个 node 的集群,采用配置 hosts 的形式。
1.4 集群互通方式
1、集群所有节点必须运行相同的 erlang 及 Rabbitmq 版本 hostname 解析,节点之间通过域名相互通信,
本文为 3 个 node 的集群,采用配置 hosts 的形式。
1.5 端口及其用途
1、5672 客户端连接端口。
2、15672 web 管控台端口。
3、25672 集群通信端口。
1.6 集群配置方式
通过 rabbitmqctl 手工配置的方式。
1.7 集群故障处理
1、rabbitmq broker 集群允许个体节点宕机。
2、对应集群的的网络分区问题(network partitions)集群推荐用于 LAN 环境,不适用 WAN 环境;要
通过 WAN 连接 broker,Shovel or Federation 插件是最佳解决方案(Shovel or Federation 不同于集群:
注 Shovel 为中心服务远程异步复制机制,稍后会有介绍)。
1.8 节点运行模式
为保证数据持久性,目前所有 node 节点跑在 disk 模式,如果今后压力大,需要提高性能,考虑采用 ram
模式。
1.9 集群认证方式
通过 Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。rabbitmq server
在 启 动 的 时 候 , erlang VM 会 自 动 创 建 一 个 随 机 的 cookie 文 件 。 cookie 文 件 的 位 置 :
/var/lib/rabbitmq/.erlang.cookie 或者/root/.erlang.cookie。我们的为保证 cookie 的完全一致,采用
从一个节点 copy 的方式,实现各个节点的 cookie 文件一致。
RabbitMQ 消息服务用户手册
第 3 页
2 集群搭建
2.1 集群节点安装
1、安装依赖包
PS:安装 rabbitmq 所需要的依赖包
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++
kernel-devel m4 ncurses-devel tk tc xz
2、下载安装包
3、安装服务命令
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
4、修改集群用户与连接心跳检测
注意修改 vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 文件
修改:loopback_users 中的 <<"guest">>,只保留 guest
修改:heartbeat 为 1
5、安装管理插件
//首先启动服务
/etc/init.d/rabbitmq-server start stop status restart
//查看服务有没有启动: lsof -i:5672
rabbitmq-plugins enable rabbitmq_management
//可查看管理端口有没有启动: lsof -i:15672 或者 netstat -tnlp|grep 15672
6、服务指令
/etc/init.d/rabbitmq-server start stop status restart
验证单个节点是否安装成功:http://192.168.11.71:15672/
1. Ps:以上操作三个节点(71、72、73)同时进行操作
2.2 文件同步步骤
PS:选择 76、77、78 任意一个节点为 Master(这里选择 76 为 Master),也就是说我们需要把 76 的 Cookie 文
件同步到 77、78 节点上去,进入/var/lib/rabbitmq 目录下,把/var/lib/rabbitmq/.erlang.cookie 文件的
权限修改为 777,原来是 400;然后把.erlang.cookie 文件 copy 到各个节点下;最后把所有 cookie 文件权
限还原为 400 即可。
/etc/init.d/rabbitmq-server stop
wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm
RabbitMQ 消息服务用户手册
第 4 页
//进入目录修改权限;远程 copy77、78 节点,比如:
scp /var/lib/rabbitmq/.erlang.cookie 到 192.168.11.77 和 192.168.11.78 中
2.3 组成集群步骤
1、停止 MQ 服务
PS:我们首先停止 3 个节点的服务
2、组成集群操作
PS:接下来我们就可以使用集群命令,配置 76、77、78 为集群模式,3 个节点(76、77、78)执行启动命令,
后续启动集群使用此命令即可。
rabbitmq-server -detached
3、slave 加入集群操作(重新加入集群也是如此,以最开始的主节点为加入节点)
//注意做这个步骤的时候:需要配置/etc/hosts 必须相互能够寻址到
bhz77:rabbitmqctl stop_app
bhz77:rabbitmqctl join_cluster --ram rabbit@bhz76
bhz77:rabbitmqctl start_app
bhz78:rabbitmqctl stop_app
bhz78:rabbitmqctl join_cluster rabbit@bhz76
bhz78:rabbitmqctl start_app
//在另外其他节点上操作要移除的集群节点
rabbitmqctl forget_cluster_node rabbit@bhz24
4、修改集群名称
PS:修改集群名称(默认为第一个 node 名称):
rabbitmqctl set_cluster_name rabbitmq_cluster1
5、查看集群状态
PS:最后在集群的任意一个节点执行命令:查看集群状态
rabbitmqctl cluster_status
6、管控台界面
PS: 访问任意一个管控台节点:http://192.168.11.71:15672 如图所示
rabbitmqctl stop
RabbitMQ 消息服务用户手册
第 5 页
2.4 配置镜像队列
PS:设置镜像队列策略(在任意一个节点上执行)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
PS:将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态一致,RabbitMQ 高可用集群就
已经搭建好了,我们可以重启服务,查看其队列是否在从节点同步。
2.5 安装 Ha-Proxy
1、Haproxy 简介
HAProxy 是一款提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理软件,HAProxy 是完全免费的、借
助 HAProxy 可以快速并且可靠的提供基于 TCP 和 HTTP 应用的代理解决方案。
HAProxy 适用于那些负载较大的 web 站点,这些站点通常又需要会话保持或七层处理。
HAProxy 可以支持数以万计的并发连接,并且 HAProxy 的运行模式使得它可以很简单安全的整合进架构中,同
时可以保护 web 服务器不被暴露到网络上。
2、Haproxy 安装
PS:79、80 节点同时安装 Haproxy,下面步骤统一
//下载依赖包
yum install gcc vim wget
//下载 haproxy
wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz
//解压
tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local
//进入目录、进行编译、安装
cd /usr/local/haproxy-1.6.5
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy
//赋权