Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Centos7环境下搭建Rabbitmq集群

Centos7环境下搭建Rabbitmq集群教程

作者:84岁带头冲锋

本文主要介绍了在CentOS 7.6上安装和配置RabbitMQ集群的过程,包括安装依赖、配置Erlang cookie、搭建集群、添加信任关系、安装管理插件等步骤,最后介绍了如何创建镜像队列以提高集群的可用性

一、服务器环境

操作系统:centos7.6

[root@localhost opt]# uname -srm
Linux 3.10.0-957.el7.x86_64 x86_64

服务器IP

192.168.161.16 node16
192.168.161.17 node17
192.168.161.18 node18

安装包

二、服务搭建

2.1 配置服务器名称

在正式部署环境前,需要将本节点必须的集群其他机器的IP、主机名加入hosts文件,执行指令如下:

[root@localhost opt]# vim /etc/hosts
#node
192.168.161.16 node16
192.168.161.17 node17
192.168.161.18 node18

注:根据实际配置,将所有集IP都添加进去。

2.2 关闭防火墙与增强

不关闭防火墙开放端口

开通端口:

[root@localhost opt]# 
firewall-cmd --permanent --add-port={4369/tcp,25672/tcp,5671/tcp,5672/tcp,15672/tcp}
或者
关闭防火墙
[root@localhost opt]# systemctl stop firewalld
[root@localhost opt]# systemctl disable firewalld

通常,在部署环境时候需要关闭selinux。编辑/etc/selinux/config文件将SELINUX设置为disabled。如下
[root@localhost opt]# vim /etc/selinux/config
[root@localhost opt]# setenforce 0   ##临时关闭,不需要重启即可生效

2.3 添加信任关系

生成密钥对(所有服务器均处理)

[root@localhost opt]# ssh-keygen -t rsa

将公钥复制到需要无密码登陆的服务器上

在192.168.161.16服务器上执行:
[root@localhost opt]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.161.17
[root@localhost opt]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.161.18

在192.168.161.17服务器上执行:
[root@localhost opt]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.161.16
[root@localhost opt]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.161.18

在192.168.161.18服务器上执行:
[root@localhost opt]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.161.16
[root@localhost opt]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.161.17

2.4 安装erlang

[root@localhost opt]# rpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm

2.5 安装RabbitMQ

[root@localhost opt]# rpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm 
[root@localhost opt]# rpm --import rabbitmq-release-signing-key.asc 
[root@localhost opt]# rpm -ivh tcp_wrappers-7.6-77.el7.x86_64.rpm 
[root@localhost opt]# rpm -ivh socat-1.7.2.4-1.el7.rf.x86_64.rpm
[root@localhost opt]# rpm -ivh rabbitmq-server-3.6.12-1.el7.noarch.rpm

2.6 查看启动状态与日志

日志文件位置:/var/log/rabbitmq/

[root@localhost ~]# systemctl start rabbitmq-server.service 
[root@localhost ~]# systemctl status rabbitmq-server.service 

出现running则启动成功

2.7 安装管理插件

2.7.1安装web管理插件

查看插件列表

[root@localhost ~]# rabbitmq-plugins list

安装插件

