单节点上用Docker模拟RabbitMQ集群
- 本文内容搬运自:
- Docker 安装参考:
- 官方参考:https://docs.docker.com/install/linux/docker-ce/ubuntu/
- 推荐使用脚本:https://get.docker.com/
最后别忘按照脚本提示把自己用户名加到docker group里,这样不用每次都敲sudo.curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
用docker CLI在单台服务器实现RabbitMQ集群
- 从Github Repo https://github.com/oprearocks/RabbitMQ-Docker-cluster 将如下两个文件放在当前文件夹下(这两个是RabbitMQ的配置,这里不细说了):
rabbitmq.config
definitions.json
- 启动RabbitMQ master node(如果未将当前用户添加到docker group,需要在命令前加sudo,下同)
docker run -d \ --name="rabbit1" \ --hostname="rabbit1"\ -e RABBITMQ_ERLANG_COOKIE="secret string" \ -e RABBITMQ_NODENAME="rabbit1" \ --volume=$(pwd)/rabbitmq.config:/etc/rabbitmq/rabbitmq.config \ --volume=$(pwd)/definitions.json:/etc/rabbitmq/definitions.json \ --publish="4369:4369" \ --publish="5671:5671" \ --publish="5672:5672" \ --publish="15671:15671" \ --publish="15672:15672" \ --publish="25672:25672" \ rabbitmq:3-management
- -d:后台执行
- –name=“rabbit1”:启动的docker容器名
- –hostname=“rabbit1”:RabbitMQ容器的hostname,主机名称
- -e:两个RabbitMQ环境变量,具体原理参考
- –volume=$(pwd)/rabbitmq.config:/etc/rabbitmq/rabbitmq.config:将当前目录下的rabbitmq.config装载到容器中的/etc/rabbitmq/rabbitmq.config
- –publish=“4369:4369”:将容器端口4369 publish 到服务器端口4369
- rabbitmq:3-management:启动的容器为带有管理插件的版本,各种版本参考
- 启动另外两个RabbitMQ节点
docker run -d \ --name="rabbit2" \ --hostname="rabbit2"\ -e RABBITMQ_ERLANG_COOKIE="secret string" \ -e RABBITMQ_NODENAME="rabbit2" \ --volume=$(pwd)/rabbitmq.config:/etc/rabbitmq/rabbitmq.config \ --volume=$(pwd)/definitions.json:/etc/rabbitmq/definitions.json \ --link="rabbit1:rabbit1" \ rabbitmq:3-management
- –link=“rabbit1:rabbit1”:增加一个到容器rabbit1的连接,让rabbit1和rabbit2可以相互通讯
docker run -d \ --name="rabbit3" \ --hostname="rabbit3"\ -e RABBITMQ_ERLANG_COOKIE="secret string" \ -e RABBITMQ_NODENAME="rabbit3" \ --volume=$(pwd)/rabbitmq.config:/etc/rabbitmq/rabbitmq.config \ --volume=$(pwd)/definitions.json:/etc/rabbitmq/definitions.json \ --link="rabbit1:rabbit1" \ --link="rabbit2:rabbit2" \ rabbitmq:3-management
- 登录管理后台,验证三节点RabbiMQ集群已经启动
- 管理后台地址:http://localhost:15672/
- 用户名/密码:guest/guest (这个是在definitions.json中设置的)
- 三节点RabbiMQ集群已经启动
- 随便点点看看功能,在overview页面下面可以导入导出Json配置文件,不用手动写
- 用命令行的问题
- 节点多了难维护,–link也相应的多,
- 不好在利用在docker swarm中(如果要在多台服务器上建立RabbitMQ集群,就要用到docker swarm了)
- 删除建立的集群
或者docker container rm -f rabbit1 rabbit2 rabbit3
docker rm -f $(docker ps -aq)
用docker-compose在单台服务器实现RabbitMQ集群
- 安装docker compose,具体参考
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
- Windows docker toolkits是自带的,mac toolkits好像也带,但是linux是分开装的
- 从Github Repo https://github.com/oprearocks/RabbitMQ-Docker-cluster 将如下文件放在当前文件夹下:
rabbitmq.config
definitions.json
docker-compose.yml
- 对比前面的docker run命令的介绍,
docker-compose.yml
文件大部分应该很直接。 - depends_on: rabbit1:在rabbit1启动后,再启动该service
- networks部分:将启动的容器连接到rabbitmq-cluster这个网络上(docker 中的custom network是自带DNS服务的,default network bridge好像没有)
- 建立rabbitmq-cluster docker network
docker network create rabbitmq-cluster
- 利用docker-compose.yml启动RabbitMQ集群
docker-compose up -d
- 登录管理后台,验证三节点RabbiMQ集群已经启动