脚本安装
安装Erlang
执行配置脚本
1
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
运行yum安装
1
yum install erlang
安装RabbitMQ
执行配置脚本
1
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
运行yum安装
1
yum install rabbitmq-server
安装完成,运行服务
1
2
3
4
5
6
7开机启动
chkconfig rabbitmq-server on
启动服务
/sbin/service rabbitmq-server start
停止服务
/sbin/service rabbitmq-server stop
rpm离线安装
下载Erlang安装包
1
rpm -ivh erlang-22.1.8-1.el7.x86_64.rpm
下载rabbitmq安装包
1
rpm -ivh rabbitmq-server-3.8.1-1.el7.noarch.rpm
集群构建指南
RabbitMQ节点使用短域名或完全合格(FQDN)域名相互寻址。因此,所有群集成员的主机名以及所有可能使用命令行工具(例如rabbitmqctl)的机器都必须是可解析的。
主机名解析可以使用操作系统提供的任何标准方法:
DNS记录
本地主机文件(例如/etc/hosts)。配置为:
1
192.168.3.1 rabbit1
RabbitMQ节点和CLI工具(例如rabbitmqctl)使用cookie来确定是否允许它们彼此通信。为了使两个节点能够通信,它们必须具有称为Erlang cookie的相同共享机密。
Cookie只是一串字母数字字符,最大长度为255个字符。它通常存储在本地文件中。所有者必须只能访问该文件(例如,具有UNIX权限600或类似权限)。所以想要进行集群之间的通信,每个群集节点必须具有相同的cookie。
Linux, MacOS, *BSD系统的cookie位置一般放在
/var/lib/rabbitmq/.erlang.cookie
或者$HOME/.erlang.cookie
Windows系统,Erlang 20.2之后的版本一般放在
C:\Windows\system32\config\systemprofile\.erlang.cookie
或者C:\Users\%USERNAME%\.erlang.cookie
;而Erlang 19.3 到 20.2之间的会在C:\Windows\.erlang.cookie
或者C:\Users\%USERNAME%\.erlang.cookie
配置好hosts和cookie之后,我们正式开始搭建集群。假如我们现在又三台服务器分别为rabbit1、rabbit2、rabbit3。
首先我们使用
rabbitmq-server -detached
启动rabbit1机器。然后把rabbit2机器加入到集群
rabbitmqctl join-cluster rabbit@rabbit1
,并启动rabbitmqctl start_app
用相同的方式把rabbit3放入集群中,然后查看集群状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20on rabbit1
rabbitmqctl cluster_status
=> Cluster status of node rabbit@rabbit1 ...
=> [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]},
=> {running_nodes,[rabbit@rabbit3,rabbit@rabbit2,rabbit@rabbit1]}]
=> ...done.
on rabbit2
rabbitmqctl cluster_status
=> Cluster status of node rabbit@rabbit2 ...
=> [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]},
=> {running_nodes,[rabbit@rabbit3,rabbit@rabbit1,rabbit@rabbit2]}]
=> ...done.
on rabbit3
rabbitmqctl cluster_status
=> Cluster status of node rabbit@rabbit3 ...
=> [{nodes,[{disc,[rabbit@rabbit3,rabbit@rabbit2,rabbit@rabbit1]}]},
=> {running_nodes,[rabbit@rabbit2,rabbit@rabbit1,rabbit@rabbit3]}]
=> ...done.可以看到我们每个节点都是disc磁盘类型。
节点可以是磁盘节点或RAM节点。 (注意:磁盘和RAM可以互换使用)。 RAM节点仅将数据存储在内存中。这不包括消息,消息存储索引,队列索引和其他节点状态。
在大多数情况下,您希望所有节点都是磁盘节点。 RAM节点是一种特殊情况,可用于提高队列,交换或绑定流失率较高的群集的性能。 RAM节点不提供更高的消息速率。如有疑问,请仅使用磁盘节点。
由于RAM节点仅将内部数据库表存储在RAM中,因此它们必须在启动时从对等节点同步它们。这意味着一个群集必须至少包含一个磁盘节点。因此,不可能手动删除群集中最后剩余的磁盘节点。到此我们集群就创建完成了。