re查询镜像
1、docker search rocketmq
查找mq 使用最多的版本 stars 105B8743.png
image.png
拉取镜像

2、docker pull rocketmqinc/rocketmq 【看网上当时用此版本的人较多】
docker pull foxiswho/rocketmq:4.7.0
image.png

创建namesrv数据存储路径

  1. mkdir -p /docker/rocketmq/data/namesrv/logs /docker/rocketmq/data/namesrv/store

构建namesrv容器

-Duser.timezone=’Asia/Shangha

  1. docker run -d --restart=always --name mqnamesrv -p 9876:9876 -v /docker/rocketmq/data/namesrv/logs:/root/logs -v /docker/rocketmq/data/namesrv/store:/root/store -e "MAX_POSSIBLE_HEAP=100000000 -Duser.timezone='Asia/Shanghai'" foxiswho/rocketmq:4.7.0 sh mqnamesrv

image.png
创建broker数据存储路径

  1. mkdir -p /docker/rocketmq/data/broker/logs /docker/rocketmq/data/broker/store /docker/rocketmq/conf

vi /docker/rocketmq/conf/broker.conf

  1. #所属集群名称,如果节点较多可以配置多个
  2. brokerClusterName = cluster
  3. #broker名称,masterslave使用相同的名称,表明他们的主从关系
  4. brokerName = broker-a
  5. #0表示Master,大于0表示不同的slave
  6. brokerId = 0
  7. #表示几点做消息删除动作,默认是凌晨4
  8. deleteWhen = 04
  9. #在磁盘上保留消息的时长,单位是小时
  10. fileReservedTime = 48
  11. #有三个值:SYNC_MASTERASYNC_MASTERSLAVE;同步和异步表示MasterSlave之间同步数据的机制;
  12. brokerRole = SYNC_MASTER
  13. #刷盘策略,取值为:ASYNC_FLUSHSYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
  14. flushDiskType = ASYNC_FLUSH
  15. # 设置broker节点所在服务器的ip地址 如果不设置,就是内网ip
  16. brokerIP1 = 172.29.253.146
  17. brokerIP2 = 172.29.253.146
  18. #nameServer地址,分号分割
  19. namesrvAddr = 172.29.253.146:9876
  20. # 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 falsefalsefalse
  21. autoCreateTopicEnable = true
  22. # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
  23. autoCreateSubscriptionGroup = true
  24. #Broker 对外服务的监听端口
  25. listenPort=10911

  1. #所属集群名称,如果节点较多可以配置多个
  2. brokerClusterName = cluster
  3. #broker名称,masterslave使用相同的名称,表明他们的主从关系
  4. brokerName = broker-a
  5. #0表示Master,大于0表示不同的slave
  6. brokerId = 1
  7. #表示几点做消息删除动作,默认是凌晨4
  8. deleteWhen = 04
  9. #在磁盘上保留消息的时长,单位是小时
  10. fileReservedTime = 48
  11. #有三个值:SYNC_MASTERASYNC_MASTERSLAVE;同步和异步表示MasterSlave之间同步数据的机制;
  12. brokerRole = SLAVE
  13. #刷盘策略,取值为:ASYNC_FLUSHSYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
  14. flushDiskType = ASYNC_FLUSH
  15. # 设置broker节点所在服务器的ip地址 如果不设置,就是内网ip
  16. brokerIP1 = 172.29.255.209
  17. #nameServer地址,分号分割
  18. namesrvAddr = 172.29.253.146:9876
  19. # 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 falsefalsefalse
  20. autoCreateTopicEnable = true
  21. # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
  22. autoCreateSubscriptionGroup = true
  23. #Broker 对外服务的监听端口
  24. listenPort=10911

构建broker容器

  1. docker run -d --restart=always --name mqbroker -p 10911:10911 -p 10909:10909 -p 10912:10912 -v /docker/rocketmq/data/broker/logs:/root/logs -v /docker/rocketmq/data/broker/store:/root/store -v /docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf -e "NAMESRV_ADDR=172.29.248.162:9876;" -e "MAX_POSSIBLE_HEAP=200000000 -Duser.timezone='Asia/Shanghai'" foxiswho/rocketmq:4.7.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

image.png

构建rockermq-console容器

  1. docker run -d --restart=always --name mqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.19.54.62:9876;172.19.53.163:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Duser.timezone='Asia/Shanghai'" -p 9999:8080 styletang/rocketmq-console-ng

image.png
https://blog.csdn.net/ming19951224/article/details/109063041


单节点
配置简单,同步刷盘消息不会丢失。
缺点:主节点挂掉 业务停止

多master
性能高,配置简单,单个 Master 宕机或重启维护对应用无影响
缺点: master宕机后 消息在人工干预前 消息无法消费

双主 双从 (异步复制)

  • 优点: 性能高与 同步复制
  • 缺点: master宕机后,消息未及时同步 消息可能会丢失

双主 双从 (同步复制)
优点:可用性高
缺点: 性能低于 异步复制10%

Dledger 集群模式

新的多副本架构首先需要解决自动故障转移的问题,本质上来说问题关键点在于 Broker 如何自动推选主节点。