RocketMQ集群部署

RocketMQ介绍

创新互联建站 - 大邑服务器托管,四川服务器租用,成都服务器租用,四川网通托管,绵阳服务器托管,德阳服务器托管,遂宁服务器托管,绵阳服务器托管,四川云主机,成都云主机,西南云主机,大邑服务器托管,西南服务器托管,四川/成都大带宽,大带宽服务器,四川老牌IDC服务商

概述

RocketMQ 集群部署

Apache RocketMQ是一个具有低延迟、高性能和高可靠性、万亿级容量,同时具备灵活的、可伸缩性强的分布式消息流处理平台,它由四个部分组成:name servers, brokers, producers 和 consumers。它们所有部分都可以水平扩展避免单点故障,就像上图所示。

名称服集群务 NameServer cluster
NameServer服务提供了轻量级的服务发现和路由。每个NameServer服务记录完整的路由信息,提供一致的读写服务,支持快速存储扩展

代理服务集群 Broker Cluster
Broker通过提供轻量级主题和队列机制来处理消息存储。它们支持Push和Pull模型,包含容错机制(2个副本或3个副本),提供了极强的峰值处理里能力和按照时间顺序存储数以百万记的消息存储能力,此外,代理提供了灾难恢复、丰富的度量统计和警报机制,这些都是在传统的消息传递系统中缺乏的

生产者集群 Producer Cluster
produce支持分布式部署,分布式的produce通过broker集群提供的各种负载均衡策略将消息发送到broker集群中。发送过程支持快速失败是低延迟的。

消费者集群 Consumer Cluster
消费者也支持在推送或者拉取模式下分布式部署,它还支持集群消费和消息广播。提供实时的消息订阅机制,能够满足大多数消费者的需求。RocketMQ的网站为感兴趣的用户提供了一个简单的快速入门指南。

名称服务NameServer

NameServer是一个功能齐全的服务器,主要包括两个功能:
⊙broker 管理,nameserver 接受来自broker集群的注册信息并提供心跳来检测他们是否可用。
⊙路由管理,每一个nameserver都持有关于broker集群和队列的全部路由信息,用来向客户端提供查询。

我们知道 ,rocketMQ客户端(生产者/消费者)会从nameserver查询队列的路由信息,客户端是如何知道nameserver的地址的呢?

有四种方式能够让客户端获取到nameserver的地址:
⊙通过程序,像这样producer.setNamesrvAddr("ip:port")
⊙java 配置项,这么用rocketmq.namesrv.addr
⊙环境变量 NAMESRV_ADDR
⊙HTTP 端点
更多关于nameserver地址发现的详细信息请参考这里  

代理服务 broker server

broker server负责消息的存储传递,消息查询,保证高可用等等。

像下图所示,broker server有一些非常重要的子模块:

RocketMQ 集群部署
⊙remoting(远程) 模块,broker的入口,处理从客户端发起的请求。
⊙client manager(客户端管理),管理各个客户端(生产者/消费者)还有维护消费者主题订阅。
⊙store(存储服务),提供简单的api来在磁盘保持或者查询消息。
⊙HA 高可用服务,提供主从broker的数据同步。
⊙index(索引服务),为消息建立索引提供消息快速查询。

RocketMQ与其他消息队列服务的区别

如下图,列出了 ActiveMQ、Kafka、RocketMQ 三者的区别,详见官方文档

RocketMQ 集群部署

服务器规划

如下表,准备两台服务器,互为主备:

RocketMQ 集群部署

RocketMQ环境准备

1、设置主机hosts

echo "192.168.2.177 rocketmq-nameserver1" >> /etc/hosts
echo "192.168.2.177 rocketmq-master1" >> /etc/hosts
echo "192.168.2.178 rocketmq-nameserver2" >> /etc/hosts
echo "192.168.2.178 rocketmq-master2" >> /etc/hosts

2、准备 JAVA 环境

下载 JAVA 安装包:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

解压下载的 jdk 包到 /usr/local 目录,并配置环境变量

[root@rocketmq-nameserver1 ~]#  vim .bash_profile
export JAVA_HOME=/usr/local/jdk1.8.0_201
export PATH=$PATH:$JAVA_HOME/bin

3、准备 Maven 环境

下载 Maven 安装包:http://maven.apache.org/download.cgi  

下载 bin 包,则直接解压到 /use/local 目录,再修改环境变量

[root@rocketmq-nameserver1 ~]#  vim .bash_profile
export JAVA_HOME=/usr/local/jdk1.8.0_201
export M2_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

RocketMQ部署

下载 RocketMQ 安装包:http://rocketmq.apache.org/dowloading/releases/

解压所下载的 RocketMQ 安装包,进行编译

[root@rocketmq-nameserver1 rocketmq-all-4.4.0]# mvn -Prelease-all -DskipTests clean install –U

此过程受限于网络状况,有可能非常缓慢,请耐心等待。。。。。。

编译完成之后,进入 distribution/target/ 目录,将该目录下的 apache-rocketmq 目录整个复制到 /usr/local 目录下

[root@rocketmq-nameserver1 rocketmq-all-4.4.0]# cd distribution/target/
[root@rocketmq-nameserver1 target]# cp -raf apache-rocketmq /usr/local/rocketmq

进入 /usr/local/rocketmq/conf 目录,修改日志配置文件,将配置文件中的相关日志路径修改为自己设置的路径

[root@rocketmq-nameserver1 conf]# vim logback_broker.xml
[root@rocketmq-nameserver1 conf]# vim logback_namesrv.xml
[root@rocketmq-nameserver1 conf]# vim logback_tools.xml