[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management

2.7.2 安装日志管理插件

#rabbitmq启用trace插件
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_tracing
#打开trace的开关:rabbitmqctl trace_on
#打开trace的开关(test为需要日志追踪的vhost):rabbitmqctl trace_on -p test
#关闭trace的开关:rabbitmqctl trace_off

2.7.3安装rabbitmq_delayed_message_exchange(延时队列)

将rabbitmq_delayed_message_exchange-0.0.1.ez传至/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins目录下

[root@localhost opt]# mv rabbitmq_delayed_message_exchange-0.0.1.ez  /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins/
[root@localhost opt]# cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins/
[root@localhost plugins]# rabbitmq-plugins enable rabbitmq_delayed_message_exchange

出现以下信息则说明启动成功

至此3台上面的rabbitmq都已安装完成,并且启动正常,现在开始配置集群服务。

2.8 普通集群配置

2.8.1 设置每个节点的cookie

说明:Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群镜像。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 $home/.erlang.cookie 中,我的是用rpm安装的,所以.erlang.cookie就放在/var/lib/rabbitmq中。

erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie文件,同时保证文件的权限是400,不然节点之间就无法通信。

打开文件然后需要先把其中的一台服务器的.erlang.cookie中的内容复制到别的机器上,最好是复制内容,因为文件权限不对的话会出现问题,在最后退出保存的时候使用wq!用来进行强制保存即可.

比如以192.168.161.16 node16为准

[root@localhost plugins]# cd /var/lib/rabbitmq/
[root@localhost rabbitmq]# cat .erlang.cookie
RGDIJSPIUOPKSUACDCVU

再编辑另两台.erlang.cookie,将原来的内容删掉替换为RGDIJSPIUOPKSUACDCVU;使用wq!强制保存。

erlang.cookie复制完成后,逐个重启节点服

[root@localhost rabbitmq]# systemctl stop rabbitmq-server.service
[root@localhost rabbitmq]# systemctl start rabbitmq-server.service 
[root@localhost rabbitmq]# systemctl status rabbitmq-server.service 

2.8.2 添加到集群

以节点192.168.161.16为集群主节点,在节点192.168.161.17和节点192.168.161.18上添加配置,以加入到集群中

[root@localhost rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@localhost
[root@localhost rabbitmq]# rabbitmqctl reset
Resetting node rabbit@localhost
[root@localhost rabbitmq]# rabbitmqctl join_cluster rabbit@192.168.161.16
[root@localhost rabbitmq]# rabbitmqctl start_app
Starting node rabbit@localhost

每台都查看集群状态

[root@localhost rabbitmq]# rabbitmqctl cluster_status

2.8.3 账号管理

==添加账号:(仅在主节点上执行即可)==
[root@localhost rabbitmq]# rabbitmqctl add_user admin admin
Creating user "admin"
==添加权tag:==
[root@localhost rabbitmq]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator]
[root@localhost rabbitmq]# rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
Setting permissions for user "admin" in vhost "/"
==查看当前用户列表:==
[root@localhost rabbitmq]# rabbitmqctl list_users
Listing users
admin	[administrator]
guest	[administrator]
==查看用户权限:==
[root@localhost rabbitmq]# rabbitmqctl list_user_permissions admin
Listing permissions for user "admin"
/	.*	.*	.*
[root@localhost rabbitmq]# 

其他操作:

删除用户guest
[root@localhost rabbitmq]# rabbitmqctl delete_user guest 
Deleting user "guest"
查看用户列表
[root@localhost rabbitmq]# rabbitmqctl list_users
Listing users
admin	[administrator]
更改用户密码
[root@localhost rabbitmq]# rabbitmqctl change_password Username Newpassword

[root@localhost rabbitmq]# rabbitmqctl change_password admin 123456
Changing password for user "admin"

2.8.4 访问web地址

URL:
http://192.168.161.16:15672

使用admin登陆,登陆成功后界面如下:

至此rabbitmq普通集群模式创建完成.

2.9其他维护操作

2.9.1从集群中移除节点

(在需要移除的节点服务器上操作,比如移除node17)

[root@node17 rabbitmq]#rabbitmqctl stop_app
[root@node17 rabbitmq]#rabbitmqctl reset
[root@node17 rabbitmq]#rabbitmqctl start_app

2.9.2改变集群节点类型

加入集群时指定节点类型:

[root@node16 rabbitmq]]#rabbitmqctl stop_app
[root@node16 rabbitmq]]#rabbitmqctl join_cluster --ram rabbit@192.168.161.16
[root@node16 rabbitmq]]#rabbitmqctl start_app

备注:–ram 指定内存节点类型,–disc指定磁盘节点类型

修改节点类型:

[root@node16 rabbitmq]]#rabbitmqctl stop_app
[root@node16 rabbitmq]]#rabbitmqctl change_cluster_node_type disc
[root@node16 rabbitmq]]#rabbitmqctl start_app

2.9.3日志文件

/var/log/rabbitmq/rabbit@node16.log
/var/log/rabbitmq/rabbit@node16-sasl.log

2.10集群镜像模式配置

上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。

镜像队列的创建可通过rabbitmq管理界面或者使用命令来创建。

2.10.1 命令方式建立镜像队列

输入以下命令:(所有服务器均操作)

rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}'

这样三台rabbitmq就可以数据同步了。

2.10.2 rabbitmq管理界面方式建立镜像队列

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文