欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

rabbitMQ的集群方式和镜像队列

程序员文章站 2022-06-25 18:23:47
...

rabbitMQ的集群方式和镜像队列

 

一、rabbitMQ的集群方式

 

(1)先配置集群每台机器的hosts文件:

 

[root@yangjuanying sbin]# vi /etc/hosts

 

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

 

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 

192.168.139.128 yangjuanying

 

192.168.139.129 yangjuanying1

 

192.168.139.130 yangjuanying2

 

 

 

(2)确保每台机的 $home/.erlang.cookie 文件的值一致

 

Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 $home/.erlang.cookie (像我的root用户安装的就是放在我的root/.erlang.cookie),文件是400的权限。所以必须包管各节点cookie对峙一致,不然节点之间就无法通信。

 

 

 

复制cookie内容

 

打开文件然后需要先把其中的一台服务器的.erlang.cookie中的内容复制到别的机器上,最好是复制内容,因为文件权限不对的话会出现问题,在最后退出保存的时候使用wq!!来进行强制保存即可.

 

 

 

(3)集群配置

 

Master

 

[root@yangjuanying sbin]# rabbitmq-server start &

 

[root@yangjuanying sbin]# rabbitmqctl stop_app

 

Stopping node rabbit@yangjuanying ...

 

[root@yangjuanying sbin]# rabbitmqctl reset

 

Resetting node rabbit@yangjuanying ...

 

[root@yangjuanying sbin]# rabbitmqctl start_app

 

Starting node rabbit@yangjuanying ...

 

 

 

Slave1

 

[root@yangjuanying1 sbin]# rabbitmq-server start &

 

[root@yangjuanying1 sbin]# rabbitmqctl stop_app

 

Stopping node rabbit@yangjuanying1 ...

 

[root@yangjuanying1 sbin]# rabbitmqctl reset

 

Resetting node rabbit@yangjuanying1 ...

 

[root@yangjuanying1 sbin]# rabbitmqctl change_cluster_node_type ram

 

[root@yangjuanying1 sbin]# rabbitmqctl join_cluster rabbit@yangjuanying

 

Clustering node rabbit@yangjuanying1 with rabbit@yangjuanying ...

 

[root@yangjuanying1 sbin]# rabbitmqctl start_app

 

Starting node rabbit@yangjuanying1 ...

 

[root@yangjuanying1 sbin]#

 

 

 

 

 

Slave2

 

[root@yangjuanying2 sbin]# rabbitmq-server start &

 

[root@yangjuanying2 sbin]# rabbitmqctl stop_app

 

Stopping node rabbit@yangjuanying2 ...

 

[root@yangjuanying2 sbin]# rabbitmqctl reset

 

Resetting node rabbit@yangjuanying2 ...

 

[root@yangjuanying2 sbin]# rabbitmqctl change_cluster_node_type ram

[root@yangjuanying2 sbin]# rabbitmqctl join_cluster rabbit@yangjuanying

 

Clustering node rabbit@yangjuanying2 with rabbit@yangjuanying ...

 

[root@yangjuanying2 sbin]# rabbitmqctl start_app

 

Starting node rabbit@yangjuanying2 ...

 

遇到问题:

 

由于搭建完集群没有正常关闭rabbitmq节点而直接对3台虚拟机关机,导致第二天启动虚拟机并启动rabbitmq节点时起不来,报错找不到从节点yangjuanying1yangjuanying2,由于自己安装的rabbitmq是绿色版的,目前暂时的做法是把rabbitmq安装文件夹删除并重新解压配置,解决方法有待改进。

 

要是错误信息中提示有主节点冲突的话,可以进入到一下目录修改相应的文件

可尝试解决方式:

[root@yangjuanying bin]# cd /usr/local/soft/rabbitmq/rabbitmq_server-3.5.3/var/lib/rabbitmq/mnesia/
[root@yangjuanying mnesia]# vi rabbit\@yangjuanying/cluster_nodes.config

编辑集群配置文件cluster_nodes.config,或者直接将这个目录里的文件全都删除,这个是集群的配置文件和持久化的数据存储位置,能改则改实在是迫不得已再删除

======================================

 

查看集群状态:

 

[root@yangjuanying sbin]# rabbitmqctl cluster_status

 

Cluster status of node rabbit@yangjuanying ...

 

