• docker- compose部署rocketmq双主双从架构


    部署文档

    两台主机搭建多master多slave异步复制模式的集群

    每台主机上一个nameserver,两个broker一主一从

    主从部署服务器规划

    服务器部署的应用broker主从规划物理资源存储目录
    10.100.232.171namesrv 、broker、consolemaster-a,slave-b/opt/docker/rocketmq
    10.100.232.172namesrv、brokermaster-b,slave-a/opt/docker/rocketmq

    10.100.232.171 的 broker规划:

    brokerName主从broker对外服务监听端口需要暴露端口
    amaster1091110911,10912,10909
    bslave1092110921,10922,10919


    10.100.232.172 的 broker规划:

    brokerName主从broker对外服务监听端口需要暴露端口
    aslave1091110911,10912,10909
    bmaster1092110921,10922,10919

    两台机器都拉取镜像

    docker pull rocketmqinc/rocketmq

    10.100.232.171机器:

    创建目录用于映射

    1. #nameserver映射目录配置
    2. mkdir -p /opt/docker/rocketmq/nameserver/logs
    3. mkdir -p /opt/docker/rocketmq/nameserver/store
    4. #broker-a的master映射配置
    5. mkdir -p /opt/docker/rocketmq/broker/master-a/logs
    6. mkdir -p /opt/docker/rocketmq/broker/master-a/store
    7. mkdir -p /opt/docker/rocketmq/broker/master-a/conf
    8. #broker-b的slave映射配置
    9. mkdir -p /opt/docker/rocketmq/broker/slave-b/logs
    10. mkdir -p /opt/docker/rocketmq/broker/slave-b/store
    11. mkdir -p /opt/docker/rocketmq/broker/slave-b/conf

    创建rmqbroker配置文件

    需要注意的点:

    1. brokerIP1属性需要根据具体情况修改,由于是docker部署,使用的是的docker的网络,所以这里设置为宿主机内网ip。

    2. namesrvAddr配置为nameserver的IP和端口,这里也设置为宿主机的内网ip和映射端口,多个nameserver要用分号隔开。

    3. istenPort是对外服务的监听端口,会影响到vip端口和主从同步端口,vip端口=listenPort-2,主从同步端口=listenPort+1,构建broker时需要将容器的listenPort映射为宿主机相同的端口,vip端口和主从同步端口也要和容器的端口同步。例如此时,listenPort=10911,则构建broker容器的时候要添加以下参数

      -p 10911:10911
      -p 10912:10912
      -p 10909:10909
    4. 从节点需要设置

      brokerId=1 #数字往后类推
      brokerRole=SLAVE

      需要改变

         listenPort 避免端口和master冲突

         brokerName 同个集群中broker的名称不能相同

    rmqbroker-master-a,修改master-a的配置文件

    1. cd /opt/docker/rocketmq/broker/master-a/conf
    2. vim broker.conf

    master-a的配置文件内容

    1. brokerClusterName=rocketmq-cluster
    2. # broker名字,注意此处不同的配置文件填写的不一样
    3. brokerName=a
    4. # 0 表示Master,>0 表示Slave
    5. brokerId=0
    6. # 多网卡配置,不配置默认为内网,让mq只能内网访问
    7. brokerIP1 = 10.100.232.171
    8. # nameServer地址,分号分割
    9. namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
    10. # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
    11. defaultTopicQueueNums=4
    12. # 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭
    13. autoCreateTopicEnable=true
    14. # 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭
    15. autoCreateSubscriptionGroup=true
    16. # Broker 对外服务的监听端口
    17. listenPort=10911
    18. # 删除文件时间点,默认是凌晨4点
    19. deleteWhen=04
    20. # 文件保留时间,默认是48小时
    21. fileReservedTime=48
    22. # commitLog每个文件的大小默认1G
    23. mapedFileSizeCommitLog=1073741824
    24. # ConsumeQueue每个文件默认存30w条, 根据业务情况调整
    25. mapedFileSizeConsumeQueue=30000
    26. # destroyMapedFileIntervalForcibly=12000
    27. # redeleteHangedFileInterval=12000
    28. # 检测物理文件磁盘空间
    29. diskMaxUsedSpaceRatio=88
    30. # 限制的消息大小
    31. maxMessageSize=65536
    32. # flushCommitLogLeastPages=4
    33. # flushConsumeQueueLeastPages=2
    34. # flushCommitLogThoroughInterval=10000
    35. # flushConsumeQueueThoroughInterval=60000
    36. # Broker的角色
    37. # -ASYNC_MASTER 异步复制Master
    38. # -SYNC_MASTER 同步双写Master
    39. # -SLAVE
    40. brokerRole=ASYNC_MASTER
    41. # 刷盘方式
    42. # - ASYNC_FLUSH 异步刷盘
    43. # - SYNC_FLUSH 同步刷盘
    44. flushDiskType=SYNC_FLUSH
    45. # checkTransactionMessageEnable=false
    46. # 发消息线程池数量
    47. # sendMessageTreadPoolNums=128
    48. # 拉消息线程池数量
    49. # pullMessageTreadPoolNums=128
    50. # lushDiskType=ASYNC_FLUSH

    rmqbroker-slave-b配置文件修改

    1. cd /opt/docker/rocketmq/broker/slave-b/conf
    2. vim broker.conf

    slave-b配置文件

    1. brokerClusterName=rocketmq-cluster
    2. # broker名字,注意此处不同的配置文件填写的不一样
    3. brokerName=b
    4. # 0 表示Master,>0 表示Slave
    5. brokerId=1
    6. # 多网卡配置,不配置默认为内网,让mq只能内网访问
    7. brokerIP1 = 10.100.232.171
    8. # nameServer地址,分号分割
    9. namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
    10. # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
    11. defaultTopicQueueNums=4
    12. # 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭
    13. autoCreateTopicEnable=true
    14. # 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭
    15. autoCreateSubscriptionGroup=true
    16. # Broker 对外服务的监听端口
    17. listenPort=10921
    18. # 删除文件时间点,默认是凌晨4点
    19. deleteWhen=04
    20. # 文件保留时间,默认是48小时
    21. fileReservedTime=48
    22. # commitLog每个文件的大小默认1G
    23. mapedFileSizeCommitLog=1073741824
    24. # ConsumeQueue每个文件默认存30w条, 根据业务情况调整
    25. mapedFileSizeConsumeQueue=30000
    26. # destroyMapedFileIntervalForcibly=12000
    27. # redeleteHangedFileInterval=12000
    28. # 检测物理文件磁盘空间
    29. diskMaxUsedSpaceRatio=88
    30. # 限制的消息大小
    31. maxMessageSize=65536
    32. # flushCommitLogLeastPages=4
    33. # flushConsumeQueueLeastPages=2
    34. # flushCommitLogThoroughInterval=10000
    35. # flushConsumeQueueThoroughInterval=60000
    36. # Broker的角色
    37. # -ASYNC_MASTER 异步复制Master
    38. # -SYNC_MASTER 同步双写Master
    39. # -SLAVE
    40. brokerRole=SLAVE
    41. # 刷盘方式
    42. # - ASYNC_FLUSH 异步刷盘
    43. # - SYNC_FLUSH 同步刷盘
    44. flushDiskType=SYNC_FLUSH
    45. # checkTransactionMessageEnable=false
    46. # 发消息线程池数量
    47. # sendMessageTreadPoolNums=128
    48. # 拉消息线程池数量
    49. # pullMessageTreadPoolNums=128
    50. # lushDiskType=ASYNC_FLUSH

    创建docker-compose.yml

    1. cd /opt/docker/rocketmq
    2. vim docker-compose.yml

    文件内容

    1. version: '3.5'
    2. networks:
    3. rmq:
    4. name: rmq
    5. driver: bridge
    6. services:
    7. rmqnamesrv:
    8. image: rocketmqinc/rocketmq
    9. container_name: rmqnamesrv
    10. ports:
    11. - 9876:9876
    12. volumes:
    13. - /opt/docker/rocketmq/nameserver/logs:/home/rocketmq/logs
    14. - /opt/docker/rocketmq/nameserver/store:/home/rocketmq/store
    15. restart: always
    16. command: sh mqnamesrv
    17. networks:
    18. rmq:
    19. aliases:
    20. - rmqnamesrv
    21. rmqbroker-master-a:
    22. image: rocketmqinc/rocketmq
    23. container_name: rmqbroker-master-a
    24. ports:
    25. - 10911:10911
    26. - 10912:10912
    27. - 10909:10909
    28. volumes:
    29. - /opt/docker/rocketmq/broker/master-a/logs:/home/rocketmq/logs
    30. - /opt/docker/rocketmq/broker/master-a/store:/home/rocketmq/store
    31. - /opt/docker/rocketmq/broker/master-a/conf/broker.conf:/home/rocketmq/conf/broker.conf
    32. restart: always
    33. environment:
    34. JAVA_OPTS: "-Duser.home=/opt"
    35. JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    36. command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
    37. links:
    38. - rmqnamesrv:rmqnamesrv
    39. networks:
    40. rmq:
    41. aliases:
    42. - rmqbroker-master-a
    43. rmqbroker-slave-b:
    44. image: rocketmqinc/rocketmq
    45. container_name: rmqbroker-slave-b
    46. ports:
    47. - 10921:10921
    48. - 10922:10922
    49. - 10919:10919
    50. volumes:
    51. - /opt/docker/rocketmq/broker/slave-b/logs:/home/rocketmq/logs
    52. - /opt/docker/rocketmq/broker/slave-b/store:/home/rocketmq/store
    53. - /opt/docker/rocketmq/broker/slave-b/conf/broker.conf:/home/rocketmq/conf/broker.conf
    54. restart: always
    55. environment:
    56. JAVA_OPTS: "-Duser.home=/opt"
    57. JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    58. command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
    59. links:
    60. - rmqnamesrv:rmqnamesrv
    61. networks:
    62. rmq:
    63. aliases:
    64. - rmqbroker-slave-b
    65. rmqconsole:
    66. image: styletang/rocketmq-console-ng
    67. container_name: rmqconsole
    68. ports:
    69. - 9101:8080
    70. restart: always
    71. environment:
    72. JAVA_OPTS: -Drocketmq.namesrv.addr=10.100.232.171:9876;10.100.232.172:9876
    73. -Dcom.rocketmq.sendMessageWithVIPChannel=false
    74. -Duser.timezone='Asia/Shanghai'
    75. networks:
    76. rmq:
    77. aliases:
    78. - rmqconsole

    构建容器

    docker-compose -f docker-compose.yml up -d

    10.100.232.172机器

    创建目录用于映射

    1. #nameserver映射目录配置
    2. mkdir -p /opt/docker/rocketmq/nameserver/logs
    3. mkdir -p /opt/docker/rocketmq/nameserver/store
    4. #broker-b的master映射配置
    5. mkdir -p /opt/docker/rocketmq/broker/master-b/logs
    6. mkdir -p /opt/docker/rocketmq/broker/master-b/store
    7. mkdir -p /opt/docker/rocketmq/broker/master-b/conf
    8. #broker-a的slave映射配置
    9. mkdir -p /opt/docker/rocketmq/broker/slave-a/logs
    10. mkdir -p /opt/docker/rocketmq/broker/slave-a/store
    11. mkdir -p /opt/docker/rocketmq/broker/slave-a/conf

    rmqbroker-master-b,修改master-b的配置文件

    1. cd /opt/docker/rocketmq/broker/master-b/conf
    2. vim broker.conf

    master-b的broker配置文件内容

    1. brokerClusterName=rocketmq-cluster
    2. # broker名字,注意此处不同的配置文件填写的不一样
    3. brokerName=b
    4. # 0 表示Master,>0 表示Slave
    5. brokerId=0
    6. # 多网卡配置,不配置默认为内网,让mq只能内网访问
    7. brokerIP1 = 10.100.232.172
    8. # nameServer地址,分号分割
    9. namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
    10. # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
    11. defaultTopicQueueNums=4
    12. # 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭
    13. autoCreateTopicEnable=true
    14. # 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭
    15. autoCreateSubscriptionGroup=true
    16. # Broker 对外服务的监听端口
    17. listenPort=10921
    18. # 删除文件时间点,默认是凌晨4点
    19. deleteWhen=04
    20. # 文件保留时间,默认是48小时
    21. fileReservedTime=48
    22. # commitLog每个文件的大小默认1G
    23. mapedFileSizeCommitLog=1073741824
    24. # ConsumeQueue每个文件默认存30w条, 根据业务情况调整
    25. mapedFileSizeConsumeQueue=30000
    26. # destroyMapedFileIntervalForcibly=12000
    27. # redeleteHangedFileInterval=12000
    28. # 检测物理文件磁盘空间
    29. diskMaxUsedSpaceRatio=88
    30. # 限制的消息大小
    31. maxMessageSize=65536
    32. # flushCommitLogLeastPages=4
    33. # flushConsumeQueueLeastPages=2
    34. # flushCommitLogThoroughInterval=10000
    35. # flushConsumeQueueThoroughInterval=60000
    36. # Broker的角色
    37. # -ASYNC_MASTER 异步复制Master
    38. # -SYNC_MASTER 同步双写Master
    39. # -SLAVE
    40. brokerRole=ASYNC_MASTER
    41. # 刷盘方式
    42. # - ASYNC_FLUSH 异步刷盘
    43. # - SYNC_FLUSH 同步刷盘
    44. flushDiskType=SYNC_FLUSH
    45. # checkTransactionMessageEnable=false
    46. # 发消息线程池数量
    47. # sendMessageTreadPoolNums=128
    48. # 拉消息线程池数量
    49. # pullMessageTreadPoolNums=128
    50. # lushDiskType=ASYNC_FLUSH

    rmqbroker-slave-a配置文件修改

    1. cd /opt/docker/rocketmq/broker/slave-a/conf
    2. vim broker.conf

    slave-a配置文件

    1. brokerClusterName=rocketmq-cluster
    2. # broker名字,注意此处不同的配置文件填写的不一样
    3. brokerName=a
    4. # 0 表示Master,>0 表示Slave
    5. brokerId=1
    6. # 多网卡配置,不配置默认为内网,让mq只能内网访问
    7. brokerIP1 = 10.100.232.172
    8. # nameServer地址,分号分割
    9. namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
    10. # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
    11. defaultTopicQueueNums=4
    12. # 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭
    13. autoCreateTopicEnable=true
    14. # 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭
    15. autoCreateSubscriptionGroup=true
    16. # Broker 对外服务的监听端口
    17. listenPort=10911
    18. # 删除文件时间点,默认是凌晨4点
    19. deleteWhen=04
    20. # 文件保留时间,默认是48小时
    21. fileReservedTime=48
    22. # commitLog每个文件的大小默认1G
    23. mapedFileSizeCommitLog=1073741824
    24. # ConsumeQueue每个文件默认存30w条, 根据业务情况调整
    25. mapedFileSizeConsumeQueue=30000
    26. # destroyMapedFileIntervalForcibly=12000
    27. # redeleteHangedFileInterval=12000
    28. # 检测物理文件磁盘空间
    29. diskMaxUsedSpaceRatio=88
    30. # 限制的消息大小
    31. maxMessageSize=65536
    32. # flushCommitLogLeastPages=4
    33. # flushConsumeQueueLeastPages=2
    34. # flushCommitLogThoroughInterval=10000
    35. # flushConsumeQueueThoroughInterval=60000
    36. # Broker的角色
    37. # -ASYNC_MASTER 异步复制Master
    38. # -SYNC_MASTER 同步双写Master
    39. # -SLAVE
    40. brokerRole=SLAVE
    41. # 刷盘方式
    42. # - ASYNC_FLUSH 异步刷盘
    43. # - SYNC_FLUSH 同步刷盘
    44. flushDiskType=SYNC_FLUSH
    45. # checkTransactionMessageEnable=false
    46. # 发消息线程池数量
    47. # sendMessageTreadPoolNums=128
    48. # 拉消息线程池数量
    49. # pullMessageTreadPoolNums=128
    50. # lushDiskType=ASYNC_FLUSH

    创建docker-compose.yml

    1. cd /opt/docker/rocketmq
    2. vim docker-compose.yml
    1. version: '3.5'
    2. networks:
    3. rmq:
    4. name: rmq
    5. driver: bridge
    6. services:
    7. rmqnamesrv:
    8. image: rocketmqinc/rocketmq
    9. container_name: rmqnamesrv
    10. ports:
    11. - 9876:9876
    12. volumes:
    13. - /opt/docker/rocketmq/nameserver/logs:/home/rocketmq/logs
    14. - /opt/docker/rocketmq/nameserver/store:/home/rocketmq/store
    15. restart: always
    16. command: sh mqnamesrv
    17. networks:
    18. rmq:
    19. aliases:
    20. - rmqnamesrv
    21. rmqbroker-master-b:
    22. image: rocketmqinc/rocketmq
    23. container_name: rmqbroker-master-b
    24. ports:
    25. - 10921:10921
    26. - 10922:10922
    27. - 10919:10919
    28. volumes:
    29. - /opt/docker/rocketmq/broker/master-b/logs:/home/rocketmq/logs
    30. - /opt/docker/rocketmq/broker/master-b/store:/home/rocketmq/store
    31. - /opt/docker/rocketmq/broker/master-b/conf/broker.conf:/home/rocketmq/conf/broker.conf
    32. restart: always
    33. environment:
    34. JAVA_OPTS: "-Duser.home=/opt"
    35. JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    36. command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
    37. links:
    38. - rmqnamesrv:rmqnamesrv
    39. networks:
    40. rmq:
    41. aliases:
    42. - rmqbroker-master-a
    43. rmqbroker-slave-a:
    44. image: rocketmqinc/rocketmq
    45. container_name: rmqbroker-slave-a
    46. ports:
    47. - 10911:10911
    48. - 10912:10912
    49. - 10909:10909
    50. volumes:
    51. - /opt/docker/rocketmq/broker/slave-a/logs:/home/rocketmq/logs
    52. - /opt/docker/rocketmq/broker/slave-a/store:/home/rocketmq/store
    53. - /opt/docker/rocketmq/broker/slave-a/conf/broker.conf:/home/rocketmq/conf/broker.conf
    54. restart: always
    55. environment:
    56. JAVA_OPTS: "-Duser.home=/opt"
    57. JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    58. command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
    59. links:
    60. - rmqnamesrv:rmqnamesrv
    61. networks:
    62. rmq:
    63. aliases:
    64. - rmqbroker-slave-a

    构建容器

    docker-compose -f docker-compose.yml up -d

    进入docker容器命令

    docker exec -it 容器id /bin/bash 

    java服务配置文件

    1. rocketmq:
    2. name-server: 10.100.232.171:9876;10.100.232.172:9876

    到此结束

    下面是浏览器访问控制台时的访问

    自己去试试吧

  • 相关阅读:
    Qt+QtWebApp开发笔记(五):http服务器html中使用json触发ajax与后台交互实现数据更新传递
    缓存读写淘汰算法W-TinyLFU算法
    深入理解Java IO流: 包括字节流和字符流的用法、文件读写实践
    VBA_MF系列技术资料1-192
    STM32——端口复用与重映射概述与配置(HAL库)
    Flutter经验整理
    【Python】使用Shell通配符来匹配字符串
    【阿旭机器学习实战】【28】自己动手写一个单词拼写检查器---基于贝叶斯公式
    MFC中嵌入显示opencv窗口
    Nginx基本知识
  • 原文地址:https://blog.csdn.net/qq_38138069/article/details/126184349