RabbitMQ实战-集群与负载的搭建(三)

RabbitMQ实战-集群与负载的搭建(三)

  • 1. 概要
  • 2.配置虚拟机
  • 3.搭建集群
    • 3.1同步erlang.cookie
    • 3.2 加入集群
  • 4.搭建负载

1. 概要

在实际生产中,单一的服务提供者是不够强壮和稳定的,今天我们就通过实例来完成RabbitMQ集群与负载的搭建。

2.配置虚拟机

准备3台机器或者虚拟机,一台作为Nginx服务器,剩余两台机器我们搭建RabbitMQ 集群。
三台机器:
服务器名称 |IP地址
Nginx 192.168.153.131
RMQ-1 192.168.153.134
RMQ-2 192.168.153.132
以上操作 都是在 【192.168.153.134】和【192.168.153.132】两台机器上完成的,请注意。

  • 修改hostname
    vim /etc/hostname 服务器名称为 RMQ-1 RMQ-2
    RabbitMQ实战-集群与负载的搭建(三)_第1张图片
  • 修改hosts文件
    vim /etc/hosts
    192.168.153.134 RMQ-1
    192.168.153.132 RMQ-2
    RabbitMQ实战-集群与负载的搭建(三)_第2张图片
  • 开发端口
    开放 4369、5672、15672、25672四个端口。
    4369:提供erlang的发现端口
    25672:提供erlang的底层通讯端口
    5672:提供应用连接的开放端口
    15672:提供可视化服务的开放端口
    可以执行命令 也可以到可视化界面进行编辑
    开放端口的命令如下:
    #放开4369端口
    firewall-cmd --zone=public --add-port=4369/tcp --permanent
    #放开5672端口
    firewall-cmd --zone=public --add-port=5672/tcp --permanent
    #放开15672端口
    firewall-cmd --zone=public --add-port=15672/tcp --permanent
    #放开25672端口
    firewall-cmd --zone=public --add-port=25672/tcp --permanent
    #刷新防火墙服务
    firewall-cmd --reload
  • 安装RabbitMQ
    安装过程请参考 《RabbitMQ实战-浅议与安装(一)》,再次就不做赘述了。
  • 重启服务器
    以上操作,两台服务器操作的内容都是相同的,操作无误后,将两台机器都进行重启。

3.搭建集群

3.1同步erlang.cookie

.erlang.cookie是erlang分布式系统的token文件,集群内服务器只有持有相同的token才能进行通信。
执行命令 find / -name *.cookie 检索
RabbitMQ实战-集群与负载的搭建(三)_第3张图片
打开/var/lib/rabbitmq/.erlang.cookie 我们可以得到token的值
RabbitMQ实战-集群与负载的搭建(三)_第4张图片
RabbitMQ实战-集群与负载的搭建(三)_第5张图片
为了保证其他服务器内容一致 我们通过命令讲此文件拷贝到其他机器中
(1)scp /var/lib/rabbitmq/.erlang.cookie 192.168.153.132:/var/lib/rabbitmq/
(2)提示是否操作 输入 yes
(3)输入192.168.153.132 root的密码
(4)完成 copy
RabbitMQ实战-集群与负载的搭建(三)_第6张图片
(5)两台机器分别执行命令 chmod 400 /var/lib/rabbitmq/.erlang.cookie 对文件进行授权
RabbitMQ实战-集群与负载的搭建(三)_第7张图片
(6)重启这两台服务器。

3.2 加入集群

我们要把RMQ-2加入到RMQ-1的集群中,所以我们先要找到RMQ-1的集群名称 如图 集群名称为 rabbit@RMQ-1
RabbitMQ实战-集群与负载的搭建(三)_第8张图片
之后的操作 我们在RMQ-2上进行操作。
#停止RMQ-2的rabbitMQ应用
rabbitmqctl stop_app
#加入集群
rabbitmqctl join_cluster rabbit@RMQ-1
#启动服务
rabbitmqctl start_app
RabbitMQ实战-集群与负载的搭建(三)_第9张图片
验证一下我们集群是否搭建成功,打开这两台机器的任何一台机器,在浏览器输入http://localhost:15672,会发现节点部分可以看到已经变为两个节点,证明集群搭建成功。
RabbitMQ实战-集群与负载的搭建(三)_第10张图片

4.搭建负载

通过以上的操作,我们已经具备了一个集群,这两台机器上的RabbitMQ是实时同步的,一台机器接收到消息,另外一台机器也可同时接到消息。那么如果应用只对一台机器的RabbitMQ进行消息交互,那另外一台机器势必就会产生空闲;同理,如果这台机器上的RabbitMQ崩溃,那应用就无法访问另外一台机器的RabbitMQ,造成项目服务中断。那我们应该如何解决这个问题呢?接下来我们就通过使用Nginx代理服务来进行RabbitMQ负载搭建。
网络上有很多类似的教程,是通过HAProxy来做负载均衡器的,今天我们讲一下如何通过Nginx来搭建RabbitMQ的负载均衡。RabbitMQ的负载是TCP/IP模式的,所以选择Nginx需要注意其版本,Nginx是在1.9这个版本开始支持TCP/IP的相应转发的。
Nginx的安装步骤请见 《安装Tengine-优化版的nginx》.

  • 创建RabbitMQ用户
    这里需要大家注意的是,RabbitMQ的原始用户是guest,这个用户只允许本机访问,所以我们需要给他新增一个用户,保证能够有外网访问的权限。如图,我们创建一个用户 fygs 密码 123456,我们以后就通过这个用户进行外网的访问。

RabbitMQ实战-集群与负载的搭建(三)_第11张图片

  • 开放端口
    我们需要在nginx服务器开放一个端口,我们这里为了方便记忆,端口定义为5672。
    #开放端口
    firewall-cmd --zone=public --add-port=5672/tcp --permanent
    #刷新防火墙服务
    firewall-cmd --reload
  • 修改nginx配置文件
    我们修改nginx服务器上nginx的配置文件【nginx.conf】。
    RabbitMQ实战-集群与负载的搭建(三)_第12张图片
    #配置文件增加如下内容

server {

    listen       5672;			#=====================》监听5672端口
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    default_type  application/octet-stream;
	# default_type 'text/html';
	charset utf-8;     
	location /{
		root   /root; 
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        client_max_body_size 30m;    #允许客户端请求的最大单文件字节数
        proxy_connect_timeout 60s;
        proxy_read_timeout 5400s;
        proxy_send_timeout 5400s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://server-5672;			#=====================》配置的节点
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }       
}
#=====================》配置节点
upstream  server-5672  {    			
	#RMQ-1
	server  192.168.153.134:5672  max_fails=1 fail_timeout=20s;		
	#RMQ-2
	server  192.168.153.132:5672  max_fails=1 fail_timeout=20s;
}

执行命令 ./nginx -s reload 使配置文件生效。
通过对nginx配置文件的修改,我们加入了对端口5672的监听,当监听到对5672端口访问的时候,向RMQ-1和RMQ-2进行分发,实现负载均衡,应用只需要访问nginx服务器的【IP:5672】 就可以进行负载的访问。
以上就是我们本次RabbitMQ实战系列的全部内容,后续应该会增加一些实用的小技巧,有机会再增加进来,希望这份笔记对你们能有所帮助,祝大家学习愉快。

你可能感兴趣的:(RabbitMQ,RabbitMQ,集群,负载)