Rocketmq - 3 部署双主环境

部署基于两个服务器,阿里云和腾讯云。阿里云作为broker-a,腾讯云作为broker-b。因为基于实操,与虚拟机不同,且因为服务器平台不同,有出现过不少小毛病。
请注意:阿里云,阿里云由于有安全组功能,对于不在安全组内的端口将会进行屏蔽,会影响rocketmq的启动,所以需要在阿里云的控制台中对应有的rocketmq端口添加安全组规则

1.软件准备

http://rocketmq.apache.org/docs/quick-start/
官网有对其进行详细说明:

  • 建议使用64位操作系统,Linux / Unix / Mac;

  • 64位JDK 1.8+;

  • Maven 3.2.x.

    可选项

  • Git

  • Screen

1.2安装JDK 关于JDK的安装可以查看下列帖子。关于JDK的版本必须是64位的,如果服务器JDK当前版本不是64位了,在运行nameserver的时候将会报异常 https://blog.csdn.net/qq_25881261/article/details/79698252

1.3安装maven 1.3.1 下载

cd /usr/javawork

wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
1.3.2 解压
tar -zxvf apache-maven-3.3.9-bin.tar.gz
1.3.3 设置环境变量
vi /etc/profile
文件末尾添加两行配置:
export M2_HOME=/usr/javawork/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin
退出vi执行命令使其生效:
source /etc/profile
1.3.4 添加alibaba的Maven仓库镜像(下载速度飞快)
vi /usr/javawork/apache-maven-3.3.9/conf/settings.xml
在项下添加镜像信息:
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <mirrorOf>central</mirrorOf>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

1.4 安装Git

yum install git
如果已下载RocketMQ源码包,Git可以无需安装。shell安装脚本中有git pull命令,如果未安装git,会提示command not found,但不影响后面的编译。 如果嫌烦,vi install.sh打开文件删掉 git pull这条命令即可。

1.5 安装screen

yum install screen
screen 非必需,但安装后切换会话非常方便。官方文档中使用了这条命令,所以还是装上较好。 命令介绍:http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

安装RocketMQ

方式1:

单击此处下载4.3.0源代码版本。您也可以从这里下载二进制版本。
下载二进制版本可以直接使用:
通过ftp上传到服务器其中的节点,通过unzip命令对压缩包进行解压

下载源代码版本需要经过编译构建:
对下载的源代码进行解压后,运行命令对其进行编译

mvn -Prelease-all -DskipTests clean install -U

进入目录下distribution/target可以见到apache-rocketmq.tar.gz和apache-rocketmq.zip.根据自己需要,可以选择其中一个压缩包上传到服务器进行解压。该步骤可以服务器运行,也可以在本地运行。

方式2:

在服务器上通过git命令进行下载

git clone https://github.com/apache/rocketmq.git

部署RocketMQ

服务器环境

采用实操,且因为服务器平台不同。将阿里云的服务器作为master1,腾讯云的服务器作为master2

序号 IP 角色 模式
1 阿里云ip nameServer1,brokerServer1 Master1
2 腾讯云ip nameServer2,brokerServer2 Master2

创建配置相关需要的文件夹

创建存储路径 【 两台机器 】
与配置文件中的配置路径同步

mkdir /usr/javawork/rocketmq-all-4.3.0-bin-release/store
mkdir /usr/javawork/rocketmq-all-4.3.0-bin-release/store/commitlog
mkdir /usr/javawork/rocketmq-all-4.3.0-bin-release/store/consumequeue
mkdir/usr/javawork/rocketmq-all-4.3.0-bin-release/store/index

修改配置文件

master1服务器进入rocketmq的根目录,执行以下命令

vim conf/2m-noslave/broker-a.properties

将信息配置成以下样子

#所属集群名字 
brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样 
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
 brokerId=0 #nameServer地址,分号分割

brokerIP1 = 阿里云IP

namesrvAddr=阿里云IP:9876;腾讯云IP:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 
autoCreateTopicEnable=true

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

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

#删除文件时间点,默认凌晨 4点
 deleteWhen=04

#文件保留时间,默认 48 小时 
fileReservedTime=120
#commitLog每个文件的大小默认1G 
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/usr/javawork/rocketmq-all-4.3.0-bin-release/store

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

#消费队列存储路径存储路径

storePathConsumeQueue=/usr/javawork/rocketmq-all-4.3.0-bin-release/store/consumequeue

#消息索引存储路径

storePathIndex=/usr/javawork/rocketmq-all-4.3.0-bin-release/store/index

#checkpoint 文件存储路径

storeCheckpoint=/usr/javawork/rocketmq-all-4.3.0-bin-release/store/checkpoint

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE brokerRole=ASYNC_MASTER

#刷盘方式

#- ASYNC_FLUSH 异步刷盘

#- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#abort 文件存储路径

