1.RabbitMQ高可用集群方案

(1)RabbitMQ搭建集群的作用提高可用性可靠性处理能力,确保系统提供高效的消息传递服务

(2)常见的集群方案

2.RabbitMQ高可用集群架构

在这里插入图片描述

两个 RabbitMQ 磁盘节点和一个 RabbitMQ内存节点组成一个内建集群,之所以要用两个磁盘节点是防止,唯一磁盘节点挂掉后,不能重建队列,交换机。用 HAProxy 作为 RabbitMQ 集群的负载均衡。为了防止 HAProxy 单点故障,用 Keepalived两个 HAProxy 节点做成一主一备。应用使用 VIP(虚拟IP) 访问 HAProxy 服务时,默认连接主机(Master)的 HAProxy,当主机(Master)上的 HAProxy 故障时,VIP 会漂移到备机(Backup)上,就会连接备机(Backup)上的 HAProxy 服务。

VRRP 协议
VRRP 协议虚拟路由冗余协议(Virtual Router Redundancy Protocol)。Keepalived 中提供的虚拟 IP 机制属于 VRRP,它是为了避免路由器出现单点故障的一种容错协议

3.RabbitMQ高可用集群搭建

(1)机器准备

IP地址 主机名 备注
192.168.140.101 mq01 磁盘节点 RabbitMQ
192.168.140.102 mq02 内存节点 keepalived+haproxy+RabbitMQ
192.168.140.103 mq03 内存节点 keepalived+haproxy+RabbitMQ

(2)三台机器docker部署RabbitMQ

参数说明

--hostname自定义Docker容器hostname
--privileged=true:使用该参数container内的root拥有真正的root权限,否则容器出现permission denied
-v宿主机容器路径映射
RABBITMQ_ERLANG_COOKIE:Erlang Cookie 值,同一个集群内该值必须相同,相当于不同节点之间通讯的密钥
--add-host修改容器内部hosts添加的集群服务器需要添加进来
--restart=unless-stopped docker 容器重启重启MQ
  • 节点一
docker run  -d --hostname rabbitmq1 --add-host=rabbitmq2:192.168.140.102 --add-host=rabbitmq3:192.168.140.103 --restart=unless-stopped --name rabbitmq1 --net host -p 15672:15672  -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbit_mq'  rabbitmq:management
  • 节点二
docker run  -d --hostname rabbitmq2 --add-host=rabbitmq1:192.168.140.101 --add-host=rabbitmq3:192.168.140.103 --restart=unless-stopped --name rabbitmq2 --net host -p 15672:15672  -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbit_mq'  rabbitmq:management
  • 节点三
docker run  -d --hostname rabbitmq3 --add-host=rabbitmq1:192.168.140.101 --add-host=rabbitmq2:192.168.140.102 --restart=unless-stopped --name rabbitmq3 --net host -p 15672:15672  -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbit_mq'  rabbitmq:management
docker exec -it rabbitmq1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
docker exec -it rabbitmq2 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app
exit
docker exec -it rabbitmq3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app
exit

在这里插入图片描述

rabbitmqctl cluster_status

在这里插入图片描述

(3)搭建镜像集群

配置步骤:rabbitmq管理页面 —> Admin —> Policies —> Add / update a policy

在这里插入图片描述

策略同步同一个VirtualHost中的交换器和队列数据

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

策略会同步同一个VirtualHost中的交换器和队列数据,在MQ节点一上创建队列,同步到各个节点。

在这里插入图片描述

集群重启顺序

4.Haproxy高可用集群搭建

(1)MQ集群的架构痛点

在这里插入图片描述

(2)创建配置文件

分别在102和103节点上创建目录/usr/local/haproxy

创建配置文件haproxy.cfg

#增加下面配置文件
global
  log 127.0.0.1 local0 info
  maxconn 10240
  daemon
  
defaults
  log global
  mode http
  timeout connect 3000 
  timeout client 3000
  timeout server 3000
  timeout check 2000

listen  admin_stats
    #haproxy监控界面访问的IP和端口    
    bind  0.0.0.0:8081
    mode        http
    stats uri   /stats
    stats realm     Global statistics
    #haproxy登陆帐户信息
    stats auth  admin:admin

listen rabbitmq_admin
    #rabbit的监控页面
    bind    0.0.0.0:8082
    server  rabbit_admin1 192.168.140.101:15672
    server  rabbit_admin2 192.168.140.102:15672
    server  rabbit_admin3 192.168.140.103:15672

