我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想高端大气上档次,一定需要拿出高可用的东西出来,这不本篇就跟大家说一下cluster的概念,rabbitmq是erlang写的一个成品,所以知道如何构建erlang的node集群就ok了,他需要一个统一的cookie机制。。。本篇的测试环境如下:

  • centos1:192.168.23.147

  • centos2:192.168.23.145

截图如下:

一:cookie机制

刚才也说了,要想实现cluster集群,必须保证各台机器上的cookie文件内容一致,那问题来了。。。cookie在哪呢?从rabbitmq的官网上可以找到这么一句话,如下图:

ok,官网说的非常清楚了,那接下来我们看一下$HOME变量指向的是哪里。。。


[root@rabbitmq1 Desktop]# echo $HOME
/root

那接下来我就去看看(centos1 .147)这台的 /root 文件下可否能够找到,如下图:

????????了吧,嘿嘿,现在我们要做的事情,就是把Centos2的cookie文件内容替换成Centos1的cookie内容。

二:使用host映射erlang节点

现在cookie值是一样的了,然后需要在 /etc/hosts 中追加一下host影射,方便erlang节点之间相互发现,接下来就是在2台centos上追加同样的host地址:

三:rabbitmqctl cluster命令

好了,准备工作我们都做好了,大家可以重启一下机器,开启我们的rabbitmq,这时候会有惊喜发现的。。。

由原来的localhost改成现在的rabbitmq2了,看到了吧~~~ 接下来大家可以把两台rabbitmq开启了。

1. 在centos1上使用rabbitmqctl cluster_status看看集群现在的状况


[root@rabbitmq1 Desktop]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1]}]},{running_nodes,[rabbit@rabbitmq1]},{cluster_name,<<"rabbit@rabbitmq1">>},{partitions,[]},{alarms,[{rabbit@rabbitmq1,[]}]}]
[root@rabbitmq1 Desktop]# 

可以看到,当前的 running-nodes 中只有一台,刚好就是本机的 erlang 节点本身,接下来我们看一下是否能够连接到rabbit@rabbitmq2上去。。。

2. join_cluster命令

这个命令之前,需要将本机的rabbitmq关闭,然后进行join操作,从下图中可以看到,我们已经连接到了centos2上的rabbitmq了。。。


[root@rabbitmq1 Desktop]# rabbitmqctl stop_app
Stopping node rabbit@rabbitmq1 ...
[root@rabbitmq1 Desktop]#  rabbitmqctl join_cluster rabbit@rabbitmq2
Clustering node rabbit@rabbitmq1 with rabbit@rabbitmq2 ...
[root@rabbitmq1 Desktop]# rabbitmqctl start_app
Starting node rabbit@rabbitmq1 ...
[root@rabbitmq1 Desktop]# 

3. 使用webui看一下最后的效果

看到没有,现在我们的rabbitmq集群已经搭建成功了,如果你有更多的机器,都可以使用这个join命令加入吧,很简单吧~~~

四:mirror queue

从名字上可以看出,就是镜像队列的意思,也就是说queue能在我们多台机器中同步,设置的方式也能简单,只需要在webui的policy上面设置即可。。。

这段设置表示当前如果是mytest开头的队列都是“镜像队列”,当然也可以用代码来实现,并且实现自动同步的功能,如下:


rabbitmqctl set_policy ha-all "^mytest" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

五:使用C#驱动连接

再好的cluster最后都需要用sdk连接,这样才能真正的落地,我选择的sdk是官方的,大家可以在nuget上面下载一下:

接下来我需要演示向 queue=mytest1队列中推送数据,亮点在于我在CreateConnection方法中塞入了多个ip地址。。。如下代码:


class Program{static void Main(string[] args){ConnectionFactory factory = new ConnectionFactory(){UserName = "datamip",Password = "datamip",AutomaticRecoveryEnabled = true,TopologyRecoveryEnabled = true};//第一步:创建connectionvar connection = factory.CreateConnection(new string[2] { "192.168.23.147", "192.168.23.145" });//第二步:创建一个channelvar channel = connection.CreateModel();var result = channel.QueueDeclare("mytest1", true, false, false, null);for (int i = 0; i < int.MaxValue; i++){channel.BasicPublish(string.Empty, "mytest1", null, new byte[10]);Console.WriteLine("{0} 推送成功", i);Thread.Sleep(1000);}Console.Read();}}

最后我们看一下webui,可以清清楚楚的看到消息已经进入了rabbitmq集群啦。。。

好了,本篇就说这么多了,希望对您有帮助~~~

使用 C# sdk 连接 高可用的 rabbitmq 镜像集群相关推荐