abortFile=/usr/javawork/apache-rocketmq/store/abort

#限制的消息大小 maxMessageSize=65536

#flushCommitLogLeastPages=4

#flushConsumeQueueLeastPages=2

#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

同样,master2服务器进入rocketmq的根目录,执行以下命令

vim conf/2m-noslave/broker-b.properties

配置文件信息只需要修改brokerName和brokerIP1

brokerName=broker-b
brokerIP1 = 腾讯云IP

修改日志配置文件

在rocketmq的根目录下执行创建logs文件夹

mkdir -p logs

然后执行下列命令,目录路径根据实际情况进行更改

cd /usr/javawork/rocketmq-all-4.3.0-bin-release/conf && sed -i 's#${user.home}#/usr/javawork/rocketmq-all-4.3.0-bin-release#g' *.xml

修改启动脚本参数

虽然是在实操,但是运行的内存仍然超过我的低配服务器。所以需要修改启动脚本参数。两台机器都修改

进入rocketmq安装根目录,执行下列命令

vim bin/runbroker.sh

在打开的配置文件中修改

JAVA_OPT=”${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m”

同样在rocketmq安装根目录,执行下列命令

vim bin/runserver.sh

在打开的配置文件中修改

JAVA_OPT=”${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m”

启动RocketMQ

启动NameServer

分别在两台机器的根目录下输入

nohup sh bin/mqnamesrv &

如果有异常,可以通过打开根目录下的nohup,out进行异常信息的查看,请注意:该输出日志为附加输出。也可以使用命令查看是否有异常

tail -f ~/logs/rocketmqlogs/namesrv.log

如果你没有修改日志配置文件,该命令也作为查看是否启动成功的命令
如果你修改日志配置文件,那么logs目录下的rocketmqlogs将会是你的日志目录,在rocketmq根目录下执行下列命令查看日志

tail -f -n 500 logs/rocketmqlogs/namesrv.log

出现如下信息表示启动成功:
The Name Server boot success. serializeType=JSON
&代表着后台运行

启动Broker

在阿里云服务器master1上的根目录下输入

nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all-4.3.0-bin-release/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

如果有异常,可以通过打开根目录下的nohup,out进行异常信息的查看,请注意:该输出日志为附加输出。也可以使用命令查看是否有异常

tail -f ~/logs/rocketmqlogs/broker.log

如果你没有修改日志配置文件,该命令也作为查看是否启动成功的命令
如果你修改日志配置文件,那么logs目录下的rocketmqlogs将会是你的日志目录,在rocketmq根目录下执行下列命令查看日志

tail -f -n 500 logs/rocketmqlogs/broker.log

出现如下信息表示启动成功:
The Name Server boot success. serializeType=JSON

&代表着后台运行

同理,在腾讯云服务器master2上的根目录下输入

nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all-4.3.0-bin-release/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &

除了使用tail实时查看日志,也可以直接输入jps命令查看是否启动成功

关闭broker和namesrv

如果在使用过程中需要关闭rocketmq,可以使用以下命令

关闭namesrv服务:sh bin/mqshutdown namesrv

关闭broker服务 :sh bin/mqshutdown broker

安装RocketMQ Console

RocketMQ Console是一个控制台网站,可以让程序员直观的看到关于消息队列的相关情况,免除了繁杂的管理员命令。由于RocketMQ已经转移到apache旗下,所以已经没有原生的控制台网站了,可以使用git上的实例进行管理。具体安装步骤如下:

https://www.cnblogs.com/quchunhui/p/7284752.html
https://blog.csdn.net/hqwang4/article/details/79134958

注意:如果安装在阿里云,请在安全组中设置指定款口号指定ip开放

出现问题:

无法启动 Broker
查看 Broker 运行日志:

tail -f ~/logs/rocketmqlogs/broker.log
  • 检查 JDK 版本是否为 64bit 1.6+,否则会报“connect to failed”。
  • 开发环境 Broker 运行的机器内存不小于 2g; runbroker.sh 的 Java 参数最低: -Xms2g
    -Xmx2g -Xmn512m;否则很容易报“java.lang.OutOfMemoryError: Java heap space”。生产
    环境按照官方文档说法是内存越大越好。

测试程序访问异常
com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest1

  • 启动 Broker 时是否加载了配置文件并指定 NameServer。
  • NameServer 和 Broker 所在主机的防火墙是否允许访问。
  • broker 配置文件是否为“autoCreateTopicEnable=true”,有网友说即使这个选项为 true,
    也无法自动创建超过 4 个 Topic,需要手动创建,经测试并未发现此问题,估计新版已修复 Bug。

请注意:示例中的IP和路径要根据自己的情况进行修改。服务器请尽量选用同个平台的服务器,以免发生各种异常现象

猜你喜欢

转载自blog.csdn.net/qq_32020035/article/details/81750433
今日推荐