docker进行RocketMq集群部署方式

 更新时间:2024年04月01日 14:15:34   作者:快乐敲代码  
这篇文章主要介绍了docker进行RocketMq集群部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

环境

  • (1)Centos7
  • (2)JDK1.8
  • (3)docker
  • (4)rocketmq 4.8

两台服务器ip

  • A:192.168.5.49
  • B:192.168.5.50

集群模式

1、单节点 :

  • 优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢
  • 缺点:不可靠,如果宕机,会导致服务不可用

2、主从(异步、同步双写) :

  • 优点:同步双写消息不丢失, 异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入
  • 缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker,重启让从节点成为主节点

3、双主:

  • 优点:配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息
  • 缺点: master机器宕机期间,未被消费的消息在机器恢复之前不可消费,实时性会受到影响

4、双主双从,多主多从模式(异步复制)我们这里采用这种

  • 优点:磁盘损坏,消息丢失的非常少,消息实时性不会受影响,Master 宕机后,消费者仍然可以从Slave消费
  • 缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息

5、双主双从,多主多从模式(同步双写)

  • 优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高
  • 缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机

概念

rocketmq分为Name Server和Broker Server

名字服务(Name Server)

名称服务充当路由消息的提供者。

生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。

多个Namesrv实例组成集群,但相互独立,没有信息交换。

是Topic路由注册中心,端口默认为9876

代理服务器(Broker Server)

消息中转角色,负责存储消息、转发消息。

代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。

代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。

端口有三个:

  • listenPort:默认10911,接受客户端连接的监听端口,作为对producer和consumer使用服务的端口号,可以通过配置文件改
  • haListenPort:默认为listenPort + 1,高可用服务监听端口,主要用于slave同master同步
  • fastListenPort:默认为listenPort -2, 主要是fastRemotingServer服务使用,用于VIP通道

部署

1、安装rmqnamesrv

两台的rmqnamesrv都直接运行即可,所有配置都用默认的即可

docker run -d --name rmqnamesrv \
 -v /home/docker/rocketmq/data/namesrv/logs:/home/rocketmq/logs \
 -p 9876:9876 \
 --restart=always \
 apacherocketmq/rocketmq:4.8.0-alpine sh mqnamesrv

2、安装rmqbroker

docker run -d --name rmqbroker \
 -v /home/docker/rocketmq/data/broker/logs:/home/rocketmq/logs \
 --link rmqnamesrv:namesrv \
 --restart=always \
 -e "NAMESRV_ADDR=namesrv:9876" \
 -p 10909:10909 -p 10911:10911 -p 10912:10912 \
 apacherocketmq/rocketmq:4.8.0-alpine \
 sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf

拷贝rmqbroker的配置文件到主机目录

docker cp rmqbroker:/home/rocketmq/rocketmq-4.8.0/conf /home/docker/rocketmq/data/broker/conf

编辑配置文件broker.conf

#切换到刚刚拷贝出来的文件夹下
cd  /home/docker/rocketmq/data/broker/conf
#编辑主节点配置文件
sudo vi broker.conf
#编辑从节点配置文件
sudo vi broker-s.conf

主节点broker.conf内容如下:

# 集群名称,取同一个
brokerClusterName = docker-mq-cluster

# 节点名称,每个主节点取不一样的,另一个主节点我们取broker-b,如果是主从节点名称保持一致
brokerName = broker-a
#brokerName = broker-b

# 主从标识,0为主,其他大于0的为从,从只允许读,主可以读写
brokerId = 0

#未消费的持久化消息清理时间点,默认凌晨4点
deleteWhen = 04

#持久化消息保存周期(单位:小时)
fileReservedTime = 48

#brocker角色,异步主
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole = ASYNC_MASTER

#刷盘方式:异步刷盘
flushDiskType = ASYNC_FLUSH

#节点IP
brokerIP1 = 192.168.5.49
#brokerIP1 = 192.168.5.50

#broker的服务端口
listenPort=10911

#server服务器地址和端口,多个用分号隔开
namesrvAddr=192.168.5.49:9876;192.168.5.50:9876

#延迟消息等级时间,
#这个设置也影响全局的消费重试机制的间隔时间,消费重试机制走的就是延迟消息,这里设置后,第一次重试是在是失败的10s后(从第三个开始 ,DefaultMQPushConsumerImpl源码中setDelayTimeLevel(3 + msg.getReconsumeTimes()),舍去了前两个),第二次是上次失败的30s后,因为消费重试次数是16次(DefaultMQPushConsumerImpl源码默认是16次),而我们30s后面没有设置了,他后面的13次都会按30s间隔去重试
messageDelayLevel = 1s 5s 10s 30s

从节点broker-s.conf内容如下:

# 集群名称,取同一个
brokerClusterName = docker-mq-cluster

# 节点名称,每个主节点取不一样的,另一个主节点我们取broker-b,如果是主从节点名称保持一致
brokerName = broker-a
#brokerName = broker-b

