• RabbitMQ基于Nginx的集群搭建


    RabbitMQ 集群搭建

    为了防止RabbitMQ忽然挂掉,通常考虑使用集群的方式进行搭建,保证这个服务一直运行。

    基本搭建

    准备:

    准备了3台虚拟机,进行模仿一个集群

    IP地址如下

    主机IP主机名称
    192.168.18.129father-node
    192.168.18.130node-1
    192.168.18.131node-2

    开始

    修改主机名
    查看主机名称
    hostname
    
    • 1
    修改主机名称

    直接进入到hostname中进行修改

    vim /etc/hostname
    
    • 1

    修改完成即可

    修改host

    需要将以上几台主机的ip核主机名称放进到host中,使其能够相互识别

    修改host
    vim /etc/hosts
    
    • 1

    如图:

    image-20220917215858888

    注意修改hosts需要在这所有主级中进行修改,不能只修改一个=

    确保各个节点使用的cookie是同一个值

    在father-node 上执行远程命令

    scp /var/lib/rabbitmq/.erlang.cookie root@node1:/var/lib/rabbitmq/.erlang.cookie
    scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
    
    • 1
    • 2
    启动RabbitMQ服务,以及Erlang虚拟机

    三台服务器上都执行

    rabbitmq-server -detached
    
    • 1
    其他节点执行:
    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@father--node
    rabbitmqctl start_app
    
    • 1
    • 2
    • 3
    查看集群状态
    rabbitmqctl cluster_status
    
    • 1

    如下:

    image-20220917224034508

    由此可以看到我们的三个节点都已经启动了

    我们访问主节点的管理界面:

    image-20220918082308203

    可以看到三个队列的全部状态

    高可用配置
    基本

    ​ 一般情况我们直接访问一个节点,但是这个节点忽然挂掉怎么办?你说咱们有集群但是集群无法解决你这个节点挂掉无法访问这个问题,只能解决数据保存问题。如果真的挂掉了,那么你的IDEA一直报错,他会告诉你你的Rabbit MQ链接不上。这时候我们就需要高可用

    我们使用的主要还是Nginx,Nginx本身就支持高可用或者说双机热备,我们只需要对其进行一个监听即可

    需要模块:–with-stream,该模块是内置的,只需要开启即可。具体往下看。

    开启后我们需要重新配置

    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
       upstream rabbitmq_web{
        server 192.168.18.130:15672 fail_timeout=10s weight=5;
        server 192.168.18.129:15672 fail_timeout=10s weight=4;
        server 192.168.18.131:15672 fail_timeout=10s weight=3;
    
       }
       upstream rabbitmq_56{
         server 192.168.18.130:5672 fail_timeout=10s weight=5;
         server 192.168.18.131:5672 fail_timeout=10s weight=4;
         server 192.168.18.129:5672 fail_timeout=10s weight=3;
       }
        server {
            listen       13456;
            server_name  localhost;
            location / {
                proxy_pass http://rabbitmq_web;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    	
    }
    	stream{
    		upstream rabbitTcp{
    			server 192.168.18.130:5672;
    			server 192.168.18.131:5672;
    			server 192.168.18.129:5672;
    		}
    		server{
    			listen 3456;
    			proxy_pass rabbitTcp;
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    监听了3456和13456端口,均使用了upsteam方法内部是根据权重进行划分。

    ​ upsteam实现了代理多个IP,其存在很多方法,我们采用的是权重方法,weight 表示权重,权重越大那么任用他的可能性就越大。主要是模拟一个服务器性能存在差异。

    小问题:

    监听的时候不要直接监听5672、15672,否则会造成端口冲突😂

    在Java代码进行编译时也是直接使用3456而不是5672

    image-20220918084450077

    启动:

    RabbitMQ启动

    模拟宕机

    这边我们直接暴力解决,通过停止服务直接把主节点给挂了,模拟一个宕机行为

    在主节点机器中输入service rabbitmq-server.service stop

    输入之后查看状态:

    image-20220918085028979

    可见已经挂掉了,直接访问地址130的地址发现可以进入同时可以看到各个主机的状态:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2fnaywEb-1663465306538)(C:/Users/19865/AppData/Roaming/Typora/typora-user-images/image-20220918085051179.png)]

    我们Java配置文件不进行改变,重新启动后发现可以正常启动可以直接发送消息

    image-20220918085614131

    发现正常执行。

  • 相关阅读:
    【MFC】第一个窗口程序(2)
    DI依赖注入-P8,P9,P10,P11
    【JavaScript】JQuery基础使用
    0.Flask入门
    30K Star,最全面的PDF处理开源项目,你也可以拥有一个本地的PDF处理大全
    认识ProtoBuf
    带权并查集(poj-1182 食物链)
    山东碱地3000亩水稻 国稻种芯·中国水稻节:德州大河粮仓
    Google Earth Engine(GEE)——Kmeans聚类快速进行土地分类(双for循环快速调参)
    Java面试八股文 2021年最新Java面试题及答案汇总
  • 原文地址:https://blog.csdn.net/m0_53341445/article/details/126914039