RocketMQ Dledger 模式集群搭建

   Deledger 集群模式是多副本模式,每个Master配置二个 Slave 组成 Dledger Group,可以有多个 Dledger Group,由 Dledger 实现 Master 选举,具体定义的时候核心在于ID。     考虑到可维护性...

   Deledger 集群模式是多副本模式,每个Master配置二个 Slave 组成 Dledger Group,可以有多个 Dledger Group,由 Dledger 实现 Master 选举,具体定义的时候核心在于ID。

    考虑到可维护性的特点,本次Broker集群采用的是DLeger多副本模式,这样就需要用过Broker配置文件的方式定义每一个DLegerGroup,再每一个DLegerGroup 中必须存在有三个Broker节点,这样就需要为每一个节点设置一个ID标记,并且通过此标记来绑定与之相关的主机地址。

attachments-2023-07-smAnOOLY64aa9a44877c5,png

再配置DLegerID的时候有一个重要的命名要求:第一个随意编写,第2个开始必须为数字,这一点如果没有正确配置,则再启动的时候就会出现错误,而这一设置要求是有聚义的源代码来定义的。

本次集群搭建所用的主机

attachments-2023-07-VPFOynFG64aa9a61003df,png

所有节点安装基础环境:

  以单个节点举例:

  1. [root@nameserver-cluster-a ~]# yum -y install wget unzip java-1.8.0-openjdk*
  2. [root@nameserver-cluster-a ~]# java -version
  3. openjdk version "1.8.0_322"
  4. OpenJDK Runtime Environment (build 1.8.0_322-b06)
  5. OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
  6. #下载rocketmq二进制包
  7. [root@nameserver-cluster-a ~]# wget https://archive.apache.org/dist/rocketmq/4.9.7/rocketmq-all-4.9.7-bin-release.zip

添加环境变量:

再/etc/profile 下添加

  1. export JAVA_HOME=/usr/lib/jvm/java
  2. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
  3. export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile  生效

【可选】添加hosts

  1. 172.17.10.50 nameserver-cluster-a
  2. 172.17.10.51 nameserver-cluster-b
  3. 172.17.10.52 broker-cluster-a-node-1
  4. 172.17.10.53 broker-cluster-a-node-2
  5. 172.17.10.54 broker-cluster-a-node-3
  6. 172.17.10.55 broker-cluster-b-node-1
  7. 172.17.10.56 broker-cluster-b-node-2
  8. 172.17.10.57 broker-cluster-b-node-3
  9. 172.17.10.58 broker-cluster-b-node-1
  10. 172.17.10.59 broker-cluster-b-node-2
  11. 172.17.10.60 broker-cluster-b-node-3

安装Nameserver集群:

    NameServer 是一个重复的数据存储集群,每一个NameServer 保存的数据完成相同,并且没有所谓的数据同步的处理操作,那么再进行服务搭建的时候每个服务同时配置相同的内容即可。

    NameServer保存了整了 RocketMQ 集群之中的所有核心数据 (主题数据、Broker 数据),生产者和消费者都需要通过 NameServer 主机过去相关的 RocketMQ 的信息。

基本步骤

【1】 再nameserver-cluster-a主机上进行安装配置

【2】 将配置好的rocketmq 复制给nameserver-cluster-b

【3】 启动服务,并开放防火墙端口

安装Namesvc

1、解压到指定目录并更改名称:

  1. [root@nameserver-cluster-a ~]# unzip rocketmq-all-4.9.7-bin-release.zip -d /opt/
  2. [root@nameserver-cluster-a ~]# cd /opt/
  3. [root@nameserver-cluster-a opt]# ls
  4. rocketmq rocketmq-all-4.9.7-bin-release
  5. [root@nameserver-cluster-a opt]# mv rocketmq-all-4.9.7-bin-release/ rocketmq

2、建立日志目录

  1. #日志目录若不是再rockermq二进制包路径内,需要再其他namesvc节点也执行下
  2. [root@nameserver-cluster-a ~]# mkdir -p /opt/rocketmq/logs

3、配置JVM内存并更改日志存储路径

  1. [root@nameserver-cluster-a opt]# vim rocketmq/bin/runserver.sh
  2. #根据自身情况去更改此默认值
  3. JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
  4. choose_gc_options
  5. JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
  6. JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
  7. JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib:${JAVA_HOME}/lib/ext"
  8. #rewrite user home 添加行(再Djava.ext.dirs行下添加)
  9. JAVA_OPT="${JAVA_OPT} -Duser.home=/opt/rocketmq/logs"

