rabbitmq集群

参考:https://www.cnblogs.com/knowledgesea/p/6535766.html

 

   考虑 rabbitmq 的高可用性,我们需要给 RabbitMQ 搭建集群环境。

 

一、rabbitmq 有3种模式,集群模式是2种。

  1. 单一模式:即单机情况不做集群,就单独运行一个 rabbitmq 

  2. 普通模式:默认模式,以两个节点(rabbit01、rabbit02)为例来说明。对于 queue 来说,消息实体只存在于其中一个节点,rabbit01 和 rabbit02 两个节点仅有相同的元数据,及队列的结构。当消息进入 rabbit01 节点的 queue 后,consumer 从 rabbit02 节点消费时,RabbitMQ 会临时在 rabbit01、rabbit02 间进行消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer。所以 consumer 应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理 queue。否则无论 consumer 连 rabbit01 或者 rabbit02,出口总在 rabbit01,会产生瓶颈。当 rabbit01 节点故障后,rabbit02 节点无法取到 rabbit01 节点中还未消费的消息实体。如果做了消息持久化,那么等rabbit01 节点恢复,然后才可被消费;如果没有持久化,就会产生消息丢失的现象。

  3. 镜像模式:把需要的队列做成镜像队列,与多个节点属于 RabbitMQ 的 HA 方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。所以在对可靠性要求较高的场合中适用。

 

二、搭建 RabbitMQ 的普通模式集群

  1. 环境准备

  1)两台 CentOS7 的机器(cat /etc/redhat-release),hostname 分别是: 

  cat /etc/hosts

  

 

  保证两台机器都能互相 ping 通。

 

  2. 分别在两个机器上安装 rabbitmq

  /usr/lib/rabbitmq/bin

 

   安装成功后有些常用操作

  ./rabbitmq-server -deched  --后台启动服务
  ./rabbitmqctl start_app --启动服务
  ./rabbitmqctl stop_app --关闭服务
  ./rabbitmq-plugins enable rabbitmq_management --启动web管理插件
  ./rabbitmqctl add_user zlh zlh --添加用户,密码
  ./rabbitmqctl set_user_tags zlh administrator --设置zlh为admin权限

 

  3. 设置 .erlang.cookie

  RabbitMQ 的集群是依赖 erlang 集群,而 erlang 集群是通过这个 cookie 进行通信认证的,因此,我们做集群第一步就是修改 cookie。

  在 $HOME 或者 /var/lib/rabbitmq 中,文件名称为 .erlang.cookie,他是一个隐藏文件。修改两个机器中的 .erlang.cookie 文件中 cookie 值一致,且权限为 owner 只读。

  chmod 600 .erlang.cookie

 

  4. 查看集群状态,我的已经做好了

  

 

 

  5. 常用命令

  1)停止当前机器中 rabbitmq 服务

  ./rabbitmqctl stop_app

  2)加入集群

  ./rabbitmqctl join_cluster --ram rabbit@mini2

  3)开启当前机器的 rabbitmq 服务

  ./rabbitmqctl start_app

 

  6. 打开网页查看 nodes

  

 

 

三、搭建 rabbitmq 的镜像高可用模式集群

  镜像模式要依赖 policy 模块。

  policy 中文是政策,策略的意思,那么他就是要设置,哪些 exchanges 或者 queue 的数据需要复制同步,如何复制同步。

  ./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

参数意思为:

  ha-all:策略名称

  ^:匹配符。只有一个 ^ 代表匹配所有,^zl 为匹配名称为 zl 的 exchanges 或者 queue

  ha-mode:为匹配类型,分为3种模式:all- 所有 queue,exctly- 部分(需配置 ha-params参数,此参数为 int 类型,比如 3,众多集群中的随机 3 台机器),node- 指定(需配置 ha-params参数,此参数为数组类型,比如 ["rabbit@mini1","rabbit@mini2"] 这样指定为 F与G这 2 台机器)。

 

  在 web 管理界面也能配置

  

 

posted @ 2020-08-17 15:40  停不下的时光  阅读(1867)  评论(0编辑  收藏  举报