• Centos7环境下搭建Rabbitmq 集群


    一、服务器环境

    操作系统: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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注:根据实际配置,将所有集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   ##临时关闭,不需要重启即可生效
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.4 安装erlang

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

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2.6 查看启动状态与日志

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

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

    出现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
    
    • 1
    • 2
    • 3

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

    在这里插入图片描述

    至此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 
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    每台都查看集群状态
    [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]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    其他操作:

    删除用户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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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
    
    • 1
    • 2
    • 3

    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
    
    • 1
    • 2
    • 3

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

    修改节点类型:

    [root@node16 rabbitmq]]#rabbitmqctl stop_app
    [root@node16 rabbitmq]]#rabbitmqctl change_cluster_node_type disc
    [root@node16 rabbitmq]]#rabbitmqctl start_app
    
    • 1
    • 2
    • 3

    2.9.3日志文件

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

    2.10集群镜像模式配置

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

    镜像队列的创建可通过rabbitmq管理界面或者使用命令来创建。
    Pattern:“^” 表示所有匹配所有队列名称。”^log” 是指同步”log”开头的队列名称。
    ha-mode:“all”代表同步到所以节点。

    2.10.1 命令方式建立镜像队列

    输入以下命令:(所有服务器均操作)
    rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’
    这样三台rabbitmq就可以数据同步了。

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

    在这里插入图片描述

  • 相关阅读:
    记一次有意思的 SQL 实现 → 分组后取每组的第一条记录
    X光胸片器官图像分割系统:前端交互展示
    平衡搜索树——AVL树小记
    CPU 100%排查及常见案例
    PSS:你距离NMS-free+提点只有两个卷积层 | 2021论文
    Consumer位移管理-Kafka从入门到精通(十一)
    【PDF报表】Jasperreports+jaspersoft studio快速入门
    Spring Cloud Netfix Hystrix(断路器)
    用一段爬虫代码爬取高音质音频示例
    怎样把m4a转换成mp3格式?
  • 原文地址:https://blog.csdn.net/L2111533547/article/details/125530069