热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[置顶]【MQ】Centos7搭建双主双从RocketMQ集群

一、前言在前一篇博客中,小编向大家介绍了如何在Centos7中安装RocketMQ。通过这种方法我们可以搭建出来一台母机,通过这台母机来进行克隆搭建出我们的集群。二、搭建环

一、前言

      在前一篇博客中,小编向大家介绍了如何在Centos7中安装RocketMQ。通过这种方法我们可以搭建出来一台母机,通过这台母机来进行克隆搭建出我们的集群。

二、搭建环境
  • Centos7

  • Jdk1.8

  • Rocketmq 3.2.6

  • 需要根据《Centos7安装RocketMQ》搭建一台母机

三、为什么要搭建集群?

      服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。

      可以减少单点故障数量,并且实现了群集化资源的高可用性

      一、集群系统可解决所有的服务器硬件故障,当某一台服务器出现任何故障,如:硬盘、内存、CPU、主板、I/O板以及电源故障,运行在这台服务器上的应用就会切换到其它的服务器上。

      二、集群系统可解决软件系统问题,我们知道,在计算机系统中,用户所使用的是应用程序和数据,而应用系统运行在操作系统之上,操作系统又运行在服务器上。这样,只要应用系统、操作系统、服务器三者中的任何一个出现故障,系统实际上就停止了向客户端提供服务,比如我们常见的软件死机,就是这种情况之一,尽管服务器硬件完好,但服务器仍旧不能向客户端提供服务。而集群的最大优势在于对故障服务器的监控是基于应用的,也就是说,只要服务器的应用停止运行,其它的相关服务器就会接管这个应用,而不必理会应用停止运行的原因是什么。

      三、集群系统可以解决人为失误造成的应用系统停止工作的情况,例如,当管理员对某台服务器操作不当导致该服务器停机,因此运行在这台服务器上的应用系统也就停止了运行。由于集群是对应用进行监控,因此其它的相关服务器就会接管这个应用。

四、Roctmq网络部署图

这里写图片描述

      我们部署的mq集群架构是:双主双从。

      RocketMQ 网络部署特点:

  • Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

  • Broker 部署相对复杂,Broker 分为 Master 与Slave,一个 Master 可以对应多个 Slave,但是一个 Slave 只能对应一个 Master, Master 与Slave 的对应关系通过指定相同的 BrokerName,不同的 BrokerId 来定义, BrokerId 为 0 表示 Master,非 0 表示 Slave。 Master 也可以部署多个。每个 Broker 与Name Server 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 Name Server。

  • Producer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。 Producer 完全无状态,可
    集群部署。

  • Consumer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路由信息,并向提供 Topic 服务的 Master、 Slave 建立长连接,且定时向 Master、 Slave 发送心跳。 Consumer既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。

五、搭建过程

      根据《Centos7安装RocketMQ》我们可以搭建一台可以提供服务的mq。以这台做母机,进行克隆。

      母机信息如下:

      在前面的时候我们搭建好了一台RocketMQ服务器:

Ip brokerName 用途 角色
192.168.137.4 AresBroker1 NameServer,Broker Master

5.1 克隆其他的机器,并修改ip-mac等信息

      通过这一台主机克隆出三台机器,修改相应的信息如下:

Ip brokerName 用途 角色
192.168.137.5 AresBroker1 NameServer ,Broker Slave
192.168.137.6 AresBroker2 NameServer ,Broker Master
192.168.137.7 AresBroker2 NameServer ,Broker Slave

5.2 设置hosts信息

      依次修改每台主机的hosts文件:

vim /etc/hosts

      添加如下信息:

192.168.137.4 mqnameserver1
192.168.137.5 mqnameserver2
192.168.137.6 mqnameserver3
192.168.137.7 mqnameserver4

5.3 修改broker的信息

      Master1 - 192.168.137.4的配置:

[root@localhost bin]# vim broker.p

namesrvAddr=mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876
brokerIP1=192.168.137.4
brokerName=AresBroker1
brokerClusterName=AresCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true

      Slave1 - 192.168.137.5的配置(是Master1的从机):

      说明:

192.168.137.5是192.168.137.4的从机,所以设置
brokerName=AresBroker1是相同的,
brokerId=1 要大于0,表示是从机,
brokerRole=SLAVE表示身份是从机。

[root@localhost bin]# vim broker.p 

namesrvAddr= mqnameserver1:9876; mqnameserver2:9876;mqnameserver3:9876; mqnameserver4:9876
brokerIP1=192.168.137.5
brokerName=AresBroker1
brokerClusterName=AresCluster
brokerId=1
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true

      Master2-192.168.137.6的配置

      说明:

192.168.137.6是另一台主机,
brokerName=AresBroker2 设置名字和另一个主机不一样,
brokerId=0表示为主机,
brokerRole=ASYNC_MASTER表示是主机。

[root@localhost bin]# vim broker.p

namesrvAddr=mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876
brokerIP1=192.168.137.6
brokerName=AresBroker2
brokerClusterName=AresCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true

      Slave2-192.168.137.7配置:
      说明:

192.168.137.7是192.168.137.6的从机,配置中,
brokerName=AresBroker2配置的是broker的名字,要和192.168.137.6的brokerName相同,brokerId=1表示是从机,
brokerRole=SLAVE表示从机。

[root@localhost bin]# vim broker.p


namesrvAddr= mqnameserver1:9876; mqnameserver2:9876;mqnameserver3:9876; mqnameserver4:9876
brokerIP1=192.168.137.7
brokerName=AresBroker2
brokerClusterName=AresCluster
brokerId=1
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true

5.4 依次运行

      调整目录到alibaba-rocketmq/bin下,

cd /usr/src/rocketmq/alibaba-rocketmq/bin

      然后通过

./play.sh

      运行,通过运行jps查看服务启动情况。如果两个服务都启动,就可以了。

这里写图片描述

      如果只有NamesrvStartup启动了,可以通过如下命令启动BrokerStartup:

nohup sh mqbroker -c broker.p

5.5 运行结果

      通过运行rocketmq-console控制台可以看到:表示搭建成功。

这里写图片描述

四、小结

      个人理解,只要搭建了一台服务器,就可以很轻松的搭建出集群,通过克隆虚拟机就可以得到相似的机器,然后通过修改broker.p从而达到配置的目的。

      再次强调Master 与Slave 的对应关系通过指定相同的 BrokerName,不同的 BrokerId 来定义, BrokerId 为 0 表示 Master,非 0 表示 Slave。

      下一篇博客将向大家介绍RocketMQ的使用,包括发送和接收等。


推荐阅读
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • x86 linux的进程调度,x86体系结构下Linux2.6.26的进程调度和切换
    进程调度相关数据结构task_structtask_struct是进程在内核中对应的数据结构,它标识了进程的状态等各项信息。其中有一项thread_struct结构的 ... [详细]
  • Imdevelopinganappwhichneedstogetmusicfilebystreamingforplayinglive.我正在开发一个应用程序,需要通过流 ... [详细]
author-avatar
66桀骜不驯_537
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有