查看原文
其他

RocketMQ集群部署配置

2017-11-21 匠心零度 匠心零度

目标,使用2台机器部署RocketMQ多Master多Slave模式,异步复制集群模式。

第一步,修改/etc/hosts文件

  1. 192.168.116.115 rocketmq1

  2. 192.168.116.116 rocketmq2

集群机器配置完成之后,集群内进行ping一下,确保都通。

编译得到环境

  1. git clone -b develop https://github.com/apache/rocketmq.git

  2. cd rocketmq

  3. mvn -Prelease-all -DskipTests clean install -U

  4. cd distribution/target/apache-rocketmq

  5. 本版本是基于4.1.0的,之后apache-rocketmq_4.1.0.tar.gz拷贝集群所有机器进行解压

  6. tar -zxvf apache-rocketmq_4.1.0.tar.gz

配置集群模式【多Master多Slave模式,异步复制】

配置的目录说明:

  • 2m-noslave: 多Master模式

  • 2m-2s-sync: 多Master多Slave模式,同步双写

  • 2m-2s-async:多Master多Slave模式,异步复制

配置项一个主的配置

  1. #所属集群名字

  2. brokerClusterName=rocketmq-cluster

  3. #broker名字,注意此处不同的配置文件填写的不一样

  4. brokerName=broker-a

  5. #0 表示 Master,>0 表示 Slave

  6. brokerId=0

  7. #nameServer地址,分号分割

  8. namesrvAddr=rocketmq1:9876;rocketmq2:9876

  9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

  10. defaultTopicQueueNums=4

  11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

  12. autoCreateTopicEnable=true

  13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

  14. autoCreateSubscriptionGroup=true

  15. #Broker 对外服务的监听端口

  16. listenPort=10911

  17. #删除文件时间点,默认凌晨 4点

  18. deleteWhen=04

  19. #文件保留时间,默认 72 小时

  20. fileReservedTime=120

  21. #commitLog每个文件的大小默认1G

  22. mapedFileSizeCommitLog=1073741824

  23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整

  24. mapedFileSizeConsumeQueue=300000

  25. #destroyMapedFileIntervalForcibly=120000

  26. #redeleteHangedFileInterval=120000

  27. #检测物理文件磁盘空间

  28. diskMaxUsedSpaceRatio=75

  29. #存储路径

  30. storePathRootDir=/appl/rocketmq/store

  31. #commitLog 存储路径

  32. storePathCommitLog=/appl/rocketmq/store/commitlog

  33. #消费队列存储路径存储路径

  34. storePathConsumeQueue=/appl/rocketmq/store/consumequeue

  35. #消息索引存储路径

  36. storePathIndex=/appl/rocketmq/store/index

  37. #checkpoint 文件存储路径

  38. storeCheckpoint=/appl/rocketmq/store/checkpoint

  39. #abort 文件存储路径

  40. abortFile=/appl/rocketmq/store/abort

  41. #限制的消息大小 默认4M

  42. #maxMessageSize=4194304

  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

配置项另外一个备的配置

  1. #所属集群名字

  2. brokerClusterName=rocketmq-cluster

  3. #broker名字,注意此处不同的配置文件填写的不一样

  4. brokerName=broker-b

  5. #0 表示 Master,>0 表示 Slave

  6. brokerId=1

  7. #nameServer地址,分号分割

  8. namesrvAddr=rocketmq1:9876;rocketmq2:9876

  9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

  10. defaultTopicQueueNums=4

  11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

  12. autoCreateTopicEnable=true

  13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

  14. autoCreateSubscriptionGroup=true

  15. #Broker 对外服务的监听端口

  16. listenPort=11911

  17. #删除文件时间点,默认凌晨 4点

  18. deleteWhen=04

  19. #文件保留时间,默认 72 小时

  20. fileReservedTime=120

  21. #commitLog每个文件的大小默认1G

  22. mapedFileSizeCommitLog=1073741824

  23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整

  24. mapedFileSizeConsumeQueue=300000

  25. #destroyMapedFileIntervalForcibly=120000

  26. #redeleteHangedFileInterval=120000

  27. #检测物理文件磁盘空间

  28. diskMaxUsedSpaceRatio=75

  29. #存储路径

  30. storePathRootDir=/appl/rocketmq-s/store

  31. #commitLog 存储路径

  32. storePathCommitLog=/appl/rocketmq-s/store/commitlog

  33. #消费队列存储路径存储路径

  34. storePathConsumeQueue=/appl/rocketmq-s/store/consumequeue

  35. #消息索引存储路径

  36. storePathIndex=/appl/rocketmq-s/store/index

  37. #checkpoint 文件存储路径

  38. storeCheckpoint=/appl/rocketmq-s/store/checkpoint

  39. #abort 文件存储路径

  40. abortFile=/appl/rocketmq-s/store/abort

  41. #限制的消息大小 默认4M

  42. #maxMessageSize=4194304

  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

