设为首页 收藏本站
查看: 1293|回复: 0

[经验分享] Centos7 RabbitMQ消息队列集群

[复制链接]

尚未签到

发表于 2019-2-15 13:55:18 | 显示全部楼层 |阅读模式
  一、简介
         MQ(Message Queue,消息队列)是一款消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。
  1、集群原理
         rabbitmq 是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitmq分布式集群时要先安装erlang,并把其中一个服务的cookie复制到另外的节点。
         rabbitmq集群中,各个rabbitmq为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为磁盘节点,为了防止机器重启后的消息消失;
         RabbitMQ的Cluster集群模式一般分为两种, 普通模式和镜像模式 。消息队列通过rabbitmq HA镜像队列进行消息队列实体复制。
         普通模式下, 以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。
         镜像模式下, 将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
  2、系统架构

  概念说明:
  Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输
  Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
  Queue:消息的载体,每个消息都会被投到一个或多个队列
  Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
  Routing Key:路由关键字,exchange根据这个关键字进行消息投递
  vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离
  Producer:消息生产者,就是投递消息的程序
  Consumer:消息消费者,就是接受消息的程序
  Channel:消息通道,在客户端的每个连接里,可建立多个channel
  二、环境准备
  1、系统环境
  主机名
  系统
  IP
  用途
  master
  CentOS7.4
  192.168.56.129
  磁盘节点
  slave1
  CentOS7.4
  192.168.56.130
  内存节点
  slave2
  CentOS7.4
  192.168.56.131
  内存节点
  2、暂时关闭防火墙和selinux
  3、设置三个节点主机名hosts
  [root@master ~]# cat /etc/hosts
  192.168.56.129 master
  192.168.56.130 slave1
  192.168.56.131 slave2
  三、搭建服务
  1、安装最新repo源
  [root@master ~]# yum -y install epel-release
  2、安装三个节点的rabbitmq-server软件包
  [root@master ~]# yum -y install rabbitmq-server

  3、查看已安装的插件
  [root@master ~]# rabbitmq-plugins list

  4、启动管理服务(三个节点)
  [root@master ~]# rabbitmq-plugins enable rabbitmq_management

  5、分别启动rabbitmq服务(三个节点)
  [root@master ~]# systemctl start rabbitmq-server.service
  rabbitmq集群部署
  1、关闭服务(三个节点)
  [root@master ~]# systemctl stop rabbitmq-server.service
  2、进入cookie文件目录,配置(各节点需要有相同序列号值)
  [root@master ~]# cd /var/lib/rabbitmq/
  [root@master rabbitmq]# vim .erlang.cookie

  3、再启动rabbitmq服务
  [root@master rabbitmq]# systemctl start rabbitmq-server.service
  4、关闭rabbitmq应用(只关闭slave1和slave2)
  [root@master rabbitmq]# rabbitmqctl stop_app

  5、将slave1、slave2加入master,使它们成为一个集群。再次启动应用
  [root@slave1 ~]# rabbitmqctl join_cluster --ram rabbit@master
  [root@slave1 ~]# rabbitmqctl start_app


6、分别查看rabbitmq服务器状态

  [root@master ~]# rabbitmqctl cluster_status


7、通过客户端浏览器进行访问RabbitMQ (用户名:guest 密码:guest)

  http://192.168.56.129:15672






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-672496-1-1.html 上篇帖子: Install Minikube**(centos7) 下篇帖子: 小白安装CentOS7详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表