4、将配置完的namesvc发送到其他namesvc主机

[root@nameserver-cluster-a opt]# scp -r rocketmq/  nameserver-cluster-b:/opt/

5、所有NameServer节点启动

  1. [root@nameserver-cluster-a opt]# nohup /opt/rocketmq/bin/mqnamesrv > /opt/rocketmq/logs/rocketmq-namesrv.log 2>&1 &
  2. [1] 10742
  3. [root@nameserver-cluster-a opt]# jps
  4. 10761 NamesrvStartup
  5. 10779 Jps
  6. [root@nameserver-cluster-a opt]# netstat -anptu |grep 9876
  7. tcp6 0 0 :::9876 :::* LISTEN 10761/java
  8. [root@nameserver-cluster-b opt]# nohup /opt/rocketmq/bin/mqnamesrv > /opt/rocketmq/logs/rocketmq-namesrv.log 2>&1 &
  9. [1] 14033
  10. [root@nameserver-cluster-b opt]# jps
  11. 14052 NamesrvStartup
  12. 14070 Jps
  13. [root@nameserver-cluster-b opt]# netstat -anptu|grep 9876
  14. tcp6 0 0 :::9876 :::* LISTEN 14052/java

6、防火墙开放此端口

  1. firewall-cmd --zone=public --add-port=9876/tcp --permanent
  2. firewall-cmd --reload

7、RocketMQ nameserver节点关闭命令

/opt/rocketmq/bin/mqshutdown  namesrv

安装Broker集群

    是整个 BocketMQ 集群之中的核心所在,所以消息的传输以及存储的处理全部有该集群负责完成,所有的 Broker 启动之后都会自动的向所有的 Nameserver 发送注册信息(路由信息)

attachments-2023-07-r8qviEc064aa9a9ba99eb,png

基本步骤

  再broker单台主机上安装,后同步到其他broker主机后进行修改

【1】 再broker-cluster-a-node-1 进行集群配置

【2】 将broker-cluster-a-node-1 上进行的配置同步给broker-cluster-a-node-*主机上

【3】 修改 broker-cluster-* 节点上的配置进行修改

再所有Broker节点创建日志、数据存储目录

 mkdir -p /opt/rocketmq/{data/{store,commitlog},logs}

安装配置一个broker节点

1、解压重命名RocketMQ二进制包

  1. [root@broker-cluster-a-node-1 ~]# unzip rocketmq-all-4.9.7-bin-release.zip -d /opt/
  2. [root@broker-cluster-a-node-1 ~]# cd /opt/
  3. [root@broker-cluster-a-node-1 opt]# mv rocketmq-all-4.9.7-bin-release/ rocketmq

2、修改RocketMQ  Dledger模式配置

  1. [root@broker-cluster-a-node-1 opt]# cp /opt/rocketmq/conf/dledger/broker-n0.conf /opt/rocketmq/conf/dledger/broker-cluster.conf
  2. [root@broker-cluster-a-node-1 opt]# vim /opt/rocketmq/conf/dledger/broker-cluster.conf
  3. #定义集群的名称
  4. brokerClusterName = PrivacyCluster
  5. #定义Broker的名称
  6. brokerName=broker-PrivacyCluster-A
  7. #服务监听端口
  8. listenPort=30911
  9. #nameserver节点
  10. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
  11. #数据存储目录(消息存储路径)
  12. storePathRootDir=/opt/rocketmq/data/store
  13. #commitlog目录
  14. storePathCommitLog=/opt/rocketmq/data/commitlog/
  15. #是否使用DLeger 模式
  16. enableDLegerCommitLog=true
  17. #DLeger分组,一般与brokerName相同
  18. dLegerGroup=broker-PrivacyCluster-A
  19. #集群中其他节点,实现Dleger内部通信(命名规则,第一个字母为自定义,从第二个开始必须为数字 (n10是ID)
  20. dLegerPeers=n10-172.17.10.52:40911;n11-172.17.10.53:40911;n12-172.17.10.54:40911
  21. ## must be unique
  22. #当前节点信息,上面定义的ID
  23. dLegerSelfId=n10
  24. #发送线程池的大小,建议配置成CPU核数
  25. sendMessageThreadPoolNums=16
  26. #========追加配置项===========
  27. #开启异步刷盘
  28. flushDiskType=ASYNC_FLUSH
  29. #线上关闭自动创建topic
  30. autoCreateTopicEnable=false
  31. #开启临时存储池-异步刷盘建议开启
  32. TransientStorePoolEnable=true
  33. #同步刷盘建议使用重入锁-异步建议关闭
  34. useReentrantLockWhenPutMessage=false
  35. #发送消息的最大线程数,默认1,同步刷盘建议适当增大,建议配置成CPU核数
  36. sendMessageThreadPoolNums=8
  37. #关闭堆内存数据传输-建议关闭,可以提高拉消息效率,(false可能导致消费者超时 TPS上不去)
  38. #transferMsgByHeap=false
  39. transferMsgByHeap=true
  40. #开启消息轨迹,建议再集群中新增加个节点,并仅再新增节点上开启消息轨迹
  41. #traceTopicEnable=true
  42. #开启从Slave读数据功能
  43. slaveReadEnable=true
  44. #linux建议开启 Epoll IO模型
  45. useEpollNativeSelector=true
  46. #启用ACL访问控制(不添加ACL访问控制,可直接跳过ACL访问控制的配置)
  47. aclEnable=true

