部署rabbitMQ镜像集群实战测试 (2)

镜像集群:

在普通集群的基础上,把需要的队列做成镜像队列,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取,也就是说多少节点消息就会备份多少份。 该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。 所以在对可靠性要求较高的场合中适用。由于镜像队列之间消息自动同步,且内部有选举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 访问管理界面

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgxxf.html