Linux搭建RocketMQ集群

  1. 安装配置jdk
    必须要有jdk环境,jdk必须要64位,1.7以上

  2. 下载安装包
    地址:http://rocketmq.apache.org/release_notes/release-notes-4.5.2/

  3. 解压文件到/usr/local

  4. 进入conf文件
    可以看到有3个文件夹
    在这里插入图片描述
    2m-2s-async:多Master多Slave模式,异步复制
    2m-2s-sync:多Master多Slave模式,同步双写
    2m-noslave:多Master模式
    这里的配置选择2m-noslave模式,我只配置了两台服务器
    服务器ip分别为:172.16.120.143,172.16.120.144

  5. 创建存储路径
    mkdir /usr/local/rocketmq-all-4.5.2-bin-release/store
    mkdir /usr/local/rocketmq-all-4.5.2-bin-release/store/commitlog
    mkdir /usr/local/rocketmq-all-4.5.2-bin-release/store/consumequeue
    mkdir /usr/local/rocketmq-all-4.5.2-bin-release/store/index

  6. 修改配置文件
    在这里插入图片描述
    broker-a.properties配置

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#brokerClusterName=DefaultCluster
#brokerName=broker-a
#brokerId=0
#deleteWhen=04
#fileReservedTime=48
#brokerRole=ASYNC_MASTER
#flushDiskType=ASYNC_FLUSH

# 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
# 所属集群名字
brokerClusterName=rocketmq-cluster

# broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a

# 0 表示 Master,>0 表示 Slave
brokerId=0

# 删除文件时间点,默认凌晨4点。24小时制,单位小时
deleteWhen=04

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

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

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

# 文件保留时间,默认 72 小时。根据业务情况调整
fileReservedTime=168

# Broker 对外服务的监听端口
listenPort=10911

# nameServer地址,分号分割,这里写自己需要做集群的两台服务器的地址
namesrvAddr=172.16.120.143:9876;172.16.120.144:9876

# Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
# 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况
下可以人工配置。
brokerIP1=172.16.120.144

#存储路径
storePathRootDir==/usr/local/rocketmq-all-4.5.2-bin-release/store

# commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.5.2-bin-release/store/commitlog

# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq-all-4.5.2-bin-release/store/consumequeue

#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/store/index

#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/store/index

# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#限制的消息大小
maxMessageSize=65536

# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

broker-b.properties配置

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#brokerClusterName=DefaultCluster
#brokerName=broker-a
#brokerId=0
#deleteWhen=04
#fileReservedTime=48
#brokerRole=ASYNC_MASTER
#flushDiskType=ASYNC_FLUSH

# 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
# 所属集群名字
brokerClusterName=rocketmq-cluster

# broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b

# 0 表示 Master,>0 表示 Slave
brokerId=0

# 删除文件时间点,默认凌晨4点。24小时制,单位小时
deleteWhen=04

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

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

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

# 文件保留时间,默认 72 小时。根据业务情况调整
fileReservedTime=168

# Broker 对外服务的监听端口
listenPort=10911

# nameServer地址,分号分割
namesrvAddr=172.16.120.143:9876;172.16.120.144:9876

# Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
# 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况
下可以人工配置。
brokerIP1=172.16.120.144

#存储路径
storePathRootDir==/usr/local/rocketmq-all-4.5.2-bin-release/store

# commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.5.2-bin-release/store/commitlog

# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq-all-4.5.2-bin-release/store/consumequeue

#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/store/index

#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/store/index

# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#限制的消息大小
maxMessageSize=65536

# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
  1. 修改日志配置文件(两台服务器)
    mkdir -p /usr/local/rocketmq-all-4.5.2-bin-release/logs
    cd /usr/local/rocketmq-all-4.5.2-bin-release/conf && sed -i ‘s#${user.home}#/usr/local/rocketmq-all-4.5.2-bin-release#g’ *.xml

  2. 修改占用内存大小(两台服务器)
    vim /usr/local/rocketmq-all-4.5.2-bin-release/bin/runbroker.sh
    在这里插入图片描述

  3. 启动NameServer(两台服务器)
    cd /usr/local/rocketmq-all-4.5.2-bin-release/bin
    nohup sh mqnamesrv &

  4. 启动172.16.120.143的BrokerServer
    cd /usr/local/rocketmq-all-4.5.2-bin-release/bin
    nohup sh mqbroker -c /usr/local/rocketmq-all-4.5.2-bin-release/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

  5. 启动172.16.120.144的BrokerServer
    cd /usr/local/rocketmq-all-4.5.2-bin-release/bin
    nohup sh mqbroker -c /usr/local/rocketmq-all-4.5.2-bin-release/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &

  6. 查看是否启动成功
    输入jps命令,能看到namesrv和broker证明启动成功
    在这里插入图片描述

  7. 关闭rocketmq
    cd /usr/local/rocketmq-all-4.5.2-bin-release/bin/
    关闭namesrv服务:sh mqshutdown namesrv
    关闭broker服务:sh mqshutdown broker