3、配置Broker JVM 内存以及日志目录

  1. [root@broker-cluster-a-node-1 opt]# vim /opt/rocketmq/bin/runbroker.sh
  2. #根据自身情况更改内存配置
  3. JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
  4. JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
  5. JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
  6. JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
  7. JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
  8. JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
  9. JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
  10. JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
  11. JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib:${JAVA_HOME}/lib/ext"
  12. #新增日志路径配置
  13. #rewrite user home
  14. JAVA_OPT="${JAVA_OPT} -Duser.home=/opt/rocketmq/logs"

4、配置ACL访问控制

aclEnable=false 或者未添加aclEnable配置可忽略这项配置

  1. [root@broker-cluster-a-node-1 opt]# vim /opt/rocketmq/conf/plain_acl.yml
  2. #定义IP白名单
  3. globalWhiteRemoteAddresses:
  4. - 10.10.103.*
  5. - 192.168.*.*
  6. - 172.17.10.*
  7. #应以用户信息以及对注意的权限
  8. accounts:
  9. #用户名
  10. - accessKey: 指定允许的用户名
  11. #密码
  12. secretKey: 指定允许的用户名的密码
  13. #用户级别的 IP 地址白名单配置,可根据需求自行修改
  14. whiteRemoteAddress:
  15. ##该配置项为是否设置管理员,
  16. admin: false
  17. #默认Topic主题: 拒绝
  18. defaultTopicPerm: DENY
  19. #默认主题组SUB权限
  20. defaultGroupPerm: SUB
  21. #配置该用户对主题的权限
  22. topicPerms:
  23. #对topicPrivacy主要发布订阅
  24. - topicPrivacy=PUB|SUB
  25. #对Topictest主要发布订阅
  26. - Topictest=PUB|SUB
  27. groupPerms:
  28. # the group should convert to retry topic
  29. - topicPrivacy=PUB|SUB
  30. - Topictest=PUB|SUB
  31. - accessKey: rocketmqadmin
  32. secretKey: y2Ff!Ds46jYSki^Da
  33. whiteRemoteAddress: 192.168.1.*,172.17.10.*
  34. # if it is admin, it could access all resources
  35. admin: true

 配置参考:

attachments-2023-07-lvEyteRj64aa9ac0377b6,png

配置其他的Broker节点

1、将配置好的RocketMQ 目录传输给其他broker主机

  1. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-a-node-2:/opt/
  2. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-a-node-3:/opt/
  3. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-b-node-1:/opt/
  4. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-b-node-2:/opt/
  5. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-b-node-3:/opt/
  6. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-c-node-1:/opt/
  7. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-c-node-2:/opt/
  8. [root@broker-cluster-a-node-1 opt]# scp -r rocketmq/ broker-cluster-c-node-3:/opt/

