Rocketmq - 2 部署双主环境

部署基于两个服务器,阿里云和腾讯云。阿里云作为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 下载

<span style="color:#000000"><code>cd /usr/javawork

wget http://mirrors<span style="color:#009900">.hust</span><span style="color:#009900">.edu</span><span style="color:#009900">.cn</span>/apache/maven/maven-<span style="color:#006666">3</span>/<span style="color:#006666">3.3</span><span style="color:#006666">.9</span>/binaries/apache-maven-<span style="color:#006666">3.3</span><span style="color:#006666">.9</span>-bin<span style="color:#009900">.tar</span><span style="color:#009900">.gz</span></code></span>
  • 1
  • 2
  • 3

1.3.2 解压

<span style="color:#000000"><code>tar -zxvf apache-maven<span style="color:#4f4f4f">-</span><span style="color:#006666">3.3</span><span style="color:#006666">.9</span>-bin<span style="color:#4f4f4f">.</span>tar<span style="color:#4f4f4f">.</span>gz</code></span>
  • 1

1.3.3 设置环境变量

<span style="color:#000000"><code>vi /etc/profile</code></span>
  • 1

文件末尾添加两行配置:

<span style="color:#000000"><code><span style="color:#000088">export</span> M2_HOME=/usr/javawork/apache-maven-<span style="color:#006666">3.3</span>.<span style="color:#006666">9</span>
<span style="color:#000088">export</span> PATH=<span style="color:#009900">$PATH</span>:<span style="color:#009900">$M2_HOME</span>/bin</code></span>
  • 1
  • 2

退出vi执行命令使其生效:

<span style="color:#000000"><code><span style="color:#4f4f4f">source</span> /etc/profile</code></span>
  • 1

1.3.4 添加alibaba的Maven仓库镜像(下载速度飞快)

<span style="color:#000000"><code>vi /usr/javawork/apache-maven<span style="color:#4f4f4f">-</span><span style="color:#006666">3.3</span><span style="color:#006666">.9</span>/conf/settings<span style="color:#4f4f4f">.</span><span style="color:#4f4f4f">xml</span></code></span>
  • 1

在项下添加镜像信息:

<span style="color:#000000"><code><span style="color:#006666"><<span style="color:#4f4f4f">mirror</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">id</span>></span>alimaven<span style="color:#006666"></<span style="color:#4f4f4f">id</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">name</span>></span>aliyun maven<span style="color:#006666"></<span style="color:#4f4f4f">name</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">mirrorOf</span>></span>central<span style="color:#006666"></<span style="color:#4f4f4f">mirrorOf</span>></span>
    <span style="color:#006666"><<span style="color:#4f4f4f">url</span>></span>http://maven.aliyun.com/nexus/content/groups/public/<span style="color:#006666"></<span style="color:#4f4f4f">url</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">mirror</span>></span></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.4 安装Git

<span style="color:#000000"><code>yum <span style="color:#000088">install</span> git</code></span>
  • 1

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

1.5 安装screen

<span style="color:#000000"><code>yum <span style="color:#000088">install</span> screen</code></span>
  • 1

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

安装RocketMQ

 

方式1:

 

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

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

<span style="color:#000000"><code>mvn -Prelease-all -DskipTests clean install -U</code></span>
  • 1

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

 

方式2:

 

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

<span style="color:#000000"><code>git <span style="color:#000088">clone</span> https:<span style="color:#880000">//github.com/apache/rocketmq.git</span></code></span>
  • 1

部署RocketMQ

 

服务器环境

 

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

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

 

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

 

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

<span style="color:#000000"><code>mkdir /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store
mkdir /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/commitlog
mkdir /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/consumequeue
mkdir/usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/index</code></span>
  • 1
  • 2
  • 3
  • 4

 

修改配置文件

 

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

<span style="color:#000000"><code>vim conf/<span style="color:#006666">2</span>m-noslave/broker-a<span style="color:#4f4f4f">.</span>properties</code></span>
  • 1

将信息配置成以下样子

<span style="color:#000000"><code><span style="color:#009900">#所属集群名字 </span>
brokerClusterName=rocketmq-cluster

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

brokerIP1 = 阿里云IP

namesrvAddr=阿里云IP:<span style="color:#006666">9876</span>;腾讯云IP:<span style="color:#006666">9876</span>

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

<span style="color:#009900">#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 </span>
autoCreateSubscriptionGroup=<span style="color:#006666">true</span>

<span style="color:#009900">#Broker 对外服务的监听端口 </span>
listenPort=<span style="color:#006666">10911</span>

<span style="color:#009900">#删除文件时间点,默认凌晨 4点</span>
 deleteWhen=<span style="color:#006666">04</span>

<span style="color:#009900">#文件保留时间,默认 48 小时 </span>
fileReservedTime=<span style="color:#006666">120</span>
<span style="color:#009900">#commitLog每个文件的大小默认1G </span>
mapedFileSizeCommitLog=<span style="color:#006666">1073741824</span>

<span style="color:#009900">#ConsumeQueue每个文件默认存30W条,根据业务情况调整</span>

mapedFileSizeConsumeQueue=<span style="color:#006666">300000</span>
<span style="color:#009900">#destroyMapedFileIntervalForcibly=120000</span>
<span style="color:#009900">#redeleteHangedFileInterval=120000</span>

<span style="color:#009900">#检测物理文件磁盘空间</span>

diskMaxUsedSpaceRatio=<span style="color:#006666">88</span>

<span style="color:#009900">#存储路径</span>

storePathRootDir=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store

