Linux搭建RocketMQ集群
-
安装配置jdk
必须要有jdk环境,jdk必须要64位,1.7以上 -
下载安装包
地址:http://rocketmq.apache.org/release_notes/release-notes-4.5.2/ -
解压文件到/usr/local
-
进入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 -
创建存储路径
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 -
修改配置文件
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
-
修改日志配置文件(两台服务器)
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 -
修改占用内存大小(两台服务器)
vim /usr/local/rocketmq-all-4.5.2-bin-release/bin/runbroker.sh
-
启动NameServer(两台服务器)
cd /usr/local/rocketmq-all-4.5.2-bin-release/bin
nohup sh mqnamesrv & -
启动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 & -
启动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 & -
查看是否启动成功
输入jps命令,能看到namesrv和broker证明启动成功
-
关闭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上,再次启动则没有报错了
- 点赞
- 收藏
- 分享
- 文章举报
- rocketmq集群搭建
- Rocketmq集群搭建步骤
- RocketMQ集群搭建:从源码开始
- RocketMQ集群搭建
- CentOS7.4上搭建rocketMQ集群
- linux下搭建rocketmq(附服务脚本)
- RocketMQ集群搭建
- Linux下通过Apache搭建Tomcat集群
- rocketmq console 搭建
- zk集群搭建(虚拟机 linux电脑配置)
- 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)
- 搭建RocketMQ踩的坑-内存不足
- linux搭建 solr集群版-第一部分-搭建zookeeper集群
- 1.搭建hadoop集群的linux环境准备
- 搭建rocketmq
- Linux 环境下 Zookeeper 集群环境搭建
- Linux系统下Nginx+keepalived搭建双机热备负载集群
- Linux下Hadoop2.7.1集群环境的搭建(超详细版)
- Linux下搭建tomcat集群全记录
- RedHat Enterprise Linux 6.1(RHEL)搭建ArcGIS 10.1 for Server集群(一)DNS服务器架设