rabbitmq集群设置

设置cookie

rabbitmq节点需要能互相访问到的话,节点的cookie必须保持一致。在类nix系统中,此cookie文件的位置存放在 /var/lib/rabbitmq/.erlang.cookie。
可以把其中一个节点的文件复制到其它节点中即可。在操作的过程中,关闭节点服务器,操作完成后再打开。以免造成cookie不一致,只能手动杀死服务器进程。

设置节点名称

rabbitmq节点名称默认为rabbit@hostname。这里hostname使用的是short hostname。通过 hostsname -s来查看。
我们也可以自己设置节点名称。新建/etc/rabbitmq/rabbitmq-env.conf文件,设置NODENAME即可。

上面设置的节点名称为rabbit@dev152,与hostname是完全不同的。这需要在/etc/hosts文件中,增加 127.0.0.1 dev152的记录。

组建集群

在本文中,通过两个节点rabbit@dev150,rabbit@dev152来说明集群的搭建。
rabbitmq设置集群的时候,有两个方式

  • 普通模式,这个是默认的。
  • 镜像模式,这个在普通模式的基础上,进一步的设置。
普通模式

查看节点的集群状态的话,通过 rabbitmqctl cluster_status命令。
在设置集群之前,确保两个节点是能互通访问。比如说已登录在dev152这个服务器上。 rabbitmqctl status -n rabbit@dev150是否能连接到dev150这个节点。如果不能连接,显示nodedown,可以通过两种方式去解决。一个是dns解析。另一个是配置/etc/hosts。在dev152的hosts文件中,增加 10.10.72.150 dev150。同样地,在dev150中也做相应的配置。

还需要注意的一点是,两个节点最好在同一个网段中。如果通过WAN互联,性能是比较差得。

组建集群,操作如下

在dev152上查看集群状态

可以看到,集群中已经有两个节点了。同样在dev150上操作,也可以看到

到目前为止,我们已经建立了两个节点,分别为dev152和dev150。

在此种模式下,如果给其中一个节点发送消息,比如dev152。发送成功后,我们也会在dev150上看到队列信息以及消息数,并且两个节点的数量是一致的。但是要注意的是,消息内容只会存储在dev152上。
为了提高性能,在这两个节点中组建逻辑上的主从关系。一个节点负责写,另一个节点负责读出。 image

在此种模式下,进行了读写分离,提高了性能。但是一旦遇到单点故障,dev152出现故障的话,那消息就永久丢失了。

镜像模式

使用镜像模式,可以把队列内容复制到其它的节点。这样如果一个节点出现宕机,队列内容也还在其它节点。这样可以提高可用性。 通过policy镜像队列,可以选择同步到所有节点,或者指定节点和节点名称。

在默认vhost中创建名称为ha-allqueue的policy。所有队列都创建镜像,并同步至所有节点。

在rabbitmq中没有负载均衡,我们需要自己实现。

image

此条目发表在rabbitmq分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。