分布式rabbitmq集群部署

Posted ddiuehu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式rabbitmq集群部署相关的知识,希望对你有一定的参考价值。

分布式rabbitmq集群部署
本次部署使用的三台centos服务器
安装的erlang 版本为 21.0.4
安装的rabbitmq版本为3.7.8-rc.2
在三台服务器中分别安装rabbitmq-server
rabbitmq通信是建立在erlang环境中 所以需要先安装erlang环境

因为国外的erlang官方地址中中国不能直接访问,所以我们使用第三方包
https://github.com/rabbitmq/erlang-rpm 安装说明地址

修改系统repo包文件
修改repo
# In /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1

输入 yum install erlang

安装socat
输入 yum install socat

安装 rabbitmq-server
安装官方文档 http://www.rabbitmq.com/install-rpm.html
rpm -Uvh https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8-rc.2/rabbitmq-server-3.7.8.rc.2-1.el7.noarch.rpm

安装好之后
启动 rabbitmq 守护程序
chkconfig rabbitmq-server on

启动 rabbitmq-server
输入 systemctl start rabbitmq-server.service
查看 rabbitmq-server 状态
systemctl status rabbitmq-server.service

开启rabbitmq web控制台插件
rabbitmq-plugins enable rabbitmq_management

在fireewall开放如下端口
4369 25672 15672 5672
15672 为web控制台程序所需端口
4369/25672为rabbitmq分布式集群通信所需接口
5672 为应用程序访问rabbitmq所需端口


查看firewall所有端口
firewall-cmd --zone=public --list-ports

添加端口

firewall-cmd --zone=public --add-port=4369/tcp --permanent

重写加载firewall

firewall-cmd --reload

然后添加一个rabbitmq管理员用户
rabbitmqctl add_user username user_pwd

添加用户到管理员用户组

rabbitmqctl set_user_tags username administrator

设置该用户具有远程访问权限

rabbitmqctl set_permissions -p ‘/‘ rabbit1_admin ‘.‘ ‘.‘ ‘.‘

在本地登录rabbitmq管理控制台

现在一个rabbitmq-server已经搭建好了


然后依照以上方法 在另外两个服务器搭建好rabbitmq-server后

开始将这三台搭建好一个rabbitmq-server集群
rabbitmq搭建集群有几种方式
具体可以参考官方文档

官方文档地址

首先需要保证三台服务器能够通过服务名互相访问

因为需要通过服务名相互访问 所以三台服务器名不能相同 如果相同可以在 /etc/hostname文件修改
如下
vi /etc/hostname
按下insert键 编辑
将里面内容删除 填入你想设置的服务名
建议修改为 rabbitmq1
ctrl+c 输入:wq 保存 不保存 输入:q!
修改后重启

重启rabbitmq-server
然后可以看见rabbitmq-server node名字已经改为 [email protected] hostname=你刚修改的文字
如果主机名设置过长 重启rabbitmq-server回报异常错误信息 服务状态是 status=69
可以通过将主机名重新该段 或者修改 rabbitmq-server配置文件

在修改 /etc/localhosts文件
vi /etc/localhosts
在末尾加上如下内容
173.16.12.110 rabbitmq1
173.16.12.93 rabbitmq2
173.16.12.92 rabbitmq3
分别是三台服务器地址 以及服务器名

在另外两台服务器上按如上操作分别配置
配置后可以通过 ping 服务器名 尝试能否访问 如 ping rabbitmq1
RabbitMQ节点和CLI工具(例如rabbitmqctl)使用cookie来确定是否允许它们相互通信。
要使两个节点能够通信,它们必须具有相同的共享密钥,
称为Erlang cookie。cookie只是一串字母数字字符,最大为255个字符。
它通常存储在本地文件中。该文件必须只能由所有者访问(具有600或类似的UNIX权限)。

我们需要保证三台服务器的 .erlang.cookie一致
通常情况下 .erlang.cookie文件在
/var/lib/rabbitmq/.erlang.cookie

也可以通过find命令查找
find / -name .erlang.cookie
.erlang.cookie文件默认不允许修改
所以我们需要先修改文件权限
chmod 777 .erlang.cookie
将内容修改为rabbitmq1 rabbitmq2 rabbitmq3一致后

需要将.erlang.cookie权限改回400
chmod 400 .erlang.cookie
否则rabbitmq-server会报 status=1错误

 


加入集群官方文档 https://www.rabbitmq.com/clustering.html 文档
现在开始 将rabbitmq2加入到rabbitmq1中
将rabbitmq2加入到rabbitmq1中
先停止 rabbitmq2
执行 rabbitmqctl stop_app
停止成功后 执行加入集群命令
rabbitmqctl join_cluster [email protected]

加入成功后重启启动
rabbitmqctl start_app

然后我们再用命令查看现在rabbitmq1和rabbitmq2的信息
rabbitmqctl cluster_status
可以看见 当前集群是包含了rabbitmq1于rabbitmq2

将rabbitmq3加入到rabbitmq2中
如法炮制
rabbitmqctl stop_app
rabbitmqctl join_cluster [email protected]
rabbitmqctl start_app

我们也可以登录到rabbitmq-server web控制台插件中查看集群信息
如下图所示

rabbitmq集群其中一台停止后 当它重新启动后会自动加入到集群中

 


rabbitmq所需端口使用功能描述
https://www.rabbitmq.com/clustering.html#selinux-ports



Port Access
SELinux, and similar mechanisms may prevent RabbitMQ from binding to a port. When that happens, RabbitMQ will fail to start. Firewalls can prevent nodes and CLI tools from communicating with each other. Make sure the following ports can be opened:

4369: epmd, a peer discovery service used by RabbitMQ nodes and CLI tools
5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS
25672: used for inter-node and CLI tools communication (Erlang distribution server port) and is allocated from a dynamic range (limited to a single port by default, computed as AMQP port + 20000). Unless external connections on these ports are really necessary (e.g. the cluster uses federation or CLI tools are used on machines outside the subnet), these ports should not be publicly exposed. See networking guide for details.
35672-35682: used by CLI tools (Erlang distribution client ports) for communication with nodes and is allocated from a dynamic range (computed as server distribution port + 10000 through server distribution port + 10010). See networking guide for details.
15672: HTTP API clients, management UI and rabbitmqadmin (only if the management plugin is enabled)
61613, 61614: STOMP clients without and with TLS (only if the STOMP plugin is enabled)
1883, 8883: (MQTT clients without and with TLS, if the MQTT plugin is enabled
15674: STOMP-over-WebSockets clients (only if the Web STOMP plugin is enabled)
15675: MQTT-over-WebSockets clients (only if the Web MQTT plugin is enabled)
It is possible to configure RabbitMQ to use different ports and specific network interfaces.

 






























































































以上是关于分布式rabbitmq集群部署的主要内容,如果未能解决你的问题,请参考以下文章

私有云Rabbitmq 集群部署

RabbitMQ分布式部署方案简介

详解RabbitMQ集群原理,值得收藏

RabbitMQ 部署及配置详解(集群部署)

Centos6.9下RabbitMQ集群部署记录

Centos6.9下RabbitMQ集群部署记录