[{nodes,[{disc,[rabbit@yangjuanying,rabbit@yangjuanying1,

 

                rabbit@yangjuanying2]}]},

 

 {running_nodes,[rabbit@yangjuanying2,rabbit@yangjuanying1,

 

                 rabbit@yangjuanying]},

 

 {cluster_name,<<"rabbit@yangjuanying">>},

 

 {partitions,[]}]

 

[root@yangjuanying sbin]#

 

 

 

[root@yangjuanying1 sbin]# rabbitmqctl cluster_status

 

Cluster status of node rabbit@yangjuanying1 ...

 

[{nodes,[{disc,[rabbit@yangjuanying,rabbit@yangjuanying1,

 

                rabbit@yangjuanying2]}]},

 

 {running_nodes,[rabbit@yangjuanying2,rabbit@yangjuanying,

 

                 rabbit@yangjuanying1]},

 

 {cluster_name,<<"rabbit@yangjuanying">>},

 

 {partitions,[]}]

 

[root@yangjuanying1 sbin]#

 

 

 

 

 

[root@yangjuanying2 sbin]# rabbitmqctl cluster_status

 

Cluster status of node rabbit@yangjuanying2 ...

 

[{nodes,[{disc,[rabbit@yangjuanying,rabbit@yangjuanying1,

 

                rabbit@yangjuanying2]}]},

 

 {running_nodes,[rabbit@yangjuanying,rabbit@yangjuanying1,

 

                 rabbit@yangjuanying2]},

 

 {cluster_name,<<"rabbit@yangjuanying">>},

 

 {partitions,[]}]

 

[root@yangjuanying2 sbin]#

 

 

 

 

 

看到每台机的状态几乎一致,普通的集群模式已经建立完成了。

 

 

 

二、rabbitMQ的镜像队列

 

上述配置的RabbitMQ默认集群模式,但并不包管队列的高可用性,尽管互换机、绑定这些可以复制到集群里的任何一个节点,然则队列内容不会复制,固然该模式解决一项目组节点压力,队列节点宕机直接导致该队列无法应用,只能守候重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,须要创建镜像队列。

 

镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列.

 

我是通过网页的管理端来设置的镜像队列,也可以通过命令,官方有例子. http://www.rabbitmq.com/ha.html 打开之后翻到最下边有两个例子,可以参考看看,这里只说其中的网页设置的

>1.点击admin菜单-->右侧的Policies选项-->左侧最下下边的Add / update a policy

>2.按照图中的内容根据自己的需求填写

>3.点击Add policy添加策略

rabbitMQ的集群方式和镜像队列
            
    
    博客分类: rabbitmq rabbitmq集群镜像 

此时你就会来你的两台rabbitmq服务器的网页管理端amind菜单下看见刚才创建的队列了.

下面我们来添加一个queues队列来看看效果,这里只是测试结果,其它的先不填写

rabbitMQ的集群方式和镜像队列
            
    
    博客分类: rabbitmq rabbitmq集群镜像 

注意红框中的 x-ha-policy = all 这个,网上说没有这个不会进行复制,但是我测试的时候好像可以复制的,至少queues队列是可以的,先添上吧.

 

在这里边添加的时候你是可以指定Node选项也就是把这个queues放在哪个node节点上,不过做镜像的时候就没有必要了

 

添加完成后你会看到这个效果(添加队列时,Auto Delete勾选为Yes,就会是HA方式的镜像队列)


rabbitMQ的集群方式和镜像队列
            
    
    博客分类: rabbitmq rabbitmq集群镜像 
 

当鼠标移到+2,可以看到ab这个队列做了镜像队列,所以yangjuanying,yangjuanying1和yangjuanying2上各有一个队列,当yangjuanying,yangjuanying1和yangjuanying2任意一台机器挂掉的时候,标志+2会消失,变成+1或消失(剩下n个正常的节点,就显示其中一个正常节点以及【+n-1】),等节点恢复以后,也恢复成+2(总共3个节点),如果不做镜像队列,如ba和bb,当节点挂了就消失了,重启后依旧消失


rabbitMQ的集群方式和镜像队列
            
    
    博客分类: rabbitmq rabbitmq集群镜像 
 

  • rabbitMQ的集群方式和镜像队列
            
    
    博客分类: rabbitmq rabbitmq集群镜像 
  • 大小: 13.1 KB
  • rabbitMQ的集群方式和镜像队列
            
    
    博客分类: rabbitmq rabbitmq集群镜像 
  • 大小: 72.7 KB