Centos7 RabbitMQ集群版安装

接上一篇:Centos7 RabbitMQ单机版安装

1.集群的目的

  1. 允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行
  2. 通过增加更多的节点来扩展消息通信的吞吐量

2.修改.erlang.cookie文件,RabbitMQ集群通信是建立在Erlang通信上的,Erlang通信是通过.erlang.cookie文件通信的

  1. 修改主机hosts文件
  2. vim /etc/hosts
  3. 关闭防火墙,这里就不废话了。。。
  4. 之后两个机器相互ping通就OK了
  5. 搭建RabbitMQ集群需要把Erlang Cookie文件修改为相同的
  6. 该文件在home目录下让两台机器上的.erlang.cookie文件相同,为了防止出错,直接覆盖另一个机器上(rabbitmq02)的.erlang.cookie文件
  7. 用跨ip复制命令,-r表示要复制的文件下有多个子文件
  8.  scp -r .erlang.cookie  root@xxx.xxx.xxx.131:/root
  9. 修改完后,重启服务器。

3.搭建集群RabbitMQ集群

  1. 启动两台机器上的RabbitMQ服务
  2. rabbitmq-server -detached,用ps -ef|grep rabbitmq查看下就行了
  3. 查看各服务器的集群状态使用命令
  4. rabbitmqctl cluster_status
  5. rabbimtq01

    目前只有一个节点。

  6. rabbitmq02

    目前只有一个节点

  7. 添加(join)节点

  8. 现在要将rabbitmq02 join到节点rabbitmq01上。在rabbitmq02上执行

  9. rabbitmqctl stop_app

  10. rabbitmqctl join_cluster rabbit@rabbitmq01  //rabbit@rabbitmq01为rabbitmq01集群的名字,在rabbitmq01上查看rabbitmq01集群的名字

  11. rabbitmqctl start_app

  12. 操作完成之后如上图,启动rabbitmq02服务

  13. 再次查看服务器的集群状态,使用命令:rabbitmqctl cluster_status

  14. 服务器rabbitmq01:

    服务器rabbitmq02:

    到此rabbitmq集群搭建完成

解释:

Erlang集群

rabbitmqctl首先会启动erlang节点,然后会从erlang分布式系统尝试连接RabbitMQ,而这时候需要erlang cookie和合适的节点名称,erlang节点通过交换作为秘密令牌的erlang cookie以获得认证,.erlang.cookie中存储的就是此令牌信息,所以集群所以erlang节点的erlang.cookie令牌信息必须一致

由于RabbitMQ的集群依赖erlang的集群,所以需要构建erlang集群,erlang集群之间是通过magic cookie实现的,这个cookie存放在$HOME/.erlang.cookie,随便选取一个节点的cookie复制到另外两个节点使三台保持一致

scp .erlang.cookie root@rabbitmq02:/root

设置好之后即可重启rabbitmq

如果需要将rabbitmq02作为内存节点与rabbitmq01连接起来,则在rabbitmq02上执行以下命令

  1. rabbitmqctl stop_app
  2. rabbitmqctl join_cluster --ram rabbit@rabbitmq01
  3. rabbitmqctl start_app

其中--ram代表是内存节点,如果希望是磁盘节点则不用加--ram,在rabbitmq集群中,至少需要一个磁盘节点

然后可以使用ip:15672即可访问,可以查看到三台节点的信息

集群节点可以是两种类型: 磁盘节点(Disc Node) 或 内存节点(RAM Node).磁盘节点会在RAM和磁盘中复制数据, 通过冗余可以防止节点失效事件,并可从断电这种全局事件中进行恢复. RAM节点只在RAM中复制数据(除了队列的内容外,还依赖于队列是否是持久化的或者内容对于内存来说是否过大) ,并主要用于可伸缩性. RAM节点只有当管理资源(如,增加/删除队列,交换机,或绑定)的时候才具有更高的性能.一个集群必须至少有一个磁盘节点,通常来说还不止一个.

默认情况下,节点是磁盘节点.如果你想要创建内存节点,需要提供--ram 标志

rabbitmq命令详解参考

  1. https://www.cnblogs.com/wuzhiyuan/p/6856985.html
  2. http://www.blogjava.net/qbna350816/archive/2016/07/30/431394.html
  3. http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

如果在加入集群的时候没有指定内存节点(RAM Node),可以使用命令将某个RabbitMQ节点修改为内存节点

修改节点为ram模式

  1. rabbitmqctl stop_app
  2. rabbitmqctl change_cluster_node_type ram
  3. rabbitmqctl start_app
  4. rabbitmqctl cluster_status

退出集群

  1. rabbitmqctl stop_app
  2. rabbitmqctl reset
  3. rabbitmqctl start_app

注意事项

  1. cookie在所有节点上必须完全一样,同步时一定要注意。
  2. Erlang是通过主机名来连接服务的,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败。
  3. 如果queue是非持久化queue,则如果创建queue的那个节点失败,发送方和接收方可以创建同样的queue继续运作。但如果是持久化queue,则只能等创建queue的那个节点恢复后才能继续服务。
  4. 在集群元数据有变动的时候需要有disk node在线,但是在节点加入或退出的时候所有的disk node必须全部在线。如果没有正确退出disk node,集群会认为这个节点当掉了,在这个节点恢复之前不要加入其它节点。
  5. RabbitMQ只要求集群中至少有一个磁盘节点,其他节点都可以是内存节点。当节点加入或者离开集群时,它们必须要将变更通知到至少一个磁盘节点。如果只有一个磁盘节点,磁盘节点奔溃后,集群可以继续路由消息(即保持运行),但是直到该节点恢复之前,无法更改任何东西。通常在集群中设置两个磁盘节点
  6. cluster中的node可以被随意的停止和启动,他们并不影响cluster中的其他node的运行,node重启后会自动的和cluster中的其他node进行联系的。当cluster不能工作时,最后一个失效的node必须是重建后第一个开始工作的node,如果这种情况不满足,则所有的node则会为最后一个disk node的恢复等待30秒,如果最后一个失效的node无法重新工作,我们需要通过命令将其从cluster中移除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值