2、修改broker-cluster-a-node-2主机的MQ配置

  1. [root@broker-cluster-a-node-2 ~]# vim /opt/rocketmq/conf/dledger/broker-cluster.conf
  2. brokerClusterName = PrivacyCluster
  3. brokerName=broker-PrivacyCluster-A
  4. listenPort=30911
  5. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
  6. storePathRootDir=/opt/rocketmq/data/store
  7. storePathCommitLog=/opt/rocketmq/data/commitlog/
  8. enableDLegerCommitLog=true
  9. dLegerGroup=broker-PrivacyCluster-A
  10. dLegerPeers=n10-172.17.10.52:40911;n11-172.17.10.53:40911;n12-172.17.10.54:40911
  11. ## must be unique
  12. dLegerSelfId=n11 #修改此处
  13. sendMessageThreadPoolNums=16
  14. flushDiskType=ASYNC_FLUSH
  15. autoCreateTopicEnable=false
  16. TransientStorePoolEnable=true
  17. useReentrantLockWhenPutMessage=false
  18. sendMessageThreadPoolNums=8
  19. #transferMsgByHeap=false
  20. transferMsgByHeap=true
  21. slaveReadEnable=true
  22. useEpollNativeSelector=true

3、修改broker-cluster-a-node-3主机的MQ配置

  1. [root@broker-cluster-a-node-3 ~]# vim /opt/rocketmq/conf/dledger/broker-cluster.conf
  2. brokerClusterName = PrivacyCluster
  3. brokerName=broker-PrivacyCluster-A
  4. listenPort=30911
  5. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
  6. storePathRootDir=/opt/rocketmq/data/store
  7. storePathCommitLog=/opt/rocketmq/data/commitlog/
  8. enableDLegerCommitLog=true
  9. dLegerGroup=broker-PrivacyCluster-A
  10. dLegerPeers=n10-172.17.10.52:40911;n11-172.17.10.53:40911;n12-172.17.10.54:40911
  11. ## must be unique
  12. dLegerSelfId=n12 #修改此处
  13. sendMessageThreadPoolNums=16
  14. flushDiskType=ASYNC_FLUSH
  15. autoCreateTopicEnable=false
  16. TransientStorePoolEnable=true
  17. useReentrantLockWhenPutMessage=false
  18. sendMessageThreadPoolNums=8
  19. #transferMsgByHeap=false
  20. transferMsgByHeap=true
  21. slaveReadEnable=true
  22. useEpollNativeSelector=true

4、启动 broker-cluster-a-*这组服broker

nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/dledger/broker-cluster.conf   > /opt/rocketmq/logs/broker.log 2>&1 & 
  1. [root@broker-cluster-a-node-1 ~]# jps
  2. 8276 Jps
  3. 7515 BrokerStartup
  4. [root@broker-cluster-a-node-2 ~]# jps
  5. 11443 Jps
  6. 10663 BrokerStartup
  7. [root@broker-cluster-a-node-3 ~]# jps
  8. 11593 Jps
  9. 10827 BrokerStartup

/opt/rocketmq/bin/mqadmin   clusterList -n " nameserver_ip:9876"   查看集群主机

可选择在这里现将控制台安装上:

attachments-2023-07-ygugcHxx64aa9b57cec65,png

5、 修改broker-cluster-b-noe-1主机的MQ配置

  1. brokerClusterName = PrivacyCluster
  2. brokerName=broker-PrivacyCluster-B #修改此处
  3. listenPort=30911
  4. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
  5. storePathRootDir=/opt/rocketmq/data/store
  6. storePathCommitLog=/opt/rocketmq/data/commitlog/
  7. enableDLegerCommitLog=true
  8. dLegerGroup=broker-PrivacyCluster-B #修改此处
  9. dLegerPeers=n21-172.17.10.55:40911;n22-172.17.10.56:40911;n23-172.17.10.57:40911 #修改此处
  10. ## must be unique
  11. dLegerSelfId=n21 #修改此处
  12. sendMessageThreadPoolNums=16
  13. flushDiskType=ASYNC_FLUSH
  14. autoCreateTopicEnable=false
  15. TransientStorePoolEnable=true
  16. useReentrantLockWhenPutMessage=false
  17. sendMessageThreadPoolNums=8
  18. #transferMsgByHeap=false
  19. transferMsgByHeap=true
  20. slaveReadEnable=true
  21. useEpollNativeSelector=true

