分布式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集群部署的主要内容,如果未能解决你的问题,请参考以下文章