docker分布式部署rabbitmq集群

*爱你&永不变心* 提交于 2020-03-09 02:53:31

rabbitmq是目前消息队列比较热门的使用技术,这里它和其他几类技术的对比本文就不做赘述了。本文主要讲述在Docker下如何部署rabbitmq分布式集群。本文不讲述docker及rabbitmq镜像的安装下载。

一、前期准备

      本文以两台服务器作为示例。服务器A的IP为192.168.1.10,服务器B的IP为192.168.1.11。为了后期管理更多docker配置方便,分别在A,B两台服务器里面新建docker目录,其结构示例如下:

            cd /home/user/

             mkdir docker

             cd docker 

             mkdir rabbitmq

             cd  rabbitmq

             touch hosts

             vim hosts  

进入刚创建好的hosts文件配置服务器映射,编辑好以后wq保存退出

     192.168.1.10  rabbit1

     192.168.1.11  rabbit2

二、在A服务器中启动已经下载好的rabbitmq镜像

 docker run -d --privileged=true --net host --hostname rabbit1 --name rabbitmq1 -v /home/user/docker/rabbitmq:/var/lib/rabbitmq -v /home/user/docker/rabbitmq/hosts:/etc/hosts -e RABBITMQ_ERLANG_COOKIE='your erlang cookie' rabbitmq_bac

  注意点:

       1、加入--privileged=true是使docker容器真正具备该服务器的root权限,不添加此项有可能会导致容器目录无法挂载到本地。

       2、两台服务器的RABBITMQ_ERLANG_COOKIE必须相同,否则无法将其加入到集群节点。                       RABBITMQ_ERLANG_COOKIE的值可在容器的/var/lib/rabbitmq中的.erlang.cookie文件中查看,因为它是隐藏文件所以查看该文件时需要使用命令ls -a。然后使用more命令或者tail命令查看该文件保存的值。RABBITMQ_ERLANG_COOKIE对应的值就是该文本里面的值。同时为了使多台服务器的cookie相同,务必将其中一台服务器上的.erlang.cookie拷贝替换其他几台服务器上的文件。

   三、在B服务器中启动已经下载好的rabbitmq镜像

docker run -d --privileged=true --net host --hostname rabbit2 --name rabbitmq2 -v /home/user/docker/rabbitmq:/var/lib/rabbitmq -v /home/user/docker/rabbitmq/hosts:/etc/hosts -e RABBITMQ_ERLANG_COOKIE='your erlang cookie' rabbitmq_bac

 创建运行好容器之后,进入到容器内部将该rabbit节点加入到集群中。

docker exec -it rabbit2 /bin/bash

rabbitmqctl stop_app

rabbitmqctl join_cluster rabbit@rabbit1

rabbitmqctl start_app

到此基本上一个rabbitmq分布式集群就搭建好了。

最后,我为什么会更喜欢docker的部署方式呢。对于一两台服务器,他的优势并不明显,但是当我们需要构建一个庞大的集群时他的优势就会体现出来,个人感受主要有以下几点:

  1、部署安装快速便捷。写好docker脚本就能很快构建服务。

  2、保持各服务器同一服务的版本及内容一致。docker的备份迁移就为我们很好的提供了该能力。我们可以把我们已经配置好的docker容器保存为镜像然后导出到本地形成我们自己的版本,然后再加载到其他服务器的docker中我们就能保证我们的服务版本是完全一致的。这也为我们上线提供了非常大的便利,同时也会使我们避免因版本或其他原因导致因为不一致导致的问题。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!