部署前的逻辑架构图

image.png

各个服务的机器配置信息

  1. +----------------------------------------------------------------------------+
  2. | 服务角色 | 机器数量 | 每台cpu核数 | 每台内存容量 | 每台磁盘容量 | 网卡 |
  3. | NameServer | 3 | 8 | 16GB | 500GB | 千兆网卡 |
  4. | Broker | 3 | 24 | 48GB | 1TB | 千兆网卡 |
  5. | Producer | 2 | 4 | 8GB | 500GB | 千兆网卡 |
  6. | Consumer | 2 | 4 | 8GB | 500GB | 千兆网卡 |
  7. +----------------------------------------------------------------------------+
  8. # NameServer 是核心的路由服务,一般是承载Broker注册和心跳,系统的路由表拉取等请求,负载其实很低,因此不需要特别高的配置,一台8核16G的机器即可,部署三台机器可以实现高可用的效果。
  9. # Broker 该服务未来是要承载高并发写入和海量数据存储的,所以需要把最高配置的机器(24核48G)的机器留给他,这里用3台机器组成一个“单Master + 双Slave”的集群。
  10. # Producer 和 Consumer 生产者系统和消费者系统 为业务系统,部署两台可以保证业务流程的可用性,只需要部署在标准的4核8G的机器上即可。

快速部署RokcetMQ示例

  1. # 1、首先在机器上安装JDK,同时在环境变量中设置JAVA_HOME
  2. # 2、通过命令构建Dledger
  3. git clone https://github.com/openmessaging/openmessaging-storage-dledger
  4. cd openmessaging-storage-dledger
  5. mvn clean install -DskipTests
  6. # 3、通过命令构建RocketMQ
  7. git clone https://github.com/apache/rocketmq.git
  8. cd rocketmq
  9. git checkout -b store_with_dledger origin/strore_with_dledger
  10. mvn -Prelease-all -DskipTests clean install -U
  11. # 4、进入目录,编辑指定文件
  12. cd distribution/target/apache-rocketmq
  13. # 在这个目录中,需要编辑三个文件,一个是bin/runserver.sh,一个是bin/runbroker.sh,一个是bin/tools.sh
  14. # 在里面找到如下三行,然后将第二行和第三行都删了,同时将第一行的值修改为自己的JDK的主目录
  15. [! -e "$JAVA_HOME/bin/java"] && JAVA_HOME=$HOME/jdk/java
  16. [! -e "$JAVA_HOME/bin/java"] && JAVA_HOME=/usr/java
  17. [! -e "$JAVA_HOME/bin/java"] && error_exit "Please set the JAVA_HOME variable in your environment,We need java(x64)!"
  18. # 可以使用命令 /usr/libexec/java_home -V, 查看JDK装在哪里
  19. # 5、命令快速启动RocketMQ集群
  20. sh bin/dledger/fast-try.sh start
  21. # 这个命令会在当前这台机器上启动一个NameServer和三个Broker,三个Broker其中一个是Master,另外两个是Slave,瞬间就可以组成一个最小可用的RocketMQ集群。
  22. # 6、通过下面命令检查RocketMQ集群的状态
  23. sh bin/mqdamin clusterList -n 127.0.0.1:9876
  24. # 这个命令执行的过程会有点缓慢,大概可能几秒到几十秒过后,会看到三行记录,说是一个RaftCluster,Broker名称叫做RaftNode00,然后BID是0、1、2。 这就说明了RocketMQ集群启动成功,BID为0的就是Master Broker, BID大于0的都是Slave Broker。
  25. # 7、接着可以尝试一下Slave是如何自动切换为Master的。
  26. # 可以看到三台机器的地址分别是:并发现,30921端口的Broker的BID是0,说明他是Master。
  27. 192.168.31.153:30921
  28. 192.168.31.153:30911
  29. 192.168.31.153:30931
  30. # 8、此时可以通过命令 lsof -i:30921 找出来占用30921端口的进程PID,接着就用kill -9 命令把进程杀掉
  31. # 接着等待10s左右,再次执行命令查看集群状态
  32. sh bin/mqadmin clusterList -n 127.0.0.1:9876
  33. # 此时可以发现作为Master的BID的节点,变成另外一个Broker了,也就是Slave切换为Master。