6、 修改broker-cluster-b-node-2主机的MQ配置

  1. brokerClusterName = PrivacyCluster
  2. brokerName=broker-PrivacyCluster-B #修改此处
  3. listenPort=30911
  4. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
  5. storePathRootDir=/opt/rocketmq/data/store
  6. storePathCommitLog=/opt/rocketmq/data/commitlog/
  7. enableDLegerCommitLog=true
  8. dLegerGroup=broker-PrivacyCluster-B #修改此处
  9. dLegerPeers=n21-172.17.10.55:40911;n22-172.17.10.56:40911;n23-172.17.10.57:40911 #修改此处
  10. ## must be unique
  11. dLegerSelfId=n22 #修改此处
  12. sendMessageThreadPoolNums=16
  13. flushDiskType=ASYNC_FLUSH
  14. autoCreateTopicEnable=false
  15. TransientStorePoolEnable=true
  16. useReentrantLockWhenPutMessage=false
  17. sendMessageThreadPoolNums=8
  18. #transferMsgByHeap=false
  19. transferMsgByHeap=true
  20. slaveReadEnable=true
  21. useEpollNativeSelector=true

7、 修改broker-cluster-b-node-3主机的MQ配置

  1. brokerClusterName = PrivacyCluster
  2. brokerName=broker-PrivacyCluster-B #修改此处
  3. listenPort=30911
  4. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
  5. storePathRootDir=/opt/rocketmq/data/store
  6. storePathCommitLog=/opt/rocketmq/data/commitlog/
  7. enableDLegerCommitLog=true
  8. dLegerGroup=broker-PrivacyCluster-B #修改此处
  9. dLegerPeers=n21-172.17.10.55:40911;n22-172.17.10.56:40911;n23-172.17.10.57:40911 #修改此处
  10. ## must be unique
  11. dLegerSelfId=n23 #修改此处
  12. sendMessageThreadPoolNums=16
  13. flushDiskType=ASYNC_FLUSH
  14. autoCreateTopicEnable=false
  15. TransientStorePoolEnable=true
  16. useReentrantLockWhenPutMessage=false
  17. sendMessageThreadPoolNums=8
  18. #transferMsgByHeap=false
  19. transferMsgByHeap=true
  20. slaveReadEnable=true
  21. useEpollNativeSelector=true

8、启动 broker-cluster-b-*这组broker

nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/dledger/broker-cluster.conf   > /opt/rocketmq/logs/broker.log 2>&1 & 
  1. [root@broker-cluster-b-node-1 ~]# jps
  2. 11984 BrokerStartup
  3. 12105 Jps
  4. [root@broker-cluster-b-node-2 ~]# jps
  5. 11996 BrokerStartup
  6. 12156 Jps
  7. [root@broker-cluster-b-node-3 ~]# jps
  8. 13292 Jps
  9. 13165 BrokerStartup
    attachments-2023-07-K1G0SsXx64aa9ba11d643,png

    9、修改broker-cluster-c-node-1主机的MQ配置

    1. brokerClusterName = PrivacyCluster
    2. brokerName=broker-PrivacyCluster-C #修改此处
    3. listenPort=30911
    4. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
    5. storePathRootDir=/opt/rocketmq/data/store
    6. storePathCommitLog=/opt/rocketmq/data/commitlog/
    7. enableDLegerCommitLog=true
    8. dLegerGroup=broker-PrivacyCluster-C #修改此处
    9. dLegerPeers=n31-172.17.10.58:40911;n32-172.17.10.59:40911;n33-172.17.10.60:40911 #修改此处
    10. ## must be unique
    11. dLegerSelfId=n31 #修改此处
    12. sendMessageThreadPoolNums=16
    13. flushDiskType=ASYNC_FLUSH
    14. autoCreateTopicEnable=false
    15. TransientStorePoolEnable=true
    16. useReentrantLockWhenPutMessage=false
    17. sendMessageThreadPoolNums=8
    18. #transferMsgByHeap=false
    19. transferMsgByHeap=true
    20. slaveReadEnable=true
    21. useEpollNativeSelector=true

    10、修改broker-cluster-c-node-2主机的MQ配置

    1. brokerClusterName = PrivacyCluster
    2. brokerName=broker-PrivacyCluster-C #修改此处
    3. listenPort=30911
    4. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
    5. storePathRootDir=/opt/rocketmq/data/store
    6. storePathCommitLog=/opt/rocketmq/data/commitlog/
    7. enableDLegerCommitLog=true
    8. dLegerGroup=broker-PrivacyCluster-C #修改此处
    9. dLegerPeers=n31-172.17.10.58:40911;n32-172.17.10.59:40911;n33-172.17.10.60:40911 #修改此处
    10. ## must be unique
    11. dLegerSelfId=n32 #修改此处
    12. sendMessageThreadPoolNums=16
    13. flushDiskType=ASYNC_FLUSH
    14. autoCreateTopicEnable=false
    15. TransientStorePoolEnable=true
    16. useReentrantLockWhenPutMessage=false
    17. sendMessageThreadPoolNums=8
    18. #transferMsgByHeap=false
    19. transferMsgByHeap=true
    20. slaveReadEnable=true
    21. useEpollNativeSelector=true

    11、修改broker-cluster-c-node-3主机的MQ配置

    1. brokerClusterName = PrivacyCluster
    2. brokerName=broker-PrivacyCluster-C #修改此处
    3. listenPort=30911
    4. namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
    5. storePathRootDir=/opt/rocketmq/data/store
    6. storePathCommitLog=/opt/rocketmq/data/commitlog/
    7. enableDLegerCommitLog=true
    8. dLegerGroup=broker-PrivacyCluster-C #修改此处
    9. dLegerPeers=n31-172.17.10.58:40911;n32-172.17.10.59:40911;n33-172.17.10.60:40911 #修改此处
    10. ## must be unique
    11. dLegerSelfId=n33 #修改此处
    12. sendMessageThreadPoolNums=16
    13. flushDiskType=ASYNC_FLUSH
    14. autoCreateTopicEnable=false
    15. TransientStorePoolEnable=true
    16. useReentrantLockWhenPutMessage=false
    17. sendMessageThreadPoolNums=8
    18. #transferMsgByHeap=false
    19. transferMsgByHeap=true
    20. slaveReadEnable=true
    21. useEpollNativeSelector=true

    12、启动 broker-cluster-c-*这组broker

    nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/dledger/broker-cluster.conf   > /opt/rocketmq/logs/broker.log 2>&1 & 
    1. [root@broker-cluster-c-node-1 opt]# jps
    2. 10962 Jps
    3. 10844 BrokerStartup
    4. [root@broker-cluster-c-node-2 ~]# jps
    5. 10529 BrokerStartup
    6. 10628 Jps
    7. [root@broker-cluster-c-node-3 opt]# jps
    8. 10917 BrokerStartup
    9. 11022 Jps

attachments-2023-07-nzk85jJc64aa9bcc83cfe,png

13、Broker 节点开放防火墙

  1. firewall-cmd --zone=public --add-port=30909/tcp --permanent
  2. firewall-cmd --zone=public --add-port=30911/tcp --permanent
  3. firewall-cmd --zone=public --add-port=40911/tcp --permanent
  4. firewall-cmd --reload

14、RocketMQ Broker节点关闭命令

/opt/rocketmq/bin/mqshutdown  broker

安装管理控制台

RocketMQ 实际上是属于一个“丐版”的消息组件,没有自身提供的管理控制台,如果需要使用控制台进行管理,则需要通过第三方的组件完成。

在Nameserver服务器上安装控制台

1、下载maven

  1. [root@nameserver-cluster-a ~]# wget https://archive.apache.org/dist/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
  2. [root@nameserver-cluster-a ~]# tar xf apache-maven-3.8.4-bin.tar.gz
  3. [root@nameserver-cluster-a ~]# unzip rocketmq-externals-master.zip -d /opt/

2、下载控制台:

GitHub - muyan-yootk/rocketmq-externals: Mirror of Apache RocketMQ (Incubating)https://github.com/muyan-yootk/rocketmq-externals

3、 修改控制台配置文件:

   修改配置文件

  1. [root@nameserver-cluster-a ~]# vim /opt/rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties
  2. #Nameserver地址,多个已";"分割
  3. rocketmq.config.namesrvAddr=172.17.10.50:9876;172.17.10.51:9876
  4. #ACL中定义的用户
  5. rocketmq.config.accessKey=admin
  6. #ACL中定义的密码
  7. rocketmq.config.secretKey=
  8. #开启控制台登录权限认证
  9. rocketmq.config.loginRequired=true

 修改控制台用户配置文件

  1. [root@nameserver-cluster-a ~]# vim /opt/rocketmq-externals-master/rocketmq-console/src/main/resources/users.properties
  2. # Define Admin #1:管理员 0:普通用户
  3. admin=Acb123DBC@#123,1
  4. # Define Users
  5. rocketmq1=rocketmq1!@#123
  6. rocketmq2=rocketmq2!@#123

