RabbitMQ使用分析,高可用集群搭建,案例分享( 三 )


# server1
NODENAME=rabbit@cluster1
...
# server2
NODENAME=rabbit@cluster2
启动server1:
./rabbitmq-server –detached
将server2加入到server形成集群:
./rabbitmqctl -n rabbit@cluster2 stop_app
# 重置元数据、集群配置等信息
./rabbitmqctl -n rabbit@cluster2 reset
# cluster2 加入到 cluster1 的集群中 --ram表示cluster2为RAM节点 默认为disc
./rabbitmqctl -n rabbit@cluster2 join_cluster rabbit@cluster1 --ram
./rabbitmqctl -n rabbit@cluster2 start_app
普通集群就搭建完成了,普通集群并不是高可用的,基于普通集群升级为镜像集群RabbitMQ HA方案
./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
eg:
./rabbitmqctl set_policy test "test" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
测试: exchange = test, queue = test
case1: pattern=test, apply-to=exchanges -> 结果 exchange被镜像
case2: pattern=test, apply-to=queues -> 结果 queue被镜像
case3: pattern=test, apply-to=all -> 结果 queue被镜像
结论: 不知道exchange被镜像的意义所在,镜像queue才是关键
ps:
保证集群的高可用,至少要有1个disc节点
RabbitMQ Cluster 全部挂掉,RAM节点无法先启动,必须先启动disc节点
推荐 2 RAM 1 DISC 集群搭建方式
总结:RabbitMQ高可用集群还是非常有必要的,高可用的代价就是性能的降低,对可靠性要求比较高的企业务还是值得的,据我测试2R1D镜像集群(非压测, 压测结果绝对更高),达到1000QPS+还是没问题的,如果开启事务,保证同步发送应答,也可达500QPS+,绝对满足大多数可靠性要求高的业务 。




推荐阅读