在一台服务器上用docker-compose双主双从的rocketmq消息队列----rocketmq双主双从模式
rocketmq消息队列双主双从docker-compose搭建
1.首先准备一下机器 10.4.2.10
2.创建一下目录
mkdir rocketmq
3.创建挂载目录
[root@node1 rabbitmq]# mkdir -p ./rocketmq/logs/broker-a [root@node1 rabbitmq]# mkdir -p ./rocketmq/logs/broker-a-s [root@node1 rabbitmq]# mkdir -p ./rocketmq/logs/broker-b [root@node1 rabbitmq]# mkdir -p ./rocketmq/logs/broker-b-s [root@node1 rabbitmq]# mkdir -p ./rocketmq/logs/nameserver-a [root@node1 rabbitmq]# mkdir -p ./rocketmq/logs/nameserver-b [root@node1 rabbitmq]# mkdir -p ./rocketmq/store/broker-a [root@node1 rabbitmq]# mkdir -p ./rocketmq/store/broker-a-s [root@node1 rabbitmq]# mkdir -p ./rocketmq/store/broker-b [root@node1 rabbitmq]# mkdir -p ./rocketmq/store/broker-b-s [root@node1 rabbitmq]# mkdir -p ./rocketmq/store/nameserver-a [root@node1 rabbitmq]# mkdir -p ./rocketmq/store/nameserver-b
4.拉取rocketmq的镜像 docker pull apache/rocketmq:5.1.4
5.编写broker的配置文件
(1)vim broker-a.conf
brokerClusterName = rocketmq-cluster brokerName = broker-a
# 0表示broker master 非0表示 broker slaver brokerId = 0
# brokerIP1 当前broker监听的IP brokerIP1 = rmqbroker-a
# brokerIP2 存在broker主从时,在broker主节点上配置了brokerIP2的话,broker从节点会连接主节点配置的brokerIP2来同步 # brokerIP2 = 192.168.111.129
deleteWhen = 04 fileReservedTime = 48
namesrvAddr = rmqnamesrv-a:9876;rmqnamesrv-b:9876
# 是否能够自动创建topic autoCreateTopicEnable = true
#Broker 对外服务的监听端口, 默认10911 # listenPort = 10911
#Broker角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole = ASYNC_MASTER
#刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType = ASYNC_FLUSH
(2)vim broker-a-s.conf
brokerClusterName = rocketmq-cluster brokerName = broker-a
# 0表示broker master 非0表示 broker slaver brokerId = 1
brokerIP1 = rmqbroker-a-s
deleteWhen = 04 fileReservedTime = 48
namesrvAddr = rmqnamesrv-a:9876;rmqnamesrv-b:9876
# autoCreateTopicEnable=true
#Broker 对外服务的监听端口, #listenPort = 10912
#Broker角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole = SLAVE
#刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType = ASYNC_FLUSH
(3)vim broker-b.conf
brokerClusterName = rocketmq-cluster brokerName = broker-b
# 0表示broker master 非0表示 broker slaver brokerId = 0
# brokerIP1 当前broker监听的IP brokerIP1 = rmqbroker-b
# brokerIP2 存在broker主从时,在broker主节点上配置了brokerIP2的话,broker从节点会连接主节点配置的brokerIP2来同步 # brokerIP2 = 192.168.111.129
deleteWhen = 04 fileReservedTime = 48
namesrvAddr = rmqnamesrv-a:9876;rmqnamesrv-b:9876
# 是否能够自动创建topic autoCreateTopicEnable = true
#Broker 对外服务的监听端口, 默认10911 # listenPort = 10913
#Broker角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole = ASYNC_MASTER
#刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType = ASYNC_FLUSH
(4)vim broker-b-s.conf
brokerClusterName = rocketmq-cluster brokerName = broker-b
# 0表示broker master 非0表示 broker slaver brokerId = 1
brokerIP1 = rmqbroker-b-s
deleteWhen = 04 fileReservedTime = 48
namesrvAddr = rmqnamesrv-a:9876;rmqnamesrv-b:9876
# 是否能够自动创建topic autoCreateTopicEnable = true
#Broker 对外服务的监听端口, # listenPort = 10914
#Broker角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole = SLAVE
#刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType = ASYNC_FLUSH
6.编写docker-compose.yml文件
vim docker-compose.yml
version: '3.5' services: rmqnamesrv-a: image: apache/rocketmq:5.1.4 container_name: rmqnamesrv-a1 ports: - 9876:9876 volumes: - ./rocketmq/logs/nameserver-a:/root/logs - ./rocketmq/store/nameserver-a:/root/store command: sh mqnamesrv networks: rmq: aliases: - rmqnamesrv-a
rmqnamesrv-b: image: apache/rocketmq:5.1.4 container_name: rmqnamesrv-b1 ports: - 9877:9876 volumes: - ./rocketmq/store/nameserver-b:/root/store - ./rocketmq/logs/nameserver-b:/root/logs command: sh mqnamesrv networks: rmq: aliases: - rmqnamesrv-b
rmqbroker-a: image: apache/rocketmq:5.1.4 container_name: rmqbroker-a2 ports: - 10911:10911 volumes: - ./rocketmq/logs/broker-a:/root/logs - ./rocketmq/store/broker-a:/root/store - ./broker-a.conf:/opt/rocketmq-4.4.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-a:9876" JAVA_OPTS: " -Duser.home=/opt" JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m" command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-a
rmqbroker-a-s: image: apache/rocketmq:5.1.4 container_name: rmqbroker-a-s1 ports: - 10912:10911 volumes: - ./rocketmq/logs/broker-a-s:/root/logs - ./rocketmq/store/broker-a-s:/root/store - ./broker-a-s.conf:/opt/rocketmq-4.4.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-a:9876" JAVA_OPTS: " -Duser.home=/opt" JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m" command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-a-s
rmqbroker-b: image: apache/rocketmq:5.1.4 container_name: rmqbroker-b1 ports: - 10913:10911 volumes: - ./rocketmq/logs/broker-b:/root/logs - ./rocketmq/store/broker-b:/root/store - ./broker-b.conf:/opt/rocketmq-4.4.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-a:9876" JAVA_OPTS: " -Duser.home=/opt" JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m" command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-b
rmqbroker-b-s: image: apache/rocketmq:5.1.4 container_name: rmqbroker-b-s2 ports: - 10914:10911 volumes: - ./rocketmq/logs/broker-b-s:/root/logs - ./rocketmq/store/broker-b-s:/root/store - ./broker-b-s.conf:/opt/rocketmq-4.4.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-a:9876" JAVA_OPTS: " -Duser.home=/opt" JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m" command: sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-b-s
rmqconsole: image: styletang/rocketmq-console-ng:latest container_name: rmqconsole ports: - 8080:8080 environment: JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false networks: rmq: aliases: - rmqconsole
# 自定义网络 networks: rmq: name: rmq driver: bridge
7.启动docker-compose up -d
8.查看服务状态 docker ps |grep rocketmq
9.页面访问:10.4.2.10:8080
10.到了这里,就搭建完成了。恭喜!!!!!
什么是消息队列rocketmq????
RocketMQ 是一个开源的分布式消息队列系统,最初由阿里巴巴集团开发并开源。它旨在提供高可靠性、高吞吐量和可扩展性的消息传递解决方案。
消息队列是一种用于在应用程序之间传递异步消息的中间件。它基本上是一个存储和转发消息的系统,可以在不同的应用程序之间解耦消息的发送者和接收者。消息队列可以提供以下关键功能:
异步通信:消息发送者可以将消息发送到消息队列,而不需要等待消息的接收者立即处理。这种方式实现了异步通信,提高了系统的吞吐量和响应性能。
解耦应用程序:通过使用消息队列,发送者和接收者可以彼此独立地演化和扩展,而不会直接依赖于彼此的存在。这种解耦性可以使应用程序更加灵活和可维护。
可靠传输:消息队列通常会提供可靠的消息传输机制,确保消息在发送过程中不会丢失,并且可以在需要时进行重试或恢复。
消息持久化:消息队列通常会将消息持久化到磁盘,以防止消息丢失。这样即使在消息发送后,如果接收者不可用或离线,消息仍然可以被保留并在接收者重新上线后被处理。
RocketMQ 是一个分布式的消息队列系统,它具有以下特点:
高吞吐量和低延迟:RocketMQ 被设计为高性能的消息队列系统,具有高吞吐量和低延迟的特点。
可伸缩性:RocketMQ 可以通过增加更多的 Broker 实例来实现横向扩展,从而提高系统的容量和吞吐量。
高可靠性:RocketMQ 支持消息的持久化存储和复制,以确保消息不会丢失,并且可以通过配置来提供容错和故障恢复机制。
消息顺序保证:RocketMQ 可以保证按照发送顺序传递消息,这在某些场景下是非常重要的,比如订单处理。
提供丰富的特性:RocketMQ 提供了许多高级特性,如事务消息、定时消息、消息过滤和广播模式等。
总之,RocketMQ 是一个强大的分布式消息队列系统,用于在大规模的分布式系统中实现高可靠、高吞吐量的消息传递。它在许多场景下被广泛应用,如电商、金融、物流和互联网领域等。
rocketmq消息队列中的broker的作用?????
在 RocketMQ 中,Broker 是消息队列的核心组件之一,它在消息的存储、转发和管理方面起着重要的作用。下面是 Broker 的几个主要作用:
消息存储:Broker 负责将消息持久化到磁盘,并提供高效的读写操作。当生产者发送消息到 Broker 时,Broker 将消息写入磁盘以确保消息的持久性。消费者从 Broker 拉取消息时,Broker 从磁盘读取消息并将其传递给消费者。
消息转发:Broker 作为中间件,负责接收来自生产者的消息并将其转发给相应的消费者。它根据消息的主题(Topic)和标签(Tag)进行路由,确保消息被正确地传递给订阅了相应主题和标签的消费者。
消息管理:Broker 管理消息的元数据信息,包括消息的偏移量、消费进度、消费者组等。它维护消息的存储结构,支持消息的查询、检索和删除等操作。Broker 还负责处理消息的重试、消息的顺序传递和消息的过滤等高级特性。
集群管理:如果使用了 RocketMQ 的集群模式,Broker 可以组成一个 Broker 集群,共同承担消息的存储和转发工作。Broker 集群采用主从架构,其中一个 Broker 作为主节点(Master),负责写入消息,其他 Broker 作为从节点(Slave),负责数据的复制和读取,以提高系统的可用性和容错性。
故障恢复:Broker 可以通过数据复制和选举机制来实现故障恢复。当主节点(Master)出现故障时,从节点(Slave)可以自动接管主节点的角色,确保消息的可靠性和连续性。
总之,Broker 在 RocketMQ 消息队列中扮演着关键角色,负责消息的存储、转发和管理。它是整个消息队列系统的核心组件,支持高吞吐量、高可靠性和强大的消息处理能力。
3.双主双从的rocketmq的消息队列的作用?????
双主双从(Dual-Master Replication)是 RocketMQ 的一种高可用性部署模式,通过配置两个主节点和两个从节点来实现消息队列的冗余和故障容错。下面是双主双从模式的主要作用:
提高可用性:通过使用双主双从模式,RocketMQ 在发生故障时可以实现快速的故障切换和自动恢复。当一个主节点出现故障时,另一个主节点可以立即接管工作,确保消息队列的持续可用性。
提供数据冗余:双主双从模式使用主节点和从节点的复制机制,将消息数据复制到多个节点上。这样即使一个节点发生故障,消息数据仍然可以从其他节点中获取,不会丢失。
增加吞吐量和扩展性:通过配置多个主节点和多个从节点,RocketMQ 可以提供更高的消息处理能力和吞吐量。当消息负载增加时,可以通过添加更多的节点来扩展系统的容量。
增强数据一致性:双主双从模式使用主节点和从节点之间的数据同步机制来保持数据的一致性。主节点将消息写入磁盘后,会将消息的变更操作同步到从节点,从节点在接收到变更操作后更新自身的数据。这样可以确保消息在主节点和从节点之间的一致性。
需要注意的是,双主双从模式增加了系统的复杂性和资源消耗。由于需要维护多个节点之间的数据同步和复制,需要更多的网络带宽和存储资源。因此,在选择双主双从模式时需要权衡系统的可用性和成本之间的关系,并根据实际需求进行配置。
总之,双主双从模式是 RocketMQ 提供的一种高可用性部署模式,通过配置多个主节点和从节点来提高系统的可用性、数据冗余和吞吐量。它适用于对消息队列的高可靠性和高性能有较高要求的场景。