• Rocketmq的集群搭建


    由于云服务资源缺少,本教程居于单机环境下搭建集群

    1.必须有jdk1.8的环境

    一、下载RocketMQ4.9.4

    RocketMQ运行版本下载地址:https://dlcdn.apache.org/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip

     RocketMQ源码版本下载地址:https://dlcdn.apache.org/rocketmq/4.9.4/rocketmq-all-4.9.4-source-release.zip

    2.快速安装RocketMQ

    2.1.可以通过命令下载

    先进入到soft/rocketmq目录

    1. >wget https://dlcdn.apache.org/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
    2. >unzip rocketmq-all-4.9.4-bin-release.zip

    或是下载后再上传到服务器里

    2.2 对runserver.sh文件修改

    但是要注意,RocketMQ默认预设的JVM内存是4G,这是RocketMQ给我们的最佳配置。但是通常我们用虚拟机的话都是不够4G内存的,所以需要调整下JVM内存大小。 用vim runserver.sh编辑这个脚本,在脚本中找到这一行调整内存大小为256M

    1. #进入bin目录
    2. cd rocketmq-all-4.9.4-bin-release/bin/
    3. #修改runserver.sh
    4. vim runserver.sh

     JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=160m"
    

    3. 配置RocketMQ集群

    我们为了便于观察,这次搭建一个2主2从异步刷盘的集群,所以我们会使用conf/2m-2s-async下的配置文件,实际项目中,为了达到高可用,一般会使用dleger。预备设计的集群情况如下:

    机器名nemaeServer节点部署broker节点部署
    worker1nameserver
    worker2nameserverbroker-a, broker-b-s
    worker3nameserverbroker-b,broker-a-s

    所以修改的配置文件是进入rocketmq的config目录下修改2m-2s-async的配置文件。--只需要配置broker.conf。

    在rocketmq的config目录下可以看到rocketmq建议的各种配置方式:

    • 2m-2s-async: 2主2从异步刷盘(吞吐量较大,但是消息可能丢失),
    • 2m-2s-sync:2主2从同步刷盘(吞吐量会下降,但是消息更安全),
    • 2m-noslave:2主无从(单点故障),然后还可以直接配置broker.conf,进行单点环境配置。
    • 而dleger就是用来实现主从切换的。集群中的节点会基于Raft协议随机选举出一个leader,其他的就都是follower。通常正式环境都会采用这种方式来搭建集群。

    我们这次采用2m-2s-async的方式搭建集群。

    3.1 建立worker1、worker2、worker3三个文件夹

    1. mkdir worker1
    2. mkdir worker2
    3. mkdir worker3

    3.2 copy到对应的文件夹

    1. #创建三个文件夹
    2. mkdir /soft/rocketmq/worker1/rocketmq-all-4.9.4-bin-release/
    3. mkdir /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/
    4. mkdir /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/
    5. #copy
    6. cp -r rocketmq-all-4.9.4-bin-release/* /soft/rocketmq/worker1/rocketmq-all-4.9.4-bin-release/
    7. cp -r rocketmq-all-4.9.4-bin-release/* /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/
    8. cp -r rocketmq-all-4.9.4-bin-release/* /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/

    3.3.配置

    worker2上先配置borker-a的master节点。先配置2m-2s-async/broker-a.properties

    cd /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/conf/2m-2s-async/
    

    3.3.1 第一组broker-a

     vim broker-a.properties

    然后把下面配置粘贴进 broker-a.properties

    1. #所属集群名字,名字一样的节点就在同一个集群内
    2. brokerClusterName=rocketmq-cluster
    3. #broker名字,名字一样的节点就是一组主从节点。
    4. brokerName=broker-a
    5. #brokerid,0就表示是Master,>0的都是表示 Slave
    6. brokerId=0
    7. #nameServer地址,分号分割
    8. namesrvAddr=106.112.12.85:9876;106.112.12.85.85:9877;106.112.12.85.85:9878
    9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    10. defaultTopicQueueNums=4
    11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    12. autoCreateTopicEnable=true
    13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    14. autoCreateSubscriptionGroup=true
    15. #Broker 对外服务的监听端口
    16. listenPort=11912
    17. #删除文件时间点,默认凌晨 4点
    18. deleteWhen=04
    19. #文件保留时间,默认 48 小时
    20. fileReservedTime=120
    21. #commitLog每个文件的大小默认1G
    22. mapedFileSizeCommitLog=1073741824
    23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    24. mapedFileSizeConsumeQueue=300000
    25. #destroyMapedFileIntervalForcibly=120000
    26. #redeleteHangedFileInterval=120000
    27. #检测物理文件磁盘空间
    28. diskMaxUsedSpaceRatio=88
    29. #存储路径
    30. storePathRootDir=/soft/rocketmq/worker2/store
    31. #commitLog 存储路径
    32. storePathCommitLog=/soft/rocketmq/worker2/store/commitlog
    33. #消费队列存储路径存储路径
    34. storePathConsumeQueue=/soft/rocketmq/worker2/store/consumequeue
    35. #消息索引存储路径
    36. storePathIndex=/soft/rocketmq/worker2/store/index
    37. #checkpoint 文件存储路径
    38. storeCheckpoint=/soft/rocketmq/worker2/store/checkpoint
    39. #abort 文件存储路径
    40. abortFile=/soft/rocketmq/worker2/store/abort
    41. #限制的消息大小
    42. maxMessageSize=65536
    43. #flushCommitLogLeastPages=4
    44. #flushConsumeQueueLeastPages=2
    45. #flushCommitLogThoroughInterval=10000
    46. #flushConsumeQueueThoroughInterval=60000
    47. #Broker 的角色
    48. #- ASYNC_MASTER 异步复制Master
    49. #- SYNC_MASTER 同步双写Master
    50. #- SLAVE
    51. brokerRole=ASYNC_MASTER
    52. #刷盘方式
    53. #- ASYNC_FLUSH 异步刷盘
    54. #- SYNC_FLUSH 同步刷盘
    55. flushDiskType=ASYNC_FLUSH
    56. #checkTransactionMessageEnable=false
    57. #发消息线程池数量
    58. #sendMessageThreadPoolNums=128
    59. #拉消息线程池数量
    60. #pullMessageThreadPoolNums=128

    3.3.2 配置broker-b-s.properties

    vim broker-b-s.properties
    

    配置

    1. #所属集群名字,名字一样的节点就在同一个集群内
    2. brokerClusterName=rocketmq-cluster
    3. #broker名字,名字一样的节点就是一组主从节点。
    4. brokerName=broker-b
    5. #brokerid,0就表示是Master,>0的都是表示 Slave
    6. brokerId=1
    7. #nameServer地址,分号分割
    8. namesrvAddr=106.112.12.85:9876;106.112.12.85:9877;106.112.12.85:9878
    9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    10. defaultTopicQueueNums=4
    11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    12. autoCreateTopicEnable=true
    13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    14. autoCreateSubscriptionGroup=true
    15. #Broker 对外服务的监听端口
    16. listenPort=21012
    17. #删除文件时间点,默认凌晨 4点
    18. deleteWhen=04
    19. #文件保留时间,默认 48 小时
    20. fileReservedTime=120
    21. #commitLog每个文件的大小默认1G
    22. mapedFileSizeCommitLog=1073741824
    23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    24. mapedFileSizeConsumeQueue=300000
    25. #destroyMapedFileIntervalForcibly=120000
    26. #redeleteHangedFileInterval=120000
    27. #检测物理文件磁盘空间
    28. diskMaxUsedSpaceRatio=88
    29. #存储路径
    30. storePathRootDir=/soft/rocketmq/worker2/storeSlave
    31. #commitLog 存储路径
    32. storePathCommitLog=/soft/rocketmq/worker2/storeSlave/commitlog
    33. #消费队列存储路径存储路径
    34. storePathConsumeQueue=/soft/rocketmq/worker2/storeSlave/consumequeue
    35. #消息索引存储路径
    36. storePathIndex=/soft/rocketmq/worker2/storeSlave/index
    37. #checkpoint 文件存储路径
    38. storeCheckpoint=/soft/rocketmq/worker2/storeSlave/checkpoint
    39. #abort 文件存储路径
    40. abortFile=/soft/rocketmq/worker2/storeSlave/abort
    41. #限制的消息大小
    42. maxMessageSize=65536
    43. #flushCommitLogLeastPages=4
    44. #flushConsumeQueueLeastPages=2
    45. #flushCommitLogThoroughInterval=10000
    46. #flushConsumeQueueThoroughInterval=60000
    47. #Broker 的角色
    48. #- ASYNC_MASTER 异步复制Master
    49. #- SYNC_MASTER 同步双写Master
    50. #- SLAVE
    51. brokerRole=SLAVE
    52. #刷盘方式
    53. #- ASYNC_FLUSH 异步刷盘
    54. #- SYNC_FLUSH 同步刷盘
    55. flushDiskType=ASYNC_FLUSH
    56. #checkTransactionMessageEnable=false
    57. #发消息线程池数量
    58. #sendMessageThreadPoolNums=128
    59. #拉消息线程池数量
    60. #pullMessageThreadPoolNums=128

    3.4 配置第二组Broker-b

    cd /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/conf/2m-2s-async/
    

    3.4.1 broker-b.properties

    vim broker-b.properties

    配置

    1. #所属集群名字,名字一样的节点就在同一个集群内
    2. brokerClusterName=rocketmq-cluster
    3. #broker名字,名字一样的节点就是一组主从节点。
    4. brokerName=broker-b
    5. #brokerid,0就表示是Master,>0的都是表示 Slave
    6. brokerId=0
    7. #nameServer地址,分号分割
    8. namesrvAddr=106.112.12.85:9876;106.112.12.85:9877;106.112.12.85:9878
    9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    10. defaultTopicQueueNums=4
    11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    12. autoCreateTopicEnable=true
    13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    14. autoCreateSubscriptionGroup=true
    15. #Broker 对外服务的监听端口
    16. listenPort=20913
    17. #删除文件时间点,默认凌晨 4点
    18. deleteWhen=04
    19. #文件保留时间,默认 48 小时
    20. fileReservedTime=120
    21. #commitLog每个文件的大小默认1G
    22. mapedFileSizeCommitLog=1073741824
    23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    24. mapedFileSizeConsumeQueue=300000
    25. #destroyMapedFileIntervalForcibly=120000
    26. #redeleteHangedFileInterval=120000
    27. #检测物理文件磁盘空间
    28. diskMaxUsedSpaceRatio=88
    29. #存储路径
    30. storePathRootDir=/soft/rocketmq/worker3/store
    31. #commitLog 存储路径
    32. storePathCommitLog=/soft/rocketmq/worker3/store/commitlog
    33. #消费队列存储路径存储路径
    34. storePathConsumeQueue=/soft/rocketmq/worker3/store/consumequeue
    35. #消息索引存储路径
    36. storePathIndex=/soft/rocketmq/worker3/store/index
    37. #checkpoint 文件存储路径
    38. storeCheckpoint=/soft/rocketmq/worker3/store/checkpoint
    39. #abort 文件存储路径
    40. abortFile=/soft/rocketmq/worker3/store/abort
    41. #限制的消息大小
    42. maxMessageSize=65536
    43. #flushCommitLogLeastPages=4
    44. #flushConsumeQueueLeastPages=2
    45. #flushCommitLogThoroughInterval=10000
    46. #flushConsumeQueueThoroughInterval=60000
    47. #Broker 的角色
    48. #- ASYNC_MASTER 异步复制Master
    49. #- SYNC_MASTER 同步双写Master
    50. #- SLAVE
    51. brokerRole=ASYNC_MASTER
    52. #刷盘方式
    53. #- ASYNC_FLUSH 异步刷盘
    54. #- SYNC_FLUSH 同步刷盘
    55. flushDiskType=ASYNC_FLUSH
    56. #checkTransactionMessageEnable=false
    57. #发消息线程池数量
    58. #sendMessageThreadPoolNums=128
    59. #拉消息线程池数量
    60. #pullMessageThreadPoolNums=128

    3.4.2 broker-a-s.properties 

     vim broker-a-s.properties 

    配置

    1. #所属集群名字,名字一样的节点就在同一个集群内
    2. brokerClusterName=rocketmq-cluster
    3. #broker名字,名字一样的节点就是一组主从节点。
    4. brokerName=broker-a
    5. #brokerid,0就表示是Master,>0的都是表示 Slave
    6. brokerId=1
    7. #nameServer地址,分号分割
    8. namesrvAddr=106.112.12.85:9876;106.112.12.85:9877;106.112.12.85:9878
    9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    10. defaultTopicQueueNums=4
    11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    12. autoCreateTopicEnable=true
    13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    14. autoCreateSubscriptionGroup=true
    15. #Broker 对外服务的监听端口
    16. listenPort=21013
    17. #删除文件时间点,默认凌晨 4点
    18. deleteWhen=04
    19. #文件保留时间,默认 48 小时
    20. fileReservedTime=120
    21. #commitLog每个文件的大小默认1G
    22. mapedFileSizeCommitLog=1073741824
    23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    24. mapedFileSizeConsumeQueue=300000
    25. #destroyMapedFileIntervalForcibly=120000
    26. #redeleteHangedFileInterval=120000
    27. #检测物理文件磁盘空间
    28. diskMaxUsedSpaceRatio=88
    29. #存储路径
    30. storePathRootDir=/soft/rocketmq/worker3/storeSlave
    31. #commitLog 存储路径
    32. storePathCommitLog=/soft/rocketmq/worker3/storeSlave/commitlog
    33. #消费队列存储路径存储路径
    34. storePathConsumeQueue=/soft/rocketmq/worker3/storeSlave/consumequeue
    35. #消息索引存储路径
    36. storePathIndex=/soft/rocketmq/worker3/storeSlave/index
    37. #checkpoint 文件存储路径
    38. storeCheckpoint=/soft/rocketmq/worker3/storeSlave/checkpoint
    39. #abort 文件存储路径
    40. abortFile=/soft/rocketmq/worker3/storeSlave/abort
    41. #限制的消息大小
    42. maxMessageSize=65536
    43. #flushCommitLogLeastPages=4
    44. #flushConsumeQueueLeastPages=2
    45. #flushCommitLogThoroughInterval=10000
    46. #flushConsumeQueueThoroughInterval=60000
    47. #Broker 的角色
    48. #- ASYNC_MASTER 异步复制Master
    49. #- SYNC_MASTER 同步双写Master
    50. #- SLAVE
    51. brokerRole=SLAVE
    52. #刷盘方式
    53. #- ASYNC_FLUSH 异步刷盘
    54. #- SYNC_FLUSH 同步刷盘
    55. flushDiskType=ASYNC_FLUSH
    56. #checkTransactionMessageEnable=false
    57. #发消息线程池数量
    58. #sendMessageThreadPoolNums=128
    59. #拉消息线程池数量
    60. #pullMessageThreadPoolNums=128

    3.5 创建相关文件夹

    1. mkdir -p /soft/rocketmq/worker3/storeSlave/{commitlog,consumequeue,index}
    2. mkdir -p /soft/rocketmq/worker2/storeSlave/{commitlog,consumequeue,index}
    3. mkdir -p /soft/rocketmq/worker3/store/{commitlog,consumequeue,index}
    4. mkdir -p /soft/rocketmq/worker2/store/{commitlog,consumequeue,index}

    这样broker就配置完成了。

    需要注意的配置项:1、同一机器上两个实例的store目录不能相同,否则会报错 Lock failed,MQ already started

    2、同一机器上两个实例的listenPort也不能相同。否则会报端口占用的错

    nameserver不需要进行配置,直接启动就行。这也看出nameserver是无状态的

    4.启动RocketMQ

    4.1 添加配置文件

    由于是单机运行的,故不能运行在同一个端口上

    4.1.1 修改worker2

    1. touch /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/conf/application.properties
    2. vim /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/conf/application.properties

    添加配置

    listenPort=9877
    

    4.1.2 修改worker3

    1. touch /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/conf/application.properties
    2. vim /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/conf/application.properties

    添加配置

    listenPort=9878

    4.2 直接在三个节点上启动nameServer

    第一个节点

    1. cd /soft/rocketmq/worker1/rocketmq-all-4.9.4-bin-release/bin/
    2. nohup sh mqnamesrv &

    第二个节点

    1. cd /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/bin/
    2. nohup sh mqnamesrv -c /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/conf/application.properties &

    第三个节点

    1. cd /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/bin/
    2. nohup sh mqnamesrv -c /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/conf/application.properties &

    启动完成每个节点的nohup.out里面都可以看到启动成功的日志

    1. Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
    2. Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
    3. load config properties file OK, /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/conf/application.properties
    4. The Name Server boot success. serializeType=JSON

    5.启动broker

    worker2上启动broker-a的master节点和broker-b的slave节点

    1. nohup sh mqbroker -c /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/conf/2m-2s-async/broker-a.properties &
    2. nohup sh mqbroker -c /soft/rocketmq/worker2/rocketmq-all-4.9.4-bin-release/conf/2m-2s-async/broker-b-s.properties &

    在work3上启动broker-b的master节点和broker-a的slave节点

    1. nohup sh mqbroker -c /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/conf/2m-2s-async/broker-b.properties &
    2. nohup sh mqbroker -c /soft/rocketmq/worker3/rocketmq-all-4.9.4-bin-release/conf/2m-2s-async/broker-a-s.properties &

    启动slave时,如果遇到报错 Lock failed,MQ already started ,那是因为有多个实例共用了同一个storePath造成的,这时就需要调整store的路径。

  • 相关阅读:
    mysql数据库进阶
    clickhouse的Distributed分布式表查询的性能陷阱
    第五章:Vuex
    Consul API Gateway 0.4 已正式发布,包括这些新功能
    求解汉诺塔问题【修改版】
    GO语言实战之嵌入类型和属性隐私定义
    div+css网页html成品学生作业包含10个html页面——动漫主题海贼王
    在Python中实现限定抽奖次数的机制
    ONNX--学习笔记
    济南槐荫吴家堡 国稻种芯·中国水稻节:山东稻出黄河大米
  • 原文地址:https://blog.csdn.net/wssc63262/article/details/126003507