Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

rabbitmq介绍

rabbitmq: 是一个消息中间件,主要提供消息的接受和发送,实现各微服务之间的消息 异步

一般以集群方式部署

rabbitmq是依据erlang的分布式特性来实现分布式集群

部署rabbitmq分布式集群时要先安装erlang, 并把其中-个服务的cookie复制到另外的 节点

rabbitmq集群中,各个rabbitmq为对等节点,即每个节点均提供给客户端连接,进行 消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为磁盘节点,为 了防止机器重启后的消息消失

 

Rabbitmq的cluster集群模式一般分为两种

普通模式

镜像模式

 

普通模式下  以两个节点(rabbit01、rabbit02) 为例

消息实体只存在于其中一个节点rabbit01 (或者rabbit02)

rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构

consumer应尽量连接每一个节点,从中取消息(否则无论consumer连rabbit01或rabbit02, 出口总在rabbit01,会产生瓶颈)

 

镜像模式

消息队列通过rabbitmq HA镜像队列进行消息队列实体复制

将需要消费的队列变为镜像队列,存在于多个节点,以实现RabbitMQ的HA高可用性

消息实体会主动在镜像节点之间实现同步

缺点就是,集群内部的同步通讯会占用大量的网络带宽

 

环境要求

多个节点需要在同一个局域网内

需要有相同的erlang cookie 否则不能正常通信

(cookie内容一致性 可采用scp的方式进行拷贝复制)

 

环境介绍

node1    192.168.12.10

node2    192.168.12.11

node3    192.168.12.12

 

三台机子的基础配置

RabbitNode1固定IP配置

 Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

RabbitNode2固定IP配置 拷贝压缩包文件

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

RabbitNode3固定IP配置 拷贝压缩包文件

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

配置/etc/hosts文件

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

配置hostname

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

配置yum

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

安装erlang依赖包

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

编译安装

 Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

让环境变量立即生效 退出当前终端后失效

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

验证是否成功

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

安装rabbitmq(3个主机)

编译安装

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

导入rabbitmq的管理界面(3个机子)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

设置erlang(保证集群内的cookie内容一致)

编译安装:$HOME/.erlang.cookie

rpm安装:/var/lib/rabbitmq/.erlang.cookie

将 node1 的“.erlang.cookie”文件复制到 node2、node3 文件的权限为 400

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

使用-detached参数运行各节点(3个机子)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

建立管理用户

添加用户并设置密码(guest用户 只能在本地访问)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

添加权限(使admin用户对虚拟主机”/”具有权限)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

修改用户角色(加入administrator用户组)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

远程访问 用户名admin 密码123456

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

组成集群

将node2、node3 与node1组成集群

1   停止应用 并将节点设置为原始状态(勿使用./rabbitmqctl stop)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

2   重复上述操作 加入node1的集群

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

3   node2 与node3自动建立连接 集群配置完毕

4   查看群集节点状态(在任意节点上执行)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

在web页面上查看(node3为黄色 由于该节点上web管理插件还未启用)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

在node3上启动

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

设置镜像队列策略(在任意节点上执行)

web页方式

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

命令方式

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

rabbitmqctl set_policy -p coresystem  ha-all “^” '{"ha-mode":"all"}’

coresystem 虚拟主机名称

ha-all 策略名称

"^"匹配所有的队列

‘{“ha-mode”:“all”}’策略模式  all (即复制到所有节点,包含新增节点)

虚拟主机的作用

做一个消息的隔离

本质是一个rabbitmq-server

是否增加虚拟主机,增加几个,这是由开发中的业务决定(即有哪几类服务,哪些 服务用哪一个虚拟主机,这是一个规划)

 

配置Rabbitmq的负载均衡功能(通过Haproxy软件实现负载均衡功能)

安装、配置Haproxy

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

建立配置文件haproxy.cfg

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

创建启动脚本

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

启动脚本权限不够 增加权限

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

重新启动报错 没有用户和组 添加用户haproxy 其余报错是因为少打了个空格

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

再次启动还是失败 由于haproxy没有得到VIP,但是配置文件又绑定了VIP地址

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

修改内核参数 增加一条语句 启动haproxy的时候,允许忽视VIP的存在

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

保存结果使结果生效

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

再次启动又报错 丢失/var/lib/haproxy/stats

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

创建文件

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

重启脚本 终于成功

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

测试群集负载均衡功能

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

 

停止node3的网卡

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)

Linux rabbitmq服务安全配置(消息队列 以集群方式部署 Rabbitmq的负载均衡)