备注:由于一台机器不是主备,所以主、备的端口和存储路径会不同,如果多台机器部署不可以保持一样了,主备主要区别在于brokerId、brokerRole配置区别。

注意到logback.*.xml配置文件中${user.home}需要替换自己指定的目录

可以使用sed进行替换:

  1. sed -i 's#${user.home}#/appl/rocketmq#g' *.xml

  2. # sed -i 's#${user.home}#/appl/rocketmq-s#g' *.xml 由于一台机器部署了2个结点

修改启动脚本中的JVM参数

由于RocketMQ4.1.0官方建议使用64bit JDK 1.8+;比如查看runserver.sh文件jvm参数如下:

  1. -server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m

需要特别说明下:元数据空间,专门用来存元数据的,它是jdk8以后用来替代perm的。

JVM堆空间大小根据机器情况进行调整,如果测试机器内存太小需要调整,不然启动不了,比如修改为如下

  1. -Xms1G -Xmx1G -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m

可以使用sed进行替换,把所有PermSize、MaxPermSize替换掉:

  1. sed -i 's#PermSize#MetaspaceSize#g' *

  2. sed -i 's#MaxPermSize#MaxMetaspaceSize#g' *

runbroker.sh里面的jvm:

  1. -Xms8g -Xmx8g -Xmn4g

根据自己情况进行修改。

个人建议对于RocketMQ默认的jvm参数除了堆大小其他的先不要调整,后续通过观察分析之后看看是否有必要进行其他参数的调整等,欢迎阅读本人JVM菜鸟进阶高手之路系列文章。

其实我有有疑惑,在broker的jvm参数:

  1. JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

  2. JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m

  3. -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30

  4. -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:+DisableExplicitGC"

  5. JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log

  6. -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime

  7. -XX:+PrintAdaptiveSizePolicy"

  8. JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5

  9. -XX:GCLogFileSize=30m"

  10. JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"

  11. JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"

  12. JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"

  13. JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"

  14. JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib"

  15. JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"

  16. JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

-XX:+DisableExplicitGC,-XX:MaxDirectMemorySize=15g,但是当达到阀值之后会调用System.gc来做一次full gc,关键System.gc都被禁止了。 希望那位大佬知道,在留言区说明下,谢谢。

启动服务

记住先启动NameServer,再启动Broker,关闭的时候恰好想法,先关闭Broker再关闭NameServer

启动NameServer

  1. nohup sh /appl/apache-rocketmq/bin/mqnamesrv &

  2. tail -f /appl/rocketmq-s/logs/rocketmqlogs/namesrv.log

  3. #tail -f /appl/rocketmq/logs/rocketmqlogs/namesrv.log

  4. INFO main - The Name Server boot success. serializeType=JSON

备注:由于namesrv的端口是写死在代码里面的,所以一台机器启动一个namesrv即可。

启动Broker

  1. rocketmq1机器:

  2. nohup sh /appl/apache-rocketmq/bin/mqbroker -c /appl/apache-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &

  3. nohup sh /appl/apache-rocketmq-s/bin/mqbroker -c /appl/apache-rocketmq-s/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &  

  4. rocketmq2机器:

  5. nohup sh /appl/apache-rocketmq/bin/mqbroker -c /appl/apache-rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 &

  6. nohup sh /appl/apache-rocketmq-s/bin/mqbroker -c /appl/apache-rocketmq-s/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &  

  7. tail -f /appl/rocketmq/logs/rocketmqlogs/broker.log

  8. ……

  9. INFO main - The broker[broker-a, 192.168.116.116:10911] boot success. serializeType=JSON and name server is rocketmq1:9876;rocketmq2:9876

  10. ……

  11. tail -f /appl/rocketmq/logs/rocketmqlogs/namesrv.log

  12. ……

  13. new broker registerd, 192.168.116.116:11911 HAServer: 192.168.116.116:11912

  14. ……

  15. new broker registerd, 192.168.116.115:11911 HAServer: 192.168.116.115:11912

  16. ……

关闭服务:

  1. sh bin/mqshutdown broker

  2. sh bin/mqshutdown namesrv

到目前位置,关于RocketMQ的集群环境部署就结束了,未完待续……

如果读完觉得有收获的话,欢迎点赞加关注。


个人公众号,欢迎关注,查阅更多精彩历史!!!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存