开发学院

您的位置:首页>教程>正文

教程正文

RocketMQ 部署

  本节介绍生产环境部署解决方案,我们部署一个没有单点故障的弹性RocketMQ集群。

先决条件

  在开始这一部分之前,请确保你已经阅读了快速开始部分,并且对RocketMQ的核心概念和组件非常熟悉。

部署

Name Server

  为了确保集群在一个实例崩溃时仍能运行,建议使用两个或多个Name Server实例。只要有一个Name Server实例处于活动状态,整个集群都将保持服务状态。

  Name server 遵循无共享设计范式。代理将心跳数据发送到所有Name Server。Producers 和Consumers可以在发送/消费消息时从任何可用的Name server查询元数据。

Broker

  Brokers可以根据他们的角色分为两类:master和slave。master提供RW访问,而slave只接受读访问。

  要部署无单点故障的高可用性RocketMQ群集,应该部署一系列Brokers集。Brokers集包含brokerId设置为0的master和多个non-zero brokerIDs的slave。一组中的所有 Broker都有相同的 brokerName。在严重的情况下,我们应该在一个broker集中至少有两个broker。每个topic都存在于两个或多个broker中。

配置

  部署RocketMQ群集时,推荐的配置如下:

Broker配置

属性名缺省值详情
listenPort10911客户端监听端口
namesrvAddrnullname server地址
brokerIP1InetAddress可以配置多个地址
brokerNamenullbroker名字
brokerClusterNameDefaultCluster属于哪个群集 
brokerId00代表master,其他整数代表slave
storePathCommitLog$HOME/store/commitlog/提交日志的文件路径
storePathConsumerQueue$HOME/store/consumequeue/消费队列文件路径
mapedFileSizeCommitLog1024 * 1024 * 1024(1G) 提交日志的映射文件大小
deleteWhen04何时删除超出保留时间的提交
fileReserverdTime72删除提交前保留提交的小时数
brokerRoleASYNC_MASTERSYNC_MASTER/ASYNC_MASTER/SLVAE
flushDiskTypeASYNC_FLUSH{SYNC_FLUSH/ASYNC_FLUSH}。SYNC_FLUSH模式的代理在确认生产者之前将每个消息刷新到磁盘上。另一方面,ASYNC_FLUSH模式的代理利用了组提交,获得了更好的性能。


CLI管理工具

  RocketMQ提供了CLI (命令行界面)管理工具带来查询、管理和诊断各种问题。

如何获得

  管理工具与RocketMQ一起使用。要么你下载一个预先构建的二进制版本,要么你自己从源代码中构建。

  如果你需要源代码, rocketmq-tools模块包含在源代码中。

如何使用

  管理工具非常容易使用,这里我们假设你使用的是linux/unix系统 。

  切换到${PACKAGE}/bin目录下,输入命令mqadmin,您应该会看到以下帮助菜单:

  最常用的mqadmin命令有:

   updateTopic          更新或创建topic

   deleteTopic          从broker和NameServer中删除topic

   updateSubGroup       更新或创建订阅组

   deleteSubGroup       从broker删除订阅组

   updateBrokerConfig  更新broker的配置

   updateTopicPerm      更新 topic权限

   topicRoute 检查topic路由信息

   topicStatus 检查topic状态信息

   topicClusterList 获取topic集群信息

   brokerStatus broker运行状态数据

   queryMsgById 通过id查询消息

   queryMsgByKey 通过key查询消息

   queryMsgByUniqueKey 通过唯一key查询消息

   queryMsgByOffset 通过偏移量查询消息

   printMsg 打印消息详情

   sendMsgStatus 发送消息到broker的状态

   brokerConsumeStats 获取broker消息数据状态

   producerConnection 查询生产者的socket连接,客户端版本

   consumerConnection 查询消费者的socket连接,客户端版本和订阅

   consumerProgress 查询消费者的进度,速度

   consumerStatus 查询消费者的内部数据结构

   cloneGroupOffset 从其他组克隆偏移量

   clusterList 集群列表

   topicList 从name server获取topic列表

   updateKvConfig 创建或更新KV配置

   deleteKvConfig 删除KV 配置.

   wipeWritePerm 擦除所有name server中的broker写权限

   resetOffsetByTime 通过(无客户端重启)重置消费者偏移量

   updateOrderConf 创建或更新或删除顺序配置

   cleanExpiredCQ 清理broker上过期的消费队列

   cleanUnusedTopic 清理broker上未被使用的topic

   startMonitoring 启动监控

   statsAll 主题和消费者tps 状态

   syncDocs 同步文档

   allocateMQ 分配MQ

   checkMsgSendRT 检查消息的发送响应时间

   clusterRT 集群内所有消息的发送响应时间列表


  有关特定命令的详细信息,请参见“mqadmin help”。如果您想获得有关特定命令(如“clusterList”)的更多信息,只需键入mqadmin help clusterList,您就会看到:

usage: mqadmin clusterList [-h] [-i <arg>] [-m] [-n <arg>]
 -h,--help                Print help
 -i,--interval <arg>      specify intervals numbers, it is in seconds
 -m,--moreStats           Print more stats
 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

复制模式

  为了确保成功发布的消息不会丢失,RocketMQ提供了一种复制模式,通过两种复制方式:同步和异步,获得更强的持久性和更高的可用性。

复制:同步/异步Broker

  像许多复制系统一样,同步Broker会等到提交日志被复制到从属服务器后再确认。相反,异步Broker会在master上处理消息后立即返回。

如何配置

  RocketMQ发行版的conf文件夹下附带了三种预构建配置供您参考:

2m-2s-sync
2m-2s-async
2m-noslave

  注意:所有配置都使用ASYNC_FLUSH。

部署

  以2m-2s-sync的部署为例。首先,启动两个name server,如快速启动部分所示。假设他们的IP分别为92.168.0.2和 192.168.0.3。

  然后启动broker(假设RocketMQ在/home/rocketmq/dist目录中)

>cd /home/rocketmq/dist/bin
>bash mqbroker -c ../conf/2m-2s-sync/broker-a.properties -n 192.168.0.2:9876,192.168.0.3:9876
>bash mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties -n 192.168.0.2:9876,192.168.0.3:9876
>bash mqbroker -c ../conf/2m-2s-sync/broker-b.properties -n 192.168.0.2:9876,192.168.0.3:9876
>bash mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties -n 192.168.0.2:9876,192.168.0.3:9876

如何校验

  在CLI中执行以下命令进行验证:

> bash mqadmin clusterlist