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配置
RabbitNode2固定IP配置 拷贝压缩包文件
RabbitNode3固定IP配置 拷贝压缩包文件
配置/etc/hosts文件
配置hostname
配置yum
安装erlang依赖包
编译安装
让环境变量立即生效 退出当前终端后失效
验证是否成功
安装rabbitmq(3个主机)
编译安装
导入rabbitmq的管理界面(3个机子)
设置erlang(保证集群内的cookie内容一致)
编译安装:$HOME/.erlang.cookie
rpm安装:/var/lib/rabbitmq/.erlang.cookie
将 node1 的“.erlang.cookie”文件复制到 node2、node3 文件的权限为 400
使用-detached参数运行各节点(3个机子)
建立管理用户
添加用户并设置密码(guest用户 只能在本地访问)
添加权限(使admin用户对虚拟主机”/”具有权限)
修改用户角色(加入administrator用户组)
远程访问 用户名admin 密码123456
组成集群
将node2、node3 与node1组成集群
1 停止应用 并将节点设置为原始状态(勿使用./rabbitmqctl stop)
2 重复上述操作 加入node1的集群
3 node2 与node3自动建立连接 集群配置完毕
4 查看群集节点状态(在任意节点上执行)
在web页面上查看(node3为黄色 由于该节点上web管理插件还未启用)
在node3上启动
设置镜像队列策略(在任意节点上执行)
web页方式
命令方式
rabbitmqctl set_policy -p coresystem ha-all “^” '{"ha-mode":"all"}’
coresystem 虚拟主机名称
ha-all 策略名称
"^"匹配所有的队列
‘{“ha-mode”:“all”}’策略模式 all (即复制到所有节点,包含新增节点)
虚拟主机的作用
做一个消息的隔离
本质是一个rabbitmq-server
是否增加虚拟主机,增加几个,这是由开发中的业务决定(即有哪几类服务,哪些 服务用哪一个虚拟主机,这是一个规划)
配置Rabbitmq的负载均衡功能(通过Haproxy软件实现负载均衡功能)
安装、配置Haproxy
建立配置文件haproxy.cfg
创建启动脚本
启动脚本权限不够 增加权限
重新启动报错 没有用户和组 添加用户haproxy 其余报错是因为少打了个空格
再次启动还是失败 由于haproxy没有得到VIP,但是配置文件又绑定了VIP地址
修改内核参数 增加一条语句 启动haproxy的时候,允许忽视VIP的存在
保存结果使结果生效
再次启动又报错 丢失/var/lib/haproxy/stats
创建文件
重启脚本 终于成功
测试群集负载均衡功能
停止node3的网卡