搜索内容

  • 主页
  • 未分类
  • RocketMQ 集群部署

    RocketMQ介绍

    概述

    image

    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有一些非常重要的子模块:

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

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

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

    image

    服务器规划

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

    image

    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

    image

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

    image

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

    编辑 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

    image

    将上图中红框内的 <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

    image

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

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

    image

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

    转载于:https://blog.51cto.com/4746316/2374454

    THE END
    < <上一篇
    下一篇>>