在进行 RocketMQ 的部署之前,我们需要做好一系列的准备工作,确保部署过程的顺利进行。
下面以 CentOS 系统为例,介绍 RocketMQ 的单机部署步骤 :
wget https://dist.apache.org/repos/dist/release/rocketmq/5.2.0/rocketmq-all-5.2.0-bin-release.zip
unzip rocketmq-all-5.2.0-bin-release.zip -d /opt/rocketmq
export ROCKETMQ_HOME=/opt/rocketmq/rocketmq-all-5.2.0-bin-release
export PATH=$PATH:$ROCKETMQ_HOME/bin
然后执行source /etc/profile使环境变量生效。
4. 启动 NameServer:在终端中执行以下命令启动 NameServer:
nohup mqnamesrv &
nohup命令用于在后台运行程序,&表示将程序放到后台执行。启动后,可以通过查看$ROCKETMQ_HOME/logs/rocketmqlogs/namesrv.log日志文件来确认 NameServer 是否启动成功。如果日志中出现The Name Server boot success字样,则表示 NameServer 启动成功。
5. 启动 Broker:在启动 Broker 之前,需要先设置NAMESRV_ADDR环境变量,指定 NameServer 的地址。然后执行以下命令启动 Broker:
export NAMESRV_ADDR=localhost:9876
nohup mqbroker -n $NAMESRV_ADDR &
同样,可以通过查看$ROCKETMQ_HOME/logs/rocketmqlogs/broker.log日志文件来确认 Broker 是否启动成功。如果日志中出现The broker[broker-a, 127.0.0.1:10911] boot success字样,则表示 Broker 启动成功。
以双主双从异步刷盘集群为例,详细介绍 RocketMQ 的集群部署步骤 :
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
git clone https://github.com/apache/rocketmq.git
进入源码目录,使用 Maven 进行编译:
cd rocketmq
mvn -Prelease-all -DskipTests clean install -U
编译完成后,在distribution/target/rocketmq-{version}-bin-release目录下可以找到编译好的二进制包。
3. 配置 JDK 和 RocketMQ 环境参数:在集群中的每台机器上,都需要安装 JDK 并配置 RocketMQ 的环境变量,具体步骤与单机部署中的配置相同。
4. 配置互信登录:为了方便在集群中的机器之间进行通信和操作,需要配置 SSH 互信登录。在每台机器上执行以下命令生成密钥对:
ssh-keygen -t rsa
然后将公钥添加到其他机器的authorized_keys文件中,实现无密码登录。
5. 配置 broker.conf 文件:在$ROCKETMQ_HOME/conf/2m-2s-async目录下,有默认的集群配置文件。根据实际需求,修改broker-a.properties、broker-a-s.properties、broker-b.properties和broker-b-s.properties文件。例如,对于broker-a.properties文件,需要修改以下关键配置:
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
namesrvAddr=192.168.1.10:9876;192.168.1.11:9876;192.168.1.12:9876
listenPort=10911
storePathRootDir=/app/rocketmq/store
storePathCommitLog=/app/rocketmq/store/commitlog
storePathConsumeQueue=/app/rocketmq/store/consumequeue
storePathIndex=/app/rocketmq/store/index
storeCheckpoint=/app/rocketmq/store/checkpoint
abortFile=/app/rocketmq/store/abort
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
其中,brokerClusterName指定集群名称,brokerName指定 Broker 名称,brokerId为 0 表示 Master,大于 0 表示 Slave,namesrvAddr指定 NameServer 的地址列表,listenPort指定 Broker 的监听端口,storePathRootDir等参数指定消息存储路径,brokerRole指定 Broker 角色为异步复制 Master,flushDiskType指定刷盘方式为异步刷盘。
6. 启动集群:按照以下顺序启动集群中的各个组件:
nohup mqnamesrv &
nohup mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
nohup mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
nohup mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
nohup mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &
启动完成后,可以通过mqadmin clusterList -n {namesrvAddr}命令查看集群状态,确保所有节点都正常运行。
在 RocketMQ 的部署过程中,可能会遇到各种问题,下面列举一些常见问题及解决方案 :
RocketMQ 以其卓越的性能、高可靠性和丰富的功能,在分布式系统中占据着重要地位。其集群架构通过多个核心组件的协同工作,实现了消息的高效存储、传输和消费,为分布式应用提供了强大的消息处理能力 。多种集群模式满足了不同场景下对性能、可用性和数据可靠性的需求,使开发者能够根据实际业务情况灵活选择。
在部署实践中,从单机部署到集群部署,每一步都需要精心准备和操作,确保各个组件的正确配置和稳定运行。同时,对部署过程中可能出现的问题有清晰的认识和有效的解决方案,是保障 RocketMQ 集群顺利运行的关键。
随着分布式系统的不断发展和应用场景的日益丰富,RocketMQ 有望在更多领域发挥重要作用。未来,RocketMQ 可能会在云原生环境中进一步优化,与容器编排工具(如 Kubernetes)更好地集成,实现更加便捷的部署和管理 。在性能方面,将持续提升消息处理的吞吐量和降低延迟,以满足日益增长的大数据量和高并发场景的需求。在功能拓展上,可能会增加更多高级特性,如更灵活的消息过滤、更强大的事务支持等,为开发者提供更丰富的选择和更高效的开发体验 。