listen haproxy
  #对外提供的端口,spring boot连接mq的端口
  bind 0.0.0.0:8091
  option tcplog
  mode tcp
  balance roundrobin
  server rabbitmq1 192.168.140.101:5672 check inter 5000 rise 2 fall 2
  server rabbitmq2 192.168.140.102:5672 check inter 5000 rise 2 fall 2
  server rabbitmq3 192.168.140.103:5672 check inter 5000 rise 2 fall 2

配置文件详解

全局配置部分global):
  - 设置日志输出目标本地地址 `127.0.0.1``local0` 日志设备,并设置日志级别`info`。
  - 设置最大连接数`10240`。
  - 启用后台运行模式。
默认配置部分defaults):
  - 设置日志输出全局设定的日志设备。
  - 指定工作模式为HTTP模式。
  - 设置连接超时时间`3000` 毫秒。
  - 设置客户端超时时间为 `3000` 毫秒。
  - 设置服务器超时时间为 `3000` 毫秒。
  - 设置健康检查超时时间为 `2000` 毫秒。
`admin_stats` 监听器:
  - 监听 `0.0.0.0:8081` 地址和端口。
  - 使用HTTP模式。
  - 设置监控统计信息路径`/stats`。
  - 设置统计信息页面显示称为 `Global statistics`。
  - 设置访问统计信息页面认证用户名密码`admin:xdclass.net168``rabbitmq_admin` 监听器:
  - 监听 `0.0.0.0:8082` 地址和端口。
  - 配置了三个RabbitMQ管理节点。
  - 每个节点的名称和地址:端口为 `rabbit_admin1 120.24.7.58:15672``rabbit_admin2 120.24.7.58:15673``rabbit_admin3 120.24.7.58:15674``haproxy` 监听器:
  - 监听 `0.0.0.0:5666` 地址和端口。
  - 启用TCP日志记录。
  - 使用TCP模式。
  - 使用轮询算法进行负载均衡。
  - 配置了三个RabbitMQ节点。
  - 每个节点的名称和地址:端口为 `rabbitmq1 120.24.7.58:5672``rabbitmq2 120.24.7.58:5673``rabbitmq3 120.24.7.58:5674`。
  - 设置了健康检查的参数:每5000毫秒检查一次,如果连续2次检查成功就认为节点上线,如果连续2次检查失败则认为节点宕机。

两台机器分别启动haproxy

docker run -d -i --name haproxy-rabbitmq -p 8081:8081 -p 8091:8091 -p 8082:8082 -v /usr/local/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --privileged=true -u root  haproxy:latest 

访问路径

  • Haproxy: http://192.168.140.103:8081/stats,http://192.168.140.102:8081/stats
  • RabbitMQ管控台:http://192.168.140.102:8082,http://192.168.140.103:8082

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

在这里插入图片描述

5.Keepalived高可用集群搭建

(1)102和103节点分别下载Keepalived

#yum安装
yum -y install keepalived

(2)编辑配置文件

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL # 设置lvs的id,在一个网络应该唯一
   enable_script_security #允许执行外部脚本
}
#配置vrrp_script,主要用于健康检查及检查失败执行动作
vrrp_script chk_real_server {
    weight -5
    fall 3
    rise 2
    user root
}
vrrp_instance VI_1 {
		#配置节点是master还是backup,102配置MASTER,103配置BACKUP
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #配置虚拟IP
    virtual_ipaddress {
        192.168.140.100
    }
}
virtual_server 192.168.140.100 8082 {
    # 设置健康检查时间,单位是秒
    delay_loop 6
    # 设置负载调度算法为rr
    lb_algo rr
    # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    lb_kind NAT
    # 会话保持时间
    persistence_timeout 50
   #指定转发协议类型(TCP、UDP)
    protocol TCP
    # 指定real server1的IP地址
    real_server 192.168.140.102 8082 {
        weight 1
    }
    real_server 192.168.140.103 8082 {
        weight 1
    }
}

(3)启动keepalived访问MQ集群

systemctl start keepalived.service

在这里插入图片描述

Ok发现已经成功的通过keepalived访问mq节点。

我们把102主节点的keepalived停掉时,虚拟IP会漂移到103的节点上。

在这里插入图片描述

OK,至此RabbitMQ高可用集群就已经搭建完成了。

记得给博主三连哦!!!
在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_47533244/article/details/134770767

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_37248.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注