RabbitMQ基于Nginx的集群搭建

RabbitMQ 集群搭建

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

基本搭建

准备:

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

IP地址如下

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

开始

修改主机名称

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

直接进入到hostname中进行修改

vim /etc/hostname

修改完成即可

修改host

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

修改host
vim /etc/hosts

如图:

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

启动RabbitMQ服务,以及Erlang虚拟机

三台服务器上都执行

rabbitmq-server -detached
其他节点执行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@father--node
rabbitmqctl start_app

查看集群状态

rabbitmqctl cluster_status

如下:

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;
		}
	}

监听了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

发现正常执行。


版权声明:本文为m0_53341445原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。