RabbitMQ集群搭建

前言

一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试环境 上使用其单实例部署就可以了,但是出于MQ中间件本身的可靠性、并发性、吞吐量和消息堆积能 力等问题的考虑,在生产环境上一般都会考虑使用RabbitMQ的集群方案。

集群方案的原理

RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通 过同步Erlang集群各节点的cookie来实现)。RabbitMQ本身不需要像ActiveMQ、Kafka那样通 过ZooKeeper分别来实现HA方案和保存集群的元数据。
在这里插入图片描述

集群搭建

  • rabbitmq安装两个实例,分别是1.104,1.105。分别需要先在两台机器节点上安装好rabbitmq。104节点已经安装好rabbitmq。105节点还没装。
scp /usr/local/rabbitmq/* 192.168.1.105:/usr/local/rabbitmq/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 初始化环境
hostnamectl set-hostname rabbit-node1
hostnamectl set-hostname rabbit-node2
vim /etc/hosts

在这里插入图片描述

在这里插入图片描述

  • 重启网络
systemctl restart network
  • 配置 Erlang Cookie
# 停止所有服务,构建Erlang的集群环境
systemctl stop rabbitmq-server
scp /var/lib/rabbitmq/.erlang.cookie rabbit-node2:/var/lib/rabbitmq/.erlang.cookie

在这里插入图片描述

  • 启动服务 在两台主机上均执行以下命令,启动 RabbitMQ 服务:
systemctl start rabbitmq-server

在这里插入图片描述
在这里插入图片描述
说明节点已经启动
在这里插入图片描述
开通 EPMD 端口
epmd进程使用的端口。用于RabbitMQ节点和CLI工具的端点发现服务。

systemctl start firewalld
firewall-cmd --zone=public --add-port=4369/tcp --permanent
firewall-cmd --zone=public --add-port=25672/tcp --permanent
systemctl restart firewalld.service

在这里插入图片描述

  • RabbitMQ 集群的搭建需要选择其中任意一个节点为基准,将其它节点逐步加入。这里我们以 rabbit-node1 为基准节点,将 rabbit-node2 加入集群。在 rabbit-node2 上执行以下命令:
# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入, 在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
# rabbit-node2加入node1, rabbit-node3加入node2
rabbitmqctl join_cluster rabbit@rabbit-node1
# 4.启动服务
rabbitmqctl start_app

在这里插入图片描述

  • 查看集群状态
rabbitmqctl cluster_status

在这里插入图片描述

  • UI 界面查看
    在这里插入图片描述
    在这里插入图片描述

HAProxy 环境搭建

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、 快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名 互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连 接数。

  • 在1.105节点上安装HAProxy
yum install haproxy

在这里插入图片描述
在这里插入图片描述

vim /etc/haproxy/haproxy.cfg
#全局配置
global
    # 日志输出配置、所有日志都记录在本机,通过 local0 进行输出
    log 127.0.0.1 local0 info
    # 最大连接数
    maxconn 4096
    # 改变当前的工作目录
    chroot /usr/local/haproxy-2.1.8
    # 以指定的 UID 运行 haproxy 进程
    uid 99
    # 以指定的 GID 运行 haproxy 进程
    gid 99
    # 以守护进行的方式运行
    daemon
    # 当前进程的 pid 文件存放位置
    pidfile /usr/local/haproxy-2.1.8/haproxy.pid

# 默认配置
defaults
    # 应用全局的日志配置
    log global
    # 使用4层代理模式,7层代理模式则为"http"
    mode tcp
    # 日志类别
    option tcplog
    # 不记录健康检查的日志信息
    option dontlognull
    # 3次失败则认为服务不可用
    retries 3
    # 每个进程可用的最大连接数
    maxconn 2000
    # 连接超时
    timeout connect 5s
    # 客户端超时
    timeout client 120s
    # 服务端超时
    timeout server 120s

# 绑定配置
listen rabbitmq_cluster
    bind :5671
    # 配置TCP模式
    mode tcp
    # 采用加权轮询的机制进行负载均衡
    balance roundrobin
    # RabbitMQ 集群节点配置
    server mq-node1  rabbit-node1:5672 check inter 5000 rise 2 fall 3 weight 1
    server mq-node2  rabbit-node1:5672 check inter 5000 rise 2 fall 3 weight 1

# 配置监控页面
listen monitor
    bind :8100
    mode http
    option httplog
    stats enable
    stats uri /stats
    stats refresh 5s

负载均衡的主要配置在 listen rabbitmq_cluster 下,这里指定负载均衡的方式为加权轮询,同时定义好健康检查机制:

server node1  rabbit-node1:5672 check inter 5000 rise 2 fall 3 weight 1

以上配置代表对地址为 rabbit-node1:5672 的 node1 节点每隔 5 秒进行一次健康检查,如果连续两次的检查结果都是正常,则认为该节点可用,此时可以将客户端的请求轮询到该节点上;如果连续 3 次的检查结果都不正常,则认为该节点不可用。weight 用于指定节点在轮询过程中的权重。

  • 启动服务
# 启动
haproxy -f /etc/haproxy/haproxy.cfg

# 查看运行
ps aux|grep haproxy

firewall-cmd --zone=public --add-port=8100/tcp --permanent
systemctl restart firewalld.service

http://192.168.1.105:8100/stats
在这里插入图片描述
所有节点都为绿色,代表节点健康。此时证明 HAProxy 搭建成功,并已经对 RabbitMQ 集群进行监控。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yemuxiaweiliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值