前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >消息队列的使用 RabbitMQ (二): Windows 环境下集群的实现与优化

消息队列的使用 RabbitMQ (二): Windows 环境下集群的实现与优化

作者头像
用户2434869
发布2019-02-25 11:12:48
1.6K0
发布2019-02-25 11:12:48
举报
文章被收录于专栏:yl 成长笔记

一、RabbitMQ 集群的基本概念

一个 RabbitMQ 中间件(broker) 由一个或多个 erlang 节点组成,节点之间共享 用户名、虚拟目录、队列消息、运行参数 等, 这个 节点的集合被称为集群。

举例说明, A、B、C 三个节点同在一个集群中, 发布端向 A 节点发送消息, 消费者可在 B 或 C 接收到消息。消息被消费后被删除。这是最基础的集群模式,不涉及到消息的镜像(high availabilit)。

不足之处就是当接收消息的节点挂掉后, 其他节点无法取到该节点中未被消费的消息。若做消息持久化, 则在重新启动该节点后,未消费信息可被获取。 若未做消息持久化,则消息丢失。

二、集群的配置

1、配置 host

假设现有 A、B 两台机器,其配置如下

A

IP: 178.101.200.160   

节点名: rabbit-A

B

IP:178.101.200.161

节点名: rabbit-B

上面所说的节点名,可在 rabbitmq mangement 界面中查看,也可以在命令行中查看。 

进入RabbitMQ Management 管理界面,右下角 rabbit@3vjap-ysd-0 中的 3vjap-ysd-0 即为当前节点名。

下面开始配置 hosts:

在 A、B 的 hosts 文件中,绑定 IP 与 节点名, 如下:

178.101.20.160    rabbit-A

178.101.20.161    rabbit-B

2、配置环境变量文件 rabbitmq-env.conf

环境变量文件,定义了 rabbitmq 的日志文件、数据存储位置。

在目录 C:\Users\Administrator\AppData\Roaming\RabbitMQ 下创建  rabbitmq-env.conf 文件。

A 中 rabbitmq-env.conf 文件内容如下:

NODENAME=rabbit@rabbit-A

NODE_IP_ADDRESS=178.101.20.160 

NODE_PORT=5672

RABBITMQ_MNESIA_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\db

RABBITMQ_LOG_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\log

B 中 rabbitmq-env.conf 文件内容如下: 

NODENAME=rabbit@rabbit-B

NODE_IP_ADDRESS=178.101.20.161

NODE_PORT=5672

RABBITMQ_MNESIA_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\db

RABBITMQ_LOG_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\log

3、统一 .erlang.cookie  文件

erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie文件。只有这个文件一致的节点,才能加入到集群中。

该文件一般存放在两个地方:

%WINDIR% (c:\Windows\.erlang.cookie)   此处在我的电脑上是: C:\Windows\System32\config\systemprofile\.erlang.cookie

%HOMEDRIVE%%HOMEPATH% (C:\Users\%USERNAME%\.erlang.cookie )

将所有位置的 cookie 文件都替换为机器 A 下的 cookie 文件(注意,此处说的是所有位置,两台机器有四个 cookie 文件,这个四个位置的 cookie 文件都必须相同)。

4、命令行中添加节点

在机器 A 中 :

1)、以管理员身份开启 cmd

2)、进入工具目录  cd  c:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.6\sbin  

3)、重置 RabbitMQ 

代码语言:javascript
复制
rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl start_app

在机器 B 中:

1)、以管理员身份开启 cmd

2)、进入工具目录  

代码语言:javascript
复制
cd  c:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.6\sbin  

3)、添加 A 节点

代码语言:javascript
复制
rabbitmqctl stop_app
rabbitmqctl reset 
rabbtimqctl join_cluster rabbit@rabbit-A
rabbitmqctl start_app

注意,此处在机器 A 中添加 B 节点与 B 中添加 A 节点是同一个效果。

这样就完成了集群的配置,现在可以在RabbitMQ Management 看到了。

下面是配置了三个节点之后的集群图:

 相关的两个命令:

查看集群状态 : rabbitmqctl cluster_status

删除添加到集群中的队列:rabbitmqctl forget_cluster_node rabbit@rabbit-A

三、集群状态下发布消息优化

1、可用 DNS 负载均衡功能。申请一个域名,对应机器 A、B 的 IP 地址, 每次发布消息,可利用 dns 解析的特性自动实现负载均衡。

2、easynetq 随机选择域名

代码语言:javascript
复制
var bus = RabbitHutch.CreateBus("host=myfirsthost,mysecondhost", x => x.Register<IClusterHostSelectionStrategy<ConnectionFactoryInfo>, RandomClusterHostSelectionStrategy<ConnectionFactoryInfo>>()); 

四、消息镜像(高可用性)

     未完待续。

参考: 

http://www.rabbitmq.com/clustering.html

https://blog.csdn.net/u010029983/article/details/45337365

https://www.cnblogs.com/hegx/p/6097147.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档