RabbitMQ学习之集群部署
我们先搭建一个普通集群模式,在这个模式基础上再配置镜像模式实现高可用,Rabbit集群前增加一个反向代理,生产者、消费者通过反向代理访问RabbitMQ集群。
架构图如下:
设计架构可以如下:在一个集群里,有4台机器,其中1台使用磁盘模式,另2台使用内存模式。2台内存模式的节点,无疑速度更快,因此客户端(consumer、producer)
连接访问它们。而磁盘模式的节点,由于磁盘IO相对较慢,因此仅作数据备份使用,另外一台作为反向代理。
一、4台机器如下(通过/etc/sysconfig/network修改主机名):
192.168.36.217 M-zhutianwei-A (Rabbit)
192.168.36.102 M-zhutianwei-C (Rabbit)
192.168.36.136 S-zhutianwei-B (Rabbit)
192.168.36.127 zhutianwei (负载均衡)
将上面的Rabbit主机解析都加入到每个Rabbit主机的/etc/hosts中
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 192.168.36.217 M-zhutianwei-A
- 192.168.36.102 M-zhutianwei-C
- 192.168.36.136 S-zhutianwei-B
二、在rabbit机器上部署RabbitMq,并可以正常启动,参考:http://blog.csdn.net/zhu_tianwei/article/details/40832185
三、设置每个节点Cookie
关闭所有rabbit服务,将M-zhutianwei-A 节点的/root/.erlang.cookie内容复制到其他两台机器。
#chmod 777 /root/.erlang.cookie
复制内容
#chmod 400 /root/.erlang.cookie
保持文件权限一致。
四、使用detached参数独立运行启动服务
nohup /usr/local/rabbitmq/sbin/rabbitmq-server –detached &
查看节点下的集群:/usr/local/rabbitmq/sbin/rabbitmqctl cluster_status
Cluster status of node 'rabbit@m-zhutianwei-a' ...
[{nodes,[{disc,['rabbit@m-zhutianwei-a']}]},
{running_nodes,['rabbit@m-zhutianwei-a']},
{cluster_name,<<"rabbit@M-zhutianwei-A">>},
{partitions,[]}]
五、将M-zhutianwei-C、S-zhutianwei-B作为内存节点与M-zhutianwei-A连接起来,执行如下命令:
/usr/local/rabbitmq/sbin/rabbitmqctl stop_app
/usr/local/rabbitmq/sbin/rabbitmqctl join_cluster --ram rabbit@m-zhutianwei-a
/usr/local/rabbitmq/sbin/rabbitmqctl start_app
上述命令先停掉rabbitmq应用,然后调用cluster命令,将M-zhutianwei-C或S-zhutianwei-B连接到,使两者成为一个集群,最后重启rabbitmq应用。在这个cluster命令下,M-zhutianwei-C、S-zhutianwei-B是内存节点,M-zhutianwei-A是磁盘节点(RabbitMQ启动后,默认是磁盘节点)。
如果要使M-zhutianwei-C或S-zhutianwei-B在集群里也是磁盘节点,join_cluster 命令去掉--ram参数即可
#/usr/local/rabbitmq/sbin/rabbitmqctl join_cluster rabbit@queue
只要在节点列表里包含了自己,它就成为一个磁盘节点。在RabbitMQ集群里,必须至少有一个磁盘节点存在。
六、运行cluster_status命令查看集群状态
/usr/local/rabbitmq/sbin/rabbitmqctl cluster_status
- Cluster status of node 'rabbit@s-zhutianwei-b' ...
- [{nodes,[{disc,['rabbit@m-zhutianwei-a']},
- {ram,['rabbit@s-zhutianwei-b','rabbit@m-zhutianwei-c']}]},
- {running_nodes,['rabbit@m-zhutianwei-c','rabbit@m-zhutianwei-a',
- 'rabbit@s-zhutianwei-b']},
- {cluster_name,<<"rabbit@M-zhutianwei-A">>},
- {partitions,[]}]
七、往任意一台集群节点里写入消息队列,会复制到另一个节点上,我们看到两个节点的消息队列数一致。
Listing queues ...
helloword 1
这样RabbitMQ集群就正常工作了。这种模式更适合非持久化队列,只有该队列是非持久的,客户端才能重新连接到集群里的其他节点,并重新创建队列。假如该队列是持久化的,那么唯一办法是将故障节点恢复起来。
上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。下一节我们看看如何镜像模式来解决复制的问题,从而提高可用性 。
RabbitMQ学习之集群部署的更多相关文章
- (转)RabbitMQ学习之集群部署
http://blog.csdn.net/zhu_tianwei/article/details/40931971 我们先搭建一个普通集群模式,在这个模式基础上再配置镜像模式实现高可用,Rabbit集 ...
- Docker学习-Kubernetes - 集群部署
Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...
- RabbitMQ (简单集群部署操作)
RabbitMQ 集群部署 前期准备 第一步:三台linux系统(centos7.3) 主机名(hostname) 网卡ip node1 192.168.137.138 node2 192.168.1 ...
- RabbitMQ安装以及集群部署
本次记录安装RabbitMQ的过程,只针对MAC下单机版安装.单机集群安装方法以及配置haproxy负载均衡. RabbitMQ单机版本安装 RabbitMQ单机集群安装方法(适合开发练习) Rabb ...
- docker下rabbitMQ高可用集群部署
第一步:docker 安装: mac 下安装命令: brew cask install docker 安装完之后查看版本 docker --version 第二步:开始集群搭建: 采用bijukunj ...
- RabbitMQ学习之集群镜像模式配置
1.增加负载均衡器 关于负载均衡器,商业的比如F5的BIG-IP,Radware的AppDirector,是硬件架构的产品,可以实现很高的处理能力.但这些产品昂贵的价格会让人止步,所以我们还有软件负载 ...
- RabbitMQ学习之集群模式
由于RabbitMQ是用erlang开发的,RabbitMQ完全依赖Erlang的Cluster,因为erlang天生就是一门分布式语言,集群非常方便,但其本身并不支持负载均衡.Erlang的集群中各 ...
- 大数据学习——Kafka集群部署
1下载安装包 2解压安装包 -0.9.0.1.tgz -0.9.0.1 kafka 3修改配置文件 cp server.properties server.properties.bak # Lice ...
- RabbitMQ(6) 集群部署
单节点部署 rabbitmq单节点部署比较简单,可以使用apt-get等工具快速安装部署. wget -O- https://www.rabbitmq.com/rabbitmq-release-sig ...
随机推荐
- 一键删除.svn文件bat脚本
用过SVN或CVS版本控制工具的朋友,在享受着它们给我们带来的方便的同时,也许也在为这么一件事情苦恼: 如果某个目录在SVN或CVS版本控制工具的控制之下时.该目录下以及该子孙目录下都会有一个.svn ...
- MIS系统开发利器,实施、维护人员自定义报表的福音,AgileEAS.NET SOA平台动态报表指南
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- module_init的加载和释放
转自:http://blog.csdn.net/dysh1985/article/details/7597105 像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件, ...
- PDA移动POS终端系统,实现专柜或店铺的收货、零售、盘点通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理
利用PDA移动终端,实现专柜或店铺的收货.零售.盘点等一体化操作,通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理. · PDA订货会应用解决方案利用PDA或电脑系统,在订货会现场直接 ...
- spring异常-aoperror at :0 formal unbound in pointcut
八月 17, 2016 10:15:21 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRe ...
- 将一个Asp.Net网站改为MVC
背景: 网站已经开发的一部分 主要是Web服务和API 现在要做一些给人看的页面 转载请注明出处 http://www.cnblogs.com/zaiyuzhong/p/add-mvc-in-w ...
- NOI 题库 6266
6266 取石子游戏 描述 有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍.最后谁能够把一堆石子取空谁就算赢. 比如初始的时候两堆石 ...
- Masonry小结
一,容易混淆的问题 1.make.left.equal(xxx)的参数若为某个控件,则默认为以该控件的 left 为基准对照. //these two constraints are exactly ...
- View基础知识
一.View基础知识 View 是Android中所有控件的基类,是一种界面层的控件的一种抽象,代表了一个控件 1.View的位置参数 View的四个属性:top(左上角纵坐标) left(左 ...
- Android 上传图片并添加参数 PHP接收
php端接收代码: public function get_file(){ $local_path = "./Public/daixu_picture/figure/";//服务器 ...