# 主从标识,0为主,其他大于0的为从,从只允许读,主可以读写
brokerId = 1

#未消费的持久化消息清理时间点,默认凌晨4点
deleteWhen = 04

#持久化消息保存周期(单位:小时)
fileReservedTime = 48

#brocker角色,从
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole = SLAVE

#刷盘方式:异步刷盘
flushDiskType = ASYNC_FLUSH

#节点IP
brokerIP1 = 192.168.5.49
#brokerIP1 = 192.168.5.50

#broker的服务端口,和主节点区分开
listenPort=11911

#server服务器地址和端口,多个用分号隔开
namesrvAddr=192.168.5.49:9876;192.168.5.50:9876

#延迟消息等级时间
messageDelayLevel = 1s 5s 10s 30s

删除rmqbroker原容器

#t停止容器
docker stop rmqbroker 

#删除容器
docker rm rmqbroker 

重启启动rmqbroker

启动主节点

docker run -d --name rmqbroker \
 -v /home/docker/rocketmq/data/broker/logs:/home/rocketmq/logs \
 -v /home/docker/rocketmq/data/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \
 --restart=always \
 -p 10909:10909 -p 10911:10911 -p 10912:10912 \
 apacherocketmq/rocketmq:4.8.0-alpine \
 sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf

启动从节点

注意我们的启动命令,-p后面的端口是和主节点不一样的,

从节点和主节点区分开,我们就直接用11909、11911、11912

docker run -d --name rmqbroker-s \
 -v /home/docker/rocketmq/data/broker-s/logs:/home/rocketmq/logs \
 -v /home/docker/rocketmq/data/broker/conf/broker-s.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \
 --restart=always \
 -p 11909:11909 -p 11911:11911 -p 11912:11912 \
 apacherocketmq/rocketmq:4.8.0-alpine \
 sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf

3、启动可视化页面rocketmq-console-ng

在一台服务器安装可视化页面即可

docker run -d -p 8080:8080 --name rocketmq-console-ng \
-v /home/docker/rocketmq/tmp:/tmp \
--restart=always \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.5.49:9876;192.168.5.50:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
styletang/rocketmq-console-ng

结果验证

查看服务端和客户端日志无报错,查看可视化界面

http://192.168.5.49:8080

成功检测到两个服务端,集群状态也正常

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在Docker中安装Elasticsearch7.6.2的教程

    在Docker中安装Elasticsearch7.6.2的教程

    这篇文章主要介绍了在Docker中安装Elasticsearch7.6.2的教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 使用Docker搭建minio的详细图文教程

    使用Docker搭建minio的详细图文教程

    本文介绍了Docker配置镜像源的方法,以及如何在Docker中拉取镜像和创建运行容器,详细说明了使用MinIO创建Bucket、设置AccessKey、安装和配置Cpolar以及SpringBoot集成MinIO的步骤,需要的朋友可以参考下
    2024-10-10
  • centos7更改docker仓库的方法

    centos7更改docker仓库的方法

    这篇文章主要介绍了centos7更改docker仓库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Docker不能绑定静态的外网固定ip的问题及解决办法

    Docker不能绑定静态的外网固定ip的问题及解决办法

    这篇文章主要介绍了Docker不能绑定静态的外网固定ip的问题及解决办法,需要的朋友可以参考下
    2017-01-01
  • Docker 配置阿里云容器服务操作

    Docker 配置阿里云容器服务操作

    这篇文章主要介绍了Docker 配置阿里云容器服务操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker-compose中启动镜像失败的几种解决方法

    docker-compose中启动镜像失败的几种解决方法

    本文主要介绍了docker-compose中启动镜像失败的几种解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 使用Docker开发python Web 应用

    使用Docker开发python Web 应用

    本文给大家详细讲解了如何使用Docker开发python应用,特别是WEB应用的步骤,Docker本质上提供了非常轻量化的VMs,我们可以使用其创建一个高标准隔离并能大大减少失配的开发和产品环境。
    2016-10-10
  • pod调度将 Pod 指派给节点

    pod调度将 Pod 指派给节点

    这篇文章主要为大家介绍了pod调度将Pod指派给节点 示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 使用docker快速搭建Spark集群的方法教程

    使用docker快速搭建Spark集群的方法教程

    通过使用 Docker,可以快速的在本地搭建一套 Spark 环境,方便大家开发 Spark 应用,或者扩展到生产环境。下面这篇文章主要给大家介绍了使用docker快速搭建Spark集群的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • 云原生Docker容器自定义DNS解析

    云原生Docker容器自定义DNS解析

    Docker没有为每个容器专门定制镜像,那么怎么自定义配置容器的DNS配置呢?这篇文章主要给大家介绍了关于云原生Docker容器自定义DNS的相关资料,需要的朋友可以参考下
    2023-02-02

最新评论