<span style="color:#009900">#commitLog 存储路径 </span>
storePathCommitLog=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/commitlog

<span style="color:#009900">#消费队列存储路径存储路径</span>

storePathConsumeQueue=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/consumequeue

<span style="color:#009900">#消息索引存储路径</span>

storePathIndex=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/index

<span style="color:#009900">#checkpoint 文件存储路径</span>

storeCheckpoint=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/checkpoint

<span style="color:#009900">#Broker 的角色</span>

<span style="color:#009900">#- ASYNC_MASTER 异步复制Master</span>

<span style="color:#009900">#- SYNC_MASTER 同步双写Master</span>

<span style="color:#009900">#- SLAVE brokerRole=ASYNC_MASTER</span>

<span style="color:#009900">#刷盘方式</span>

<span style="color:#009900">#- ASYNC_FLUSH 异步刷盘</span>

<span style="color:#009900">#- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH</span>

<span style="color:#009900">#checkTransactionMessageEnable=false</span>

<span style="color:#009900">#abort 文件存储路径</span>

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

<span style="color:#009900">#限制的消息大小 maxMessageSize=65536</span>

<span style="color:#009900">#flushCommitLogLeastPages=4</span>

<span style="color:#009900">#flushConsumeQueueLeastPages=2</span>

<span style="color:#009900">#flushCommitLogThoroughInterval=10000</span>
<span style="color:#009900">#flushConsumeQueueThoroughInterval=60000</span>
</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

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

<span style="color:#000000"><code>vim conf/<span style="color:#006666">2</span>m-noslave/broker-b<span style="color:#4f4f4f">.</span>properties</code></span>
  • 1

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

<span style="color:#000000"><code>brokerName=broker-b
brokerIP1 = 腾讯云IP</code></span>
  • 1
  • 2

 

修改日志配置文件

 

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

<span style="color:#000000"><code><span style="color:#000088">mkdir</span> -p logs</code></span>
  • 1

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

<span style="color:#000000"><code>cd /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/conf <span style="color:#4f4f4f">&&</span> sed -i <span style="color:#009900">'s#${user.home}#/usr/javawork/rocketmq-all-4.3.0-bin-release#g'</span> <span style="color:#4f4f4f">*</span><span style="color:#4f4f4f">.</span><span style="color:#4f4f4f">xml</span></code></span>
  • 1

 

修改启动脚本参数

 

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

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

<span style="color:#000000"><code>vim bin/runbroker<span style="color:#009900">.sh</span></code></span>
  • 1

在打开的配置文件中修改

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

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

<span style="color:#000000"><code>vim bin/runserver<span style="color:#009900">.sh</span></code></span>
  • 1

在打开的配置文件中修改

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

启动RocketMQ

 

启动NameServer

 

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

<span style="color:#000000"><code>nohup sh bin/mqnamesrv &</code></span>
  • 1

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

<span style="color:#000000"><code>tail -f ~/logs/rocketmqlogs/namesrv<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
  • 1

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

<span style="color:#000000"><code>tail -f -n <span style="color:#006666">500</span> logs/rocketmqlogs/namesrv<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
  • 1

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

 

启动Broker

 

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

<span style="color:#000000"><code>nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/conf/<span style="color:#006666">2</span>m-noslave/broker-a<span style="color:#4f4f4f">.</span>properties <span style="color:#4f4f4f">></span>/dev/<span style="color:#4f4f4f">null</span> <span style="color:#006666">2</span><span style="color:#4f4f4f">>&</span><span style="color:#006666">1</span> <span style="color:#4f4f4f">&</span></code></span>
  • 1

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

<span style="color:#000000"><code>tail -f ~/logs/rocketmqlogs/broker<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
  • 1

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

<span style="color:#000000"><code>tail -f -n <span style="color:#006666">500</span> logs/rocketmqlogs/broker<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
  • 1

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

&代表着后台运行

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

<span style="color:#000000"><code>nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/conf/<span style="color:#006666">2</span>m-noslave/broker-b<span style="color:#4f4f4f">.</span>properties <span style="color:#4f4f4f">></span>/dev/<span style="color:#4f4f4f">null</span> <span style="color:#006666">2</span><span style="color:#4f4f4f">>&</span><span style="color:#006666">1</span> <span style="color:#4f4f4f">&</span></code></span>
  • 1

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

 

关闭broker和namesrv

 

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

<span style="color:#000000"><code>关闭namesrv服务:sh bin/mqshutdown namesrv

关闭broker服务 :sh bin/mqshutdown broker</code></span>
  • 1
  • 2
  • 3

安装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 运行日志:

<span style="color:#000000"><code>tail -f ~/logs/rocketmqlogs/broker<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
  • 1
  • 检查 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和路径要根据自己的情况进行修改。服务器请尽量选用同个平台的服务器,以免发生各种异常现象

http://www.cgpwyj.cn/
http://www.peacemind.com.cn/
http://www.tasknet.com.cn/
http://www.metroworld.com.cn/
http://www.cngodo.cn/
http://www.gzrdbp.cn/
http://www.dnapt.cn/
http://www.zgxxyp.cn/ 
http://www.sjjdvr.cn/ 
http://www.sujinkeji.cn/
http://www.zsjxbd.cn/
http://www.yesgas.cn/
http://www.quickpass.sh.cn/
http://www.jspcrm.cn/
http://www.yjdwpt.cn/
http://www.henanwulian.cn/
http://www.hhrshh.cn/
http://www.gpgold.cn/
http://www.jingzhuiyou.cn/

猜你喜欢

转载自blog.csdn.net/qq_38462207/article/details/81810560