radditmq镜像问题
1.做了镜像,那么一个队列,就有master队列和slave队列,当客户端连接slave的时候,向slave发送创建信息或者消费信息的时候,都是发送给slave,然后slave发送给master,master处理完后,把结果交给slave,然后slave也执行,然后返回给客户端。其实都是master在执行,然后返回给slave。
2. kill -9 master的pid ,这样突然down掉master,此时slave会切换为master。如果是正常 stop或者shutdown master的时候,slave不会切换为master的。
3.在master创建queues的时候,这些队列都是主队列来的。
通过图片,箭头处表示这个队列在哪个结点是主队列。
4.如果镜像的命令如下,那么如果有一个结点挂了,那么需要手动同步队列信息
rabbitmqctl set_policy -p / ha-allqueue"^" '{"ha-mode":"all"}'
通过上面的命令,启动的镜像,如果master或者slave挂了,从新启动后,队列的新消息是不会同步给他们的,需要手动同步
rabbitmqctl sync_queue ab #ab为队列名字
如下图,红色框里面的+1表示,我们停止了slave结点,然后又启动了,但是此时不会同步队列信息过去给slave
rabbitmqctl set_policy -p / ha-all-queue "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
通过把ha-sync-mode设置为automatic,当slave或者其他结点挂了,从新启动,那么队列信息也会自动同步过去。如下图:
5.用负载均衡在rabbit上,进行负载均衡,其实这个并不起到负载均衡的作用。因为负载到不通的物理主机上,比如负载到slave结点,但是命令还是salve会发送给master处理,然后再同步给slave的。所以起不到负载均衡的作用,全部压力还是给了master。
6.如果一个结点执行了 rabbitmqctl reset ,那么这些结点的所有信息全部都被清掉,比如交换机,队列,账号等这些,都被清除掉了。