完成NameServer的部署

  1. # 1、前提,JDK、JAVA_HOME、构建Dledger和RocketMQ, 调整配置文件
  2. # 2、启动NameServer -- NameServer监听的端口默认是9876
  3. nohup sh mqnamesrv &

完成一组Broker集群部署

  1. # 1、前提,JDK、JAVA_HOME、构建Dledger和RocketMQ, 调整配置文件
  2. # 2、调整broker机器相关配置文件
  3. nohup sh bin/mqbroker -c conf/dledger/broker-n0.conf &
  4. # 第一个Broker配置文件是broker-n0.conf, 第二个Broker配置文件是broker-n1.conf, 第三个Broker配置文件是broker-n2.conf
  5. # 以broker-n0.conf为例,在每个配置项加入注释,告诉大家如何修改每台机器的配置

broker-n0.conf

  1. # broker集群名称,整个broker集群都可以用这个名称
  2. brokerClusterName = RaftCluster
  3. # broker的名称,比如有一个Master和两个Slave,那么他们的broker名称必须一样的,因为他们三个是一个分组,如果你有另外一组Master和两个Slave,可以给他们另外起名字,比如RaftNode01
  4. brokerName = RaftNode00
  5. # broker监听的端口号,如果每台机器上就部署一个broker,可以考虑就用这个端口号,不用修改
  6. listenPort = 30911
  7. # 配置NameServer的地址,如果有很多个NameServer的话,可以在这里写入多个NameServer地址
  8. namesrvAddr = 127.0.0.1:9876
  9. # 下面两个目录是存放broker数据的地方,可以换成别的目录,类似于/usr/local/rocketmq/node00之类的
  10. storePathRootDir = /tmp/rmqstore/node00
  11. storePathCommitLog = /tmp/rmqstore/node00/commitlog
  12. # 非常关键的一个配置,就是是否启用Dledger技术,这个必须为true
  13. enableDlegerCommitLog = true
  14. # 这个一般建议和broker名字保持一致,一个Master加两个Slave组成一个Group
  15. dLegerGroup = RaftNode00
  16. # 这个很关键,对于每一组broker, 需要保证他们的这个配置是一样的,在这里要写出来一个组利有哪几个broker,比如在这里假设有三台机器部署了broker,要让他们作为一个组,那么在这里就得写入他们三个的ip地址和监听的端口号
  17. dLegerPeers = n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
  18. # 这个是代表了一个broker在组里的id,一般就是n0,n1,n2之类的,这个得跟上面的dLegerPeers中的n0,n1,n2相匹配
  19. dLegerSelfId = n0
  20. # 这个是发送消息的线程数量,一般建议配置成跟你的CPU核数一样,比如我们的机器假设是24核的,那这里就修改为24核
  21. sendMessageThreadPoolNums = 24
  1. 上面的配置,其实最关键的是,你的Broker是分为多组的,每一组是三个Broker,一个Master和两个Slave
  2. 对于每一组Broker,他们的Broker名称,Group名称都是一样的,然后得给他们配置好一样的dLegerPeers(里面是组内三台Broker的地址)
  3. 然后得配置好对应的NameServer的地址
  4. 最后还有就是每个Broker都有自己的ID,在组内是唯一的就可以了。
  5. 所以按照上面的思路就可以配置好一组Broker,在三台机器上分别用命令启动Broker即可。启动完成之后,可以跟NameServer进行通信,检查Broker集群的状态,就是如下命令:
  6. sh bin/mqadmin clusterList -n 127.0.0.1:9876

编写最基本的生产者和消费者代码准备压测