再进入 2m-2s-async 目录(注意:这里一共三个目录,2m-2s-async为多主多异步复制预配置文件目录,2m-2s-sync为多主多从同步双写预配置文件目录,2m-noslave为双主预配置文件目录),修改 broker 配置文件

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-a.properties
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
brokerIP1=192.168.2.177
brokerIP2=192.168.2.177
listenPort=10911
storePathRootDir=/wdata/rocketmq/store
storePathCommitLog=/wdata/rocketmq/store/commitlog
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

保存退出

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-a-s.properties
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
brokerIP1=192.168.2.178
brokerIP2=192.168.2.178
listenPort=10920
storePathRootDir=/wdata/rocketmq/store-a-s
storePathCommitLog=/wdata/rocketmq/store-a-s/commitlog
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

保存退出

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-b.properties
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
brokerIP1=192.168.2.178
brokerIP2=192.168.2.178
listenPort=10911
storePathRootDir=/wdata/rocketmq/store
storePathCommitLog=/wdata/rocketmq/store/commitlog
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

保存退出

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-b-s.properties
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=1
brokerIP1=192.168.2.177
brokerIP2=192.168.2.177
listenPort=10920
storePathRootDir=/wdata/rocketmq/store-b-s
storePathCommitLog=/wdata/rocketmq/store-b-s/commitlog
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

保存退出

注意:这里的 brokerId 格式为主0从1

进入 /usr/local/rocketmq/bin ,修改 JAVA 虚拟机运行的所占用的内存(这里主要看服务器配置,如果服务器配置较差,建议修改)

[root@rocketmq-nameserver1 bin]# vim runbroker.sh

RocketMQ 集群部署

[root@rocketmq-nameserver1 bin]# vim runserver.sh

RocketMQ 集群部署

修改为上图中红框中所示的内容

编辑 namesrv 服务的配置文件(此步可以忽略,采用系统默认的配置)

[root@rocketmq-nameserver1 conf]# vim /wdata/rocketmq/namesrv/namesrv.conf
rocketmqHome=/usr/local/rocketmq
kvConfigPath=/wdata/rocketmq/namesrv/kvConfig.json
configStorePath=/wdata/rocketmq/namesrv/namesrv.properties
productEnvName=center
clusterTest=false
orderMessageEnable=false
listenPort=9876
serverWorkerThreads=8
serverCallbackExecutorThreads=0
serverSelectorThreads=3
serverOnewaySemaphoreValue=256
serverAsyncSemaphoreValue=64
serverChannelMaxIdleTimeSeconds=120
serverSocketSndBufSize=65535
serverSocketRcvBufSize=65535
serverPooledByteBufAllocatorEnable=true
useEpollNativeSelector=false

主要修改相关的目录以及端口号,其他想不用管

说明:以上配置中所涉及的字段含义,详情请参阅官方文档,这里不错过多说明。

复制文件

将 192.168.2.177 上 /usr/local/rocketmq 整个目录复制到 192.168.2.178 上。

[root@rocketmq-nameserver1 local]# scp -r rocketmq root@192.168.2.178:/usr/local/
[root@rocketmq-nameserver1 local]# scp -r /wdata/rocketmq root@192.168.2.178:/wdata/

此处操作为了方便起见,如果不是很放心,可在另外一台服务器上做上述同样的操作。

启动 RocketMQ

在 192.168.2.177上操作

[root@rocketmq-nameserver1 ~]# nohup /usr/local/rocketmq/bin/mqnamesrv -c /wdata/rocketmq/namesrv/namesrv.conf 2>&1 &
[root@rocketmq-nameserver1 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-a.log 2>&1 &
[root@rocketmq-nameserver1 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-b-s.log 2>&1 &

在 192.168.2.178 上操作

[root@rocketmq-nameserver2 ~]# nohup /usr/local/rocketmq/bin/mqnamesrv -c /wdata/rocketmq/namesrv/namesrv.conf 2>&1 &
[root@rocketmq-nameserver2 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-b.log 2>&1 &
[root@rocketmq-nameserver2 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-a-s.log 2>&1 &

到此,RocketMQ 集群部署完成,为了查看集群的状态,我们可以使用 github 上的图形化开源工具 rocketmq-console 。

下载 rocketmq-console :https://github.com/apache/rocketmq-externals

解压并进入 rocketmq-console 目录,进行编译

[root@rocketmq-nameserver1 opt]# cd rocketmq-externals-master/rocketmq-console/

在编译之前,需要先修改该目录下的 pom.xml 文件

[root@rocketmq-nameserver1 rocketmq-console]# vim pom.xml

RocketMQ 集群部署

将上图中红框内的 4.4.0-SNAPSHOT 修改为 4.4.0,不修改此处,在编译的过程中可能会报错。

编译

[root@rocketmq-nameserver1 rocketmq-console]# mvn clean package -Dmaven.test.skip=true

此过程较为漫长,需耐心等待。。。。。。

等编译完成之后,进入 target/ 目录

[root@rocketmq-nameserver1 rocketmq-console]# cd target/

运行 rocketmq-console-ng-1.0.0.jar 包

[root@rocketmq-nameserver1 target]# java -jar rocketmq-console-ng-1.0.0.jar

RocketMQ 集群部署

如上图,出现 Tomcat started on port(s): 8080 (http) 表示服务开启成功。

然后我们在浏览器中输入 192.168.1.177:8080 查看

RocketMQ 集群部署

如图,出现两主两从,表示我们的集群配置成功


当前文章:RocketMQ集群部署
本文网址:http://myzitong.com/article/gpesii.html