Docker中实现RabbitMQ集群
来源:互联网 发布:603258电魂网络吧 编辑:程序博客网 时间:2024/06/05 12:47
1. docker环境准备
1). 获取docker所在centos7的hostname值
2). Docker版本1.7,erlang版本17.3,docker-compose版本1.5.2
3). 镜像及配置准备: rabbitmq-base:所需配置见下面的Dockerfile内容。注意:Dockerfile文件中FROM为基础镜像centos和rabbitmq,其他不变(可以直接从docker官方拉取). rabbitmq-server:所需配置见server中的Dockerfile, erlang.cookie,rabbitmq.config以及startrabbit.sh。注意:Dockerfile文件中FROM为rabbitmq-base制作镜像的name, EXPOSE为对外暴露的端口,可自行添加。Erlang.cookie中是erlang通讯的cookie值,必须按其规则写死。Startrabbit.sh中hostname与本虚拟机的hostname保持一致。(hostname命令可直接查看,hostname newname指令可以修改,newname为修改hostname). RabbitMQ实例集群:所需docker-compose执行cluster文件中的yml文件。注意:每个节点名称自定,但是要保持一致,image镜像必须制定为rabbitmq-server创建的镜像name, ports左边是容器暴露端口,客户端访问端口,可自定修改,不产生端口冲突即可。
2. 镜像制作与docker-compose一键部署
1). 基础镜像导入及docker-compose安装
a). SSHClient工具上传docker-compose-Linux-x86_64到/usr/local/bin目录下
b). mv docker-compose-Linux-x86_64 docker-compose #修改名称
c). chmod +x /usr/local/bin/docker-compose #设置文件访问权限
d). docker-compose -version #查看版本
e). docker-compose up -d #后台模式被启动
2). rabbitmq-base镜像制作
在base文件夹执行命令 docker build -t rabbitmq-base:3.6.5 .(千万别忘记空格”.”)
3). rabbitmq-server镜像制作:
同rabbitmq-base一样设置,执行docker build -t rabbit-server:3.6.5
4). 查看镜像: docker images
5). 一键部署:
只需要在cluster文件执行:-compose up -d
此命令会在当前目录及父目录中搜索yml,yaml等文件,并自动执行。
(成功创建三个节点)
6). 查看实例
执行命令: docker ps
至此,通过docker-compose创建实例完成。
3. 集群及高可用实现
1). 实现rabbitmq集群
a.首先进入每个容器,启动客户端管理插件。
执行命令:docker exec -i -t ca9d909c529c bash进入ID为ca9d909c529c的容器。
执行命令: rabbitmq-plugins enable rabbitmq_management启动插件。
执行命令:exit退出容器(容器依旧工作,不会停止服务)
b. 在yml文件中,已制定了三个节点之间的挂载管理,节点2挂载在节点1,节点3挂载集群1, 2节点上。所以,再加入集群操作时,也按照该顺序执行。先进入节点2,执行命令:rabbitmqctl stop_app停止服务. 然后执行命令:rabbitmqctl join_cluster –ram rabbit@tabbit1.接着执行命令:rabbitmqctl start_app启动服务.
(节点1和节点2实现了集群), 同样的操作在节点3操作,挂载的节点可以是1或者2。 –ram指定内存,如果不写指定磁盘,其中内存在消息吞吐上性能更加,磁盘可以保证消息持久化。
c. 所有对外暴露的端口对外开放
开发端口:firewall-cmd –zone=public –add-port80/tcp –permanent (–permanent永久生效:firewall-cmd –reload)
d. 客户端
在浏览器地址输入ip:15672, 按照默认账号密码登陆, 可以看到三个节点实现”负载均衡”的集群。
2). 实现高可用
实现高可用的策略和普通Linux上一样,详见Linux部署手册。
(黄色数量根据节点数目和策略自动镜像的队列,红色是镜像策略的一种。)
4. docker及rabbitmq常见操作命令
Docker:版本查看:docker version服务启动:service docker start服务关闭:service docker stop服务重启:service docker restart服务信息:docker info镜像库提供的多个镜像:docker search redis 拉取最后版本的docker-redis镜像:docker pull redis 查看镜像:docker images启动镜像实例:docker run -d --name redis7001 -p 7001:6379 redis查看当前运行的dockerid:docker ps 查看已有的可能状态是停止:docker ps -a 开启实例:docker start b193fbe1e400 #如重启可能实例被关闭停止实例:docker stop b193fbe1e400 删除运行的docker:docker rm –f 0cfc4932b9a0 # -f强制删除删除镜像:docker rmi xcfc4932b9a0 创建镜像:docker build -t jt-centos6:0.0.1 .导出镜像:docker save -o jt-centos6.tar jt-centos6:0.0.1导入镜像:docker load -i jt-centos6.tar进入容器:docker exec -it 0cfc4932b9a0 bash退出容器:exit设置文件权限:chmod +x /usr/local/bin/docker-compose查看版本:docker-compose -version 后台模式被启动docker-compose up -d 查看版本:COMPOSE_PROJECT_NAME=myzk docker-compose ps 先停止:COMPOSE_PROJECT_NAME=myzk docker-compose stop 后删除:COMPOSE_PROJECT_NAME=myzk docker-compose rm Rabbitmq:启动服务:service rabbitmq-server start停止服务:service rabbitmq-server stop重启服务:service rabbitmq-server restart错误日志目录:/var/log/rabbitmq/startup_err设置开机启动:chkconfig rabbitmq-server on启动后台管理:rabbitmq-plugins enable rabbitmq_management集群:停止服务:rabbitmqctl stop_app加入集群:rabbitmqctl join_cluster --ram rabbit@rabbit1rabbitmqctl start_app
5. 要到的配置代码
Dockerfile
FROM jt-centos6:0.0.1FROM rabbitmq:latestRUN /usr/sbin/rabbitmq-plugins enable rabbitmq_mqtt rabbitmq_stomp rabbitmq_management rabbitmq_management_agent rabbitmq_management_visualiser rabbitmq_federation rabbitmq_federation_management sockjs#CMD /usr/sbin/rabbitmq-server
server中的Dockerfile
FROM mq-base:latestADD rabbitmq.config /etc/rabbitmq/RUN chmod u+rw /etc/rabbitmq/rabbitmq.configADD erlang.cookie /var/lib/rabbitmq/.erlang.cookieRUN chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookieRUN chmod 400 /var/lib/rabbitmq/.erlang.cookieRUN mkdir /opt/rabbitADD startrabbit.sh /opt/rabbit/RUN chmod a+x /opt/rabbit/startrabbit.shEXPOSE 5672EXPOSE 15672EXPOSE 25672EXPOSE 4369EXPOSE 9100EXPOSE 9101EXPOSE 9102EXPOSE 9103EXPOSE 9104EXPOSE 9105CMD /opt/rabbit/startrabbit.sh
server中的erlang.cookie
JHWMKVOYFWWBXWXOYXFQ
server中的rabbitmq.config
[{rabbit, [{loopback_users, []}]}].
server中的startrabbit.sh
#!/bin/bashchown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookiechmod 400 /var/lib/rabbitmq/.erlang.cookieRABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server if [ -z "$CLUSTERED" ]; then# # if not clustered then start it normally as if it is a single server RABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server else if [ -z "$CLUSTER_WITH" -o -z "$CLUSTER_NODENAME" ]; then # If clustered, but cluster with is not specified then again start normally, could be the first server in the # cluster RABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server else RABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server -detached /usr/sbin/rabbitmqctl stop_app if [ -z "$RAM_NODE" ]; then /usr/sbin/rabbitmqctl join_cluster $RABBITMQ_NODENAME@$CLUSTER_WITH else /usr/sbin/rabbitmqctl join_cluster --ram $RABBITMQ_NODENAME@$CLUSTER_WITH fi /usr/sbin/rabbitmqctl start_app # /usr/sbin/rabbitmq-plugins enable rabbitmq_mqtt rabbitmq_stomp rabbitmq_management rabbitmq_management_agent rabbitmq_management_visualiser rabbitmq_federation rabbitmq_federation_management sockjs # Tail to keep the a foreground process active.. #tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log tail -f /etc/hosts fi fi
cluster中的compose.yml
rabbit1: image: mq-server:latest hostname: rabbit1 ports: - "5672:5672" - "15672:15672" environment: - RABBITMQ_DEFAULT_USER=admin - RABBITMQ_DEFAULT_PASS=adminrabbit2: image: mq-server:latest hostname: rabbit2 links: - rabbit1 environment: - CLUSTERED=true - CLUSTER_WITH=rabbit1 - RAM_NODE=true ports: - "5673:5672" - "15673:15672"rabbit3: image: mq-server:latest hostname: rabbit3 links: - rabbit1 - rabbit2 environment: - CLUSTERED=true - CLUSTER_WITH=rabbit1 ports: - "5674:5672" - "15674:15672"
- Docker中实现RabbitMQ集群
- Docker 安装 RabbitMQ 集群
- Docker部署Rabbitmq集群及实现定时消息
- 搭建rabbitmq的docker集群
- Rabbitmq集群及使用keepalived实现rabbitmq高可用性集群
- docker中部署redis集群
- Docker中运行consul集群
- RabbitMQ在linux系统中集群配置
- RabbitMQ 集群
- Rabbitmq集群
- RabbitMQ集群
- RabbitMQ 集群
- RabbitMQ集群
- Docker 集群环境实现的新方式
- Docker 集群环境实现的新方式
- 在Docker中运行Hadoop+Spark集群
- docker容器中搭建kafka集群环境
- [Erlang 0088] RabbitMQ 集群 Disc Node 一点实现细节
- 国际化程序
- 导入kotlin-for-android-developers weather app项目遇到的坑
- 设计模式(04)创建者模式
- app-release-unsigned.apk is not signed
- 使用Eureka, Ribbon, Feign实现REST服务客户端
- Docker中实现RabbitMQ集群
- auto dealer
- 代码块1
- JUnit测试详解
- nyoj42一笔画问题
- Hibernate保存对象时,数据库出现乱码
- jmeter中使用jdbc参数化
- 动态规划--多重背包--hdu2844 coins
- CountDownLatch解析和应用示例