简单测试

  • 加入依赖

    	<dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>
    
  • 创建生产者

    public class Producer {
    
        public static void main(String[] args) throws MQClientException {
            //1、分组
            DefaultMQProducer producer = new DefaultMQProducer("rmq-group");
            //2、服务器集群地址
            producer.setNamesrvAddr("172.16.120.143:9876;172.16.120.144:9876");
            producer.setInstanceName("producer");
            producer.start();
            try {
                for (int i=0;i<10;i++){
                    Thread.sleep(1000);
                    Message message = new Message("my_topic","tagA",("mytopic"+i).getBytes());
                    SendResult result = producer.send(message);
                    System.out.println(result.toString());
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            producer.shutdown();
        }
    }
    
  • 创建消费者

    public class Consumer {
    
        public static void main(String[] args) throws MQClientException {
            DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("rmq-group");
            consumer.setNamesrvAddr("172.16.120.143:9876;172.16.120.144:9876");
            consumer.setInstanceName("consumer");
            consumer.subscribe("my_topic","tagA");
            consumer.registerMessageListener(new MessageListenerConcurrently() {
                @Override
                public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
                    for (MessageExt messageExt:list){
                        String msgId = messageExt.getMsgId();
                        System.out.println("msgId:"+msgId+",body:"+new String(messageExt.getBody()));
                    }
    
                    //消费状态:1、消费成功;2、消费失败
                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                }
            });
            consumer.start();
            System.out.println("Consumer Started");
    
        }
    }
    

遇到的问题:
启动测试代码的时候报错:org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, my_topic

  • 无法创建topic,Producer没有正确连接到Name Server
  • 我这里是因为没有配置jdk的环境变量,正确配置环境变量且关闭防火墙
  • 在bin目录下执行命令sh mqadmin clusterList -n localhost:9876 如果看到
    在这里插入图片描述
    证明证明已经连接到nameserver上,再次启动则没有报错了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要搭建RocketMQ集群,可以使用Docker容器化技术来实现。以下是搭建RocketMQ集群的步骤: 1. 安装Docker和Docker Compose 2. 创建一个Docker Compose文件,定义RocketMQ集群的配置和服务 3. 在Docker Compose文件中定义三个服务:NameServer、Broker和Console 4. 配置NameServer服务,指定NameServer的端口和集群名称 5. 配置Broker服务,指定Broker的端口、NameServer地址和集群名称 6. 配置Console服务,指定Console的端口和NameServer地址 7. 启动Docker Compose,创建RocketMQ集群 8. 使用RocketMQ Console管理和监控集群 以上是搭建RocketMQ集群的基本步骤,具体的实现细节可以参考RocketMQ官方文档和Docker官方文档。 ### 回答2: RocketMQ是一个 Apache 开源的分布式消息传递系统,在分布式应用中广泛应用。它具有高可用性、高并发性、高性能、可扩展性等优点。Docker 是一种容器化技术,它可以将应用程序及其依赖项打包成一个 Docker 容器,从而使应用程序在运行时具有一致的环境。这就为 RocketMQ 集群搭建提供了很大的便利。这里我们就以 Docker 为基础,来讲解如何搭建 RocketMQ 集群。 第一步,创建 Dockerfile 我们首先需要创建 Dockerfile,该文件用于指导 Docker 构建 RocketMQ 集群。以下是 Dockerfile 内容: FROM java:8-jre ENV ROCKETMQ_VERSION=4.3.2 ENV ROCKETMQ_HOME=/opt/rocketmq-${ROCKETMQ_VERSION} ADD rocketmq-all-${ROCKETMQ_VERSION}-bin-release.tar.gz /opt RUN ln -s ${ROCKETMQ_HOME}/bin/mqnamesrv /usr/local/bin && ln -s ${ROCKETMQ_HOME}/bin/mqbroker /usr/local/bin CMD cd ${ROCKETMQ_HOME}/bin && nohup sh mqnamesrv & CMD cd ${ROCKETMQ_HOME}/bin && sleep 5 && sh mqbroker -n namesrv:9876 autoCreateTopicEnable=true 第二步,构建 Docker image 我们使用以下命令构建 Docker image: $ docker build -t rocketmq:4.3.2 . 第三步,运行容器 接下来在一台机器上启动该镜像的多个容器,每个容器都要有一个不同的名字和 IP 地址,这样它们之间才能通信。RocketMQ 集群需要两个组件:NameServer 和 Broker。 启动 NameServer 容器: $ docker run --name rmqnamesrv -p 9876:9876 -d rocketmq:4.3.2 sh mqnamesrv 启动 Broker 容器: $ docker run --name rmqbroker -p 10911:10911 -p 10909:10909 \ -e "NAMESRV_ADDR=192.168.1.100:9876;192.168.1.101:9876" \ -e "JAVA_OPTS=-Duser.home=/opt" \ --link rmqnamesrv:namesrv \ -d rocketmq:4.3.2 -e "NAMESRV_ADDR" 用于指定 NameServer 的地址,并以分号分隔;-e "JAVA_OPTS" 用于指定 JAVA_HOME 路径。 第四步,测试 RocketMQ 集群 我们可以使用以下命令测试RocketMQ 集群是否正常: $ docker exec -it rmqbroker sh mqadmin clusterList -n namesrv:9876 输出如下: Cluster Name: DefaultCluster Cluster Status: OK 至此,我们成功搭建RocketMQ 集群RocketMQ 集群搭建十分简单,只需按照上述步骤操作即可。对于生产环境,需要更加细致地考虑配置和优化。 ### 回答3: RocketMQ是一款开源的分布式消息中间件,它使用广泛且可靠,尤其是应用在高并发场景下。而Docker则是现在非常火热的容器化技术,它可以轻松的实现RocketMQ集群部署。下面,我们将介绍如何使用Docker搭建RocketMQ集群。 首先要做的是创建一个Docker容器并安装RocketMQ,容器可以复制多个并形成集群。在这个过程中,我们可以使用开源的RocketMQ容器来作为我们的基础镜像。我们可以使用docker pull指令从docker hub拉取RocketMQ官方镜像,然后运行docker run命令将容器启动起来。启动容器时,需要指定一些参数以方便配置RocketMQ。例如: docker run -d --name rmqnamesrv --restart=always -p 9876:9876 -v /mnt/docker/namesrv/logs:/root/logs -e "MAX_POSSIBLE_HEAP=100000000" -e "JAVA_OPT_EXT=-server -Xms512m -Xmx512m -Xmn256m" rocketmqinc/rocketmq:4.3.2 sh mqnamesrv 该命令意味着我们正在创建一个名为rmqnamesrv的容器,并将容器的5672端口映射到宿主机的5672端口,还为容器设置了一个存储卷用于存储RocketMQ的日志,以及设置了Java运行参数等。 类似于namesrv容器,我们还可以使用该命令创建broker容器,以实现RocketMQ集群,我们可以在同一台主机上启动多个容器,也可以在多台主机上启动多个容器,并连接它们的端口,从而实现分布式部署模式。 接下来,我们需要进行配置操作,通过修改配置文件来允许程序在集群环境中工作。例如修改broker的配置文件broker.conf,配置完后需要将该文件映射到相关容器中,以使配置生效。 最后,我们需要将Docker配置成依据我们指定的规则,在多个容器之间启动和停止,从而使整个集群能够随时运行和维护。这意味着我们需要创建脚本和服务来管理容器的启动和停止,并处理容器之间的通信,以此表现Docker的自动化管理。这可以通过Docker Compose来实现,该工具使我们能够启动和停止多个容器,并将它们组织成服务。 总之,通过使用Docker来搭建RocketMQ集群,使得我们不必关心繁琐的安装和配置过程,它简化了部署,增强了系统的可维护性和可扩展性。当然,要加强对Docker和RocketMQ的学习,熟悉更多命令和配置以适应不同场景下的构建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值