温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

RocketMQ 集群部署

发布时间:2020-06-17 08:02:41 来源:网络 阅读:1995 作者:司徒晓宇 栏目:建站服务器

RocketMQ介绍

概述

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 集群部署

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

编译

[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 集群部署

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI