镜像模式

能够保证数据不丢失,并且实现简单。
目的是为了保证 rabbitmq 数据的高可靠解决方案,主要就是实现数据的同步。

可以主节点使用内存模式,其他节点磁盘模式

镜像集群搭建

节点安装

基础包

  1. yum install -y build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

下载 rabbit 软件包

  1. wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
  2. wget https://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-1.1.el7.lux.x86_64.rpm
  3. wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm

安装 rabbit 软件包

  1. rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
  2. rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm
  3. rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

修改集群用户

  1. vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app

修改
loopback_users 中 guest 两边的 <<>> 去掉

启动服务

  1. service rabbitmq-server start

安装管理插件

  1. rabbitmq-plugins enable rabbitmq_management

检查是否启动成功

  1. lsof -i:5672
  2. lsof -i:15672

文件同步

找到 master节点的 /var/lib/rabbitmq/.erlang.cookie 文件,复制到其他节点的 /var/lib/rabbitmq/

  1. scp /var/lib/rabbitmq/.erlang.cookie 192.168.0.12:/var/lib/rabbitmq/
  2. scp /var/lib/rabbitmq/.erlang.cookie 192.168.0.13:/var/lib/rabbitmq/

也可以直接复制粘贴内容
如果 permission denied ,可以 chmod 777
/var/lib/rabbitmq/ 下也有 .erlang.cookie,也需要 chmod
最后把 修改的 cookie 权限还原成 400

镜像集群

停止 MQ 服务

停止所有节点的服务(不能使用原有命令:service rabbitmq-server stop)
命令与停止服务不一样

  1. rabbitmqctl stop

启动集群

每个节点

  1. rabbitmq-server -detached

slave 节点加入集群

注意slave节点第一步是 stop_app 不是 stop

  1. //注意做这个步骤的时候:需要配置/etc/hosts 必须相互能够寻址到
  2. node2rabbitmqctl stop_app
  3. node2rabbitmqctl join_cluster --ram rabbit@rb1
  4. node2rabbitmqctl start_app
  5. node3rabbitmqctl stop_app
  6. node3rabbitmqctl join_cluster rabbit@rb1
  7. node3rabbitmqctl start_app

查看集群状态

  1. rabbitmqctl cluster_status

访问任意一个管控台 :15672
image.png

修改集群名

默认名是第一个节点明

  1. rabbitmqctl set_cluster_name rb_cluster1

配置镜像队列

任意一个节点执行

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

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态一致,RabbitMQ高可用集群就已经搭建好了,我们可以重启服务,查看其队列是否在从节点同步。

如果有3个节点,此时创建一个队列,这里就会显示+2
Features 会显示 ha-all
image.png

可能报错

rabbit@rb1:
connected to epmd (port 4369) on rb1
epmd reports node ‘rabbit’ running on port 25672
TCP connection succeeded but Erlang distribution failed
suggestion: hostname mismatch?
suggestion: is the cookie set correctly?
suggestion: is the Erlang distribution using TLS?

current node details:
- node name: ‘rabbitmq-cli-84@rb3’
- home dir: /var/lib/rabbitmq
- cookie hash: 9oVSjkmsOSLYXPNC8PiFgw==

  • 检查集群 .erlang.cookie 是否一致
  • 检查 /etc/hosts 与 /etc/hostname 配置是否正确