镜像集群:
在普通集群的基础上,把需要的队列做成镜像队列,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取,也就是说多少节点消息就会备份多少份。 该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。 所以在对可靠性要求较高的场合中适用。由于镜像队列之间消息自动同步,且内部有选举master机制,即使master节点宕机也不会影响整个集群的使用,达到去中心化的目的,从而有效的防止消息丢失及服务不可用等问题。 普通集群 集群名将集群名修改为rabbit@MQ1
# 修改集群名 sbin/rabbitmqctl set_cluster_name rabbit@MQ1 Setting cluster name to rabbit@MQ1 ... # 查看集群状态 sbin/rabbitmqctl cluster_status Cluster status of node rabbit@MQ1 ... Basics Cluster name: rabbit@MQ1 Disk Nodes rabbit@MQ1 Running Nodes rabbit@MQ1 加入集群在218、219节点上执行
sbin/rabbitmqctl stop_app sbin/rabbitmqctl join_cluster rabbit@MQ1 sbin/rabbitmqctl start_app 修改节点类型查看集群状态
sbin/rabbitmqctl cluster_status Cluster status of node rabbit@MQ1 ... Basics Cluster name: rabbit@MQ1 Disk Nodes # 磁盘节点现在3个都是 rabbit@MQ1 # 我们看到所有的节点都是disk类型与我们预设的架构不符 rabbit@MQ2 # 我们需要修改一下这个架构 rabbit@MQ3 Running Nodes rabbit@MQ1 rabbit@MQ2 rabbit@MQ3更改218节点为内存节点
# 停止节点 sbin/rabbitmqctl stop_app # 与集群通讯,从集群中删除节点 sbin/rabbitmqctl reset # 以RAM模式重新加入集群 sbin/rabbitmqctl join_cluster rabbit@MQ1 --ram # 启动节点 sbin/rabbitmqctl start_app sbin/rabbitmqctl cluster_status Cluster status of node rabbit@MQ1 ... Basics Cluster name: rabbit@MQ1 Disk Nodes rabbit@MQ1 rabbit@MQ3 RAM Nodes rabbit@MQ2 Running Nodes rabbit@MQ1 rabbit@MQ2 rabbit@MQ3节点单机状态时,reset 命令将清空节点的状态,并将其恢复到空白状态。当节点是集群的一部分时,该命令也会和集群中的磁盘节点通信,告诉他们该节点正在离开集群。
这很重要,不然,集群会认为该节点出了故障,并期望其最终能够恢复回来,在该节点回来之前,集群禁止新的节点加入。
镜像集群(HA)上面我们已经成功部署了一个普通集群,普通集群并不是高可用的,下面基于普通集群升级为镜像集群 官方HA方案
sbin/rabbitmqctl set_policy <name> [-p <vhost>] <pattern> <definition> [--apply-to <apply-to>] name: 策略名称 vhost: 指定vhost, 默认值 / pattern: 通过正则表达式匹配哪些需要镜像, ^为所有 definition: ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes all 表示在集群所有的节点上进行镜像,无需设置ha-params exactly 表示在指定个数的节点上进行镜像,节点的个数由ha-params指定 nodes 表示在指定的节点上进行镜像,节点名称通过ha-params指定 ha-params: ha-mode 模式需要用到的参数 ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually apply-to: 策略作用对象。可选值3个,默认all exchanges 表示镜像 exchange (并不知道意义所在) queues 表示镜像 queue all 表示镜像 exchange和queue ➜ # 示例命令 sbin/rabbitmqctl set_policy admin "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' ha-mode ha-params 功能all 空 镜像队列将会在整个集群中复制。当一个新的节点加入后,也会在这 个节点上复制一份。
exactly count 镜像队列将会在集群上复制 count 份。如果集群数量少于 count 时候,队列会复制到所有节点上。如果大于 Count 集群,有一个节点 crash 后,新进入节点也不会做新的镜像。
nodes node name 镜像队列会在 node name 中复制。如果这个名称不是集群中的一个,这不会触发错误。如果在这个 node list 中没有一个节点在线,那么这个 queue 会被声明在 client 连接的节点。
WEB管理 启用WEB管理插件 # 启动web管理插件 sbin/rabbitmq-plugins enable rabbitmq_management # 增加用户 sbin/rabbitmqctl add_user admin admin # 配置用户权限 sbin/rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" 示例:我们赋予 admin 在“/”下面的全部资源的配置和读写权限。注意”/”代表 virtual host 为“/”这个“/”和 Linux 里的根目录是有区别的并不是 virtual host 为“/”可以访问所以的 virtual host,把这个“/”理解成字符串就行。 # 设置用户角色 sbin/rabbitmqctl set_user_tags admin administrator 访问管理界面