4、打包控制台代码

[root@nameserver-cluster-a rocketmq-console]# /root/apache-maven-3.8.4/bin/mvn  clean package -Dmaven.test.skip=true

attachments-2023-07-864dpsQQ64aa9c2f4cfbb,png

5、运行控制台并登录

  1. [root@nameserver-cluster-a rocketmq-console]# mv target/rocketmq-console-ng-1.0.1.jar /opt/rocketmq
  2. [root@nameserver-cluster-a rocketmq-console]# java -jar /opt/rocketmq/rocketmq-console-ng-1.0.1.jar >/opt/rocketmq/logs/rocketmq-console.log 2>&1 &

    attachments-2023-07-m3uxoVcm64aa9c643e3a0,png

    账户:admin

    密码:Acb123DBC@#123

    attachments-2023-07-pF62mzw464aa9c7500132,png

    创建一个主题:

    attachments-2023-07-TAiiWK1n64aa9c877c4b4,png

    RocketMQ自带测试:

    1、配置环境变量:

    1. #再 /etc/profile 内添加
    2. export NAMESRV_ADDR=172.17.10.50:9876
    3. #生效
    4. source /etc/profile

    2、普通订阅发布测试

    常见一个主题:TopicTest (可在控制台创建)

    启动生产者:

    /opt/rocketmq/bin/tools.sh  org.apache.rocketmq.example.quickstart.Producer

    attachments-2023-07-cwLzS2Ld64aa9cc0c066a,png

     启动消费者:

    /opt/rocketmq/bin/tools.sh  org.apache.rocketmq.example.quickstart.Consumer

    attachments-2023-07-iMioEoNc64aa9ce99583b,png

    attachments-2023-07-OIIgunZv64aa9cffd0f8d,png

    3、压力测试

    压力测试一定要进入命令目录下才可以

    在使用压力测试命令之前,需要给权限

    1. chmod +777 -R /opt/rocketmq/benchmark/
    2. cd /opt/rocketmq/benchmark/

     启动消费端: 启动时需要指定主题; 创建主题 TopicTest

    1. ./consumer.sh -t TopicTest -n 172.17.10.50:9876;172.17.10.51:9876
    2. # -n 指定 nameserver 地址 -t 指定主题
    3. # -g 可指定组
    4. #异常
    5. ./runclass.sh:行71: /usr/java/bin/java: 没有那个文件或目录
    6. #更改JAVA_HOME为java目录
    7. 65 if [ -z "$JAVA_HOME" ]; then
    8. 66 JAVA_HOME=/usr/
    9. 67 fi
    10. 68
    11. 69 JAVA="$JAVA_HOME/bin/java"

    启动生产端:

    ./producer.sh     -t  TopicTest  -n 172.17.10.50:9876;172.17.10.51:9876
    

    停止压测:

    1. ./shutdown.sh
    2. #可能会不好使,直接退出终端

    #本地模拟的环境,非真实生产环境

    attachments-2023-07-RKej8ucB64aa9d1593f02,png

    异常:system busy 与 broker busy 

    参考:https://www.cnblogs.com/enenen/p/10138511.html

    broker busy异常: 可通过增大 waitTimeMillsInSendQueue 解决

    system busy异常:可通过增大 osPageCacheBusyTimeOutMills 解决

    1. #发送队列等待时间
    2. waitTimeMillsInSendQueue=3000
    3. #系统页面缓存繁忙超时时间(翻译),默认值 1000
    4. osPageCacheBusyTimeOutMills=5000


      Broker三个节点的主从配置文件


      broker节点1配置文件   broker节点2配置文件   broker节点3配置文件

      启动nameserver 和broker
        nohup  /data/rocketmq-4.9.7-bin/bin/mqnamesrv >/data/rocketmq-4.9.7-bin/logs/rocketmq-namesrv.log 2>&1 &
       nohup /data/rocketmq-4.9.7-bin/bin/mqbroker -c /data/rocketmq-4.9.7-bin/conf/dledger/broker-n0.conf  >/data/rocketmq-4.9.7-bin/logs/broker.log 2>&1 &



  • 发表于 2023-07-09 19:30
  • 阅读 ( 481 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
每天惠23
每天惠23

33 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章