  1. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  2. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成高性能高可用组件 Keepalived_03

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  3. 从零开始构建一个高可靠的RabbitMQ镜像集群

    从零开始构建一个高可靠的RabbitMQ镜像集群 1.集群环境节点规划如表所示: 1 集群构建 1.停止MQ服务,首先停止3个节点的服务的命令如下: service rabbitmq-server s ...

  4. RabbitMQ 镜像集群队列_集群高可用篇_03

    文章目录 一.普通集群搭建 1. 停止 全部 MQ服务节点 2. 文件(.erlang.cookie)同步 3. 组成集群操作 3. slave 加入集群操作 4. 查看集群状态 5. 访问管控台界面 ...

  5. 深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

    摘要:作为noSql中的kv数据库的王者,redis以其高性能,低时延,丰富的数据结构备受开发者青睐,但是由于redis在水平伸缩性上受限,如何做到能够水平扩容,同时对业务无侵入性是很多使用redis ...

  6. 高可用的Redis主从复制集群,从理论到实践

    作者:Sicimike blog.csdn.net/Baisitao_/article/details/105545410 前言 我们都知道,服务如果只部署一个节点,很容易出现单点故障,从而导致服务不 ...

  7. 云服务器搭建高可用keepalived+nginx+emqx集群

    云服务器搭建高可用keepalived+nginx+emqx集群 一.高可用emqx集群搭建 1 单机搭建emqx 2 配置认证和鉴权插件 3 搭建emqx集群 二.nginx搭建负载均衡 1 ngi ...

  8. 【Redis】高可用架构之Cluster集群和分⽚

    高可用架构之Cluster集群和分⽚ 1. 前言 2. Cluster 模式介绍 2.1 什么是Cluster模式? 2.2 为什么需要Cluster模式? 2.2.1 垂直拓展(scale up)和 ...

  9. Linux 高可用(HA)集群之Pacemaker详解

    大纲 说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacem ...

最新文章

  1. TreeMap源码分析
  2. Redis 的性能幻想与残酷现实(转)
  3. css选择器(css Selectors)的语法分析
  4. JZOJ__Day 10:【普及模拟】【USACO】iCow播放器
  5. java eleven进度条
  6. Hamcrest总结--思维导图
  7. 上大计算机专业在哪校区,好消息!成都理工大学在川扩招751人,宜宾校区新增计算机443人...
  8. 单片机实验计数显示器C语言代码,单片机实验1-计数显示器.doc
  9. [ 2204听力 ] 一
  10. 各大搜索引擎蜘蛛名称
  11. 系统校验矩阵怎么求_软考高级架构师:计算机系统基础知识
  12. 如何改变图片的大小kb
  13. solidity 中的时间_Solidity快速了解
  14. 关于WINFORM中输入法的设置 [转]
  15. Java 获取 CPU 占用率
  16. 观腾讯的校友网有感!
  17. 阿里为什么要组建C2M事业部?强化对货的控制!
  18. Cisco路由器的配置及应用
  19. openlayers 百度地图_近期内推职位集锦:知乎+车好多+三星+数码视讯+百度
  20. 港湾网络要是真的消失 是中国通信业的悲哀

热门文章

  1. [ActionScript 3.0] 安全沙箱的类型sandboxType,判断当前程序是AIR还是web程序
  2. SqlServer和MySQL中存储过程out返回值处理C#代码
  3. 原创:PHP内核研究:HASH表和变量
  4. word中图片超出页边距_如何在Word中更改页边距
  5. [译] 机器学习可以建模简单的数学函数吗?
  6. 16-djongo中间件学习
  7. java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR起因及解决办法
  8. Nodejs前端服务器压缩图片
  9. 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)
  10. CSS2-3常见的demo列子总结