`

Rabbitmq高可用设计思路

 
阅读更多
Rabbitmq高可用设计思路

设计保证:
1、消息不丢失(将消息存储到磁盘)。Rabbitmq服务器分为内存服务器和磁盘服务器,若你需要你的消息服务器保证消息不丢失,则将消息保存到磁盘,是磁盘消息。
如何将消息设置为磁盘消息:
A.将消息的投递模式设置为2(持久模式)
BasicProperties.deliveryMode = 2
B.发送到持久化的交换机

C.存储到持久化的队列中
消息入磁盘,可以免于系统重启(宕机)。

2、集群(高可用)。Rabbitmq集群,可以防止一些rabbitmq服务器宕机后,消息服务器不可用的情况。消息服务器集群后,有一个需要决定的事情,就是消息实体放在一个rabbitmq节点还是多个节点。若存放在一个服务器节点上,则此节点宕机后,虽然可以将消息设置成持久消息(磁盘节点),使得消息不丢失。但是存在一个问题就是这些消息只有当节点重新加入到了集群,这些消息才会被发现,并重新推送出去,这样会让消息延时。还有一个策略是将消息复制,存放在多个(或所有)的节点中去。这样可以避免其中一个节点宕机,使得其上面的消息跟着消失。虽然rabbitmq提供了你指定复制消息到哪几个节点上面去。但是这样会让代码耦合着这些配置。所以建议使用全部节点复制。

综上所述:建议使用2~3个节点做为一个集群,其中一个节点作为磁盘节点,另外的作为内存节点
首先:消息在所有的节点进行复制。其次:磁盘节点将消息进行入磁盘保存,另外的内存节点仅仅是将消息保存在内存中。而且客户端的链接尽量都去链接内存节点。

集群中,当节点宕机后,客户端需要重新链接到集群中的别的节点去。这里有两种方案解决。推荐第二种:
1、将所有的节点做成一个配置文件,在程序内部完成负载均衡。程序里面,当得知rabbitmq 服务器节点宕掉了后,需要自己去重连到集群中的别的服务器。而且还得自己去实现负载均衡。
2、将负载均衡部分独立出来,使用第三方开源库来执行。在集群服务器前面加一个代理(haproxy、lvs)负载均衡。客户端只需要配置一个地址(及代理地址),代理会自动的管理后方的集群服务器的状态。当rabbitmq节点宕掉了后,我们客户端会得到一个通知(异常),那么我们还是通过去连接到代理,由代理为我们找到一个可用的节点(具有负载均衡)。这样就将一个复杂的问题解决了。

代理服务器始终是一个单点,这样使用上面的第二种解决方案,又将我们带回到了灾难区。这时候,我们建立代理服务器主机和备机,实现高可用:
架构图如下:



使用keepalived实现双机热备




通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。
下面来以keepalived结合tomcat来实现一个web服务器的双机热备。
keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。
我们在本文中的测试环境如下
两台物理服务器和一个虚拟服务器(vip):
master:redhat 2.6.18-53.el5  192.168.8.4
backup: redhat 2.6.18-53.el5  192.168.8.6
vip: 192.168.8.100
测试环境的网络topology图如下:


节点A 192.168.8.4 (主节点), 节点B 192.168.8.6(备用节点),虚拟IP(对外提供服务的IP 192.168.8.100)
在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。
当主节点不可用时,备用节点接管虚拟IP(即虚拟IP漂移至节点B),提供正常服务。
keepalived的原理可以这样简单理解:
keepalived安装在两台物理服务器上,并相互监控对方是否在正常运行。
当节点A正常的时候:节点A上的keepalived会将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点A网卡的MAC地址
图中的其它电脑如客户端和NodeB会更新自己的ARP表,对应192.168.8.100的MAC地址=节点A网卡的MAC地址。
当节点A发生故障的时候,节点B上的keepalived会检测到,并且将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点B网卡的MAC地址
图中的其它电脑如客户端会更新自己的ARP表,对应192.168.8.100的MAC地址=节点B网卡的MAC地址。

1,在主备机器上安装keepalived,
步骤如下:下载keepalived-1.1.15.tar.gz,然后解压安装
#tar zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure
#make
#make install
2,配置keepalived
配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:
global_defs { 
    router_id NodeA 

vrrp_instance VI_1 { 
    state MASTER    #设置为主服务器 
    interface eth0  #监测网络接口 
    virtual_router_id 51  #主、备必须一样 
    priority 100   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高) 
    advert_int 1   #VRRP Multicast广播周期秒数 
    authentication { 
    auth_type PASS  #VRRP认证方式,主备必须一致 
    auth_pass 1111   #(密码) 

virtual_ipaddress { 
    192.168.8.100/24  #VRRP HA虚拟地址 



备用节点的配置如下:
global_defs { 
    router_id NodeB 

vrrp_instance VI_1 { 
    state BACKUP    #设置为主服务器 
    interface eth0  #监测网络接口 
    virtual_router_id 51  #主、备必须一样 
    priority 90   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高) 
    advert_int 1   #VRRP Multicast广播周期秒数 
    authentication { 
    auth_type PASS  #VRRP认证方式,主备必须一致 
    auth_pass 1111   #(密码) 

virtual_ipaddress { 
    192.168.8.100/24  #VRRP HA虚拟地址 


Keepalived实现思路:
keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
  Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器
  发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。
  Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
  Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
vip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP。




Keepalived介绍
Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
1       +-------------VIP(192.168.0.7)------------------+
2       |                                   |                           | 
3       |                                   |                           | 
4 server(MASTER) <----keepalived----> server(BACKUP)
5 (192.168.0.1)                                      (192.168.0.2)
keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍一下VRRP的原理。
VRRP协议简介
在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:
·        在主机上使用动态路由协议(RIP、OSPF等)
·        在主机上配置静态路由
很明显,在主机上配置动态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点。
VRRP的目的就是为了解决静态路由单点故障问题。
VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。
工作机制
在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如 拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址 224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由 器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来 说,这种主从的切换是透明的。
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRPAdvertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。
由于安全性考虑,VRRP包使用了加密协议进行加密。
==========================================
vrrp简介
随着Internet的迅猛发展,基于网络的应用逐渐增多。这就对网络的可靠性提出了越来越高的要求。斥资对所有网络设备进行更新当然是一种很好的可靠性解决方案;但本着保护现有投资的角度考虑,可以采用廉价冗余的思路,在可靠性和经济性方面找到平衡点。

  虚拟路由冗余协议就是一种很好的解决方案。在该协议中,对共享多存取访问介质(如以太网)上终端IP设备的默认网关(Default Gateway)进行冗余备份,从而在其中一台路由设备宕机时,备份路由设备及时接管转发工作,向用户提供透明的切换,提高了网络服务质量。 

一、协议概述

  在基于TCP/IP协议的网络中,为了保证不直接物理连接的设备之间的通信,必须指定路由。目前常用的指定路由的方法有两种:一种是通过路由协议(比如:内部路由协议RIP和OSPF)动态学习;另一种是静态配置。在每一个终端都运行动态路由协议是不现实的,大多客户端操作系统平台都不支持动态路由协议,即使支持也受到管理开销、收敛度、安全性等许多问题的限制。因此普遍采用对终端IP设备静态路由配置,一般是给终端设备指定一个或者多个默认网关(Default Gateway)。静态路由的方法简化了网络管理的复杂度和减轻了终端设备的通信开销,但是它仍然有一个缺点:如果作为默认网关的路由器损坏,所有使用该网关为下一跳主机的通信必然要中断。即便配置了多个默认网关,如不重新启动终端设备,也不能切换到新的网关。采用虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP)可以很好的避免静态指定网关的缺陷。

  在VRRP协议中,有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。该虚拟路由器对外表现为一个具有唯一固定IP地址和MAC地址的逻辑路由器。处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器。VRRP协议使用选择策略从路由器组中选出一台作为主控,负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。当由于某种原因主控路由器发生故障时,备份路由器能在几秒钟的时延后升级为主路由器。由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的。 

二、工作原理

  一个VRRP路由器有唯一的标识:VRID,范围为0—255。该路由器对外表现为唯一的虚拟MAC地址,地址的格式为00-00-5E-00-01-[VRID]。主控路由器负责对ARP请求用该MAC地址做应答。这样,无论如何切换,保证给终端设备的是唯一一致的IP和MAC地址,减少了切换对终端设备的影响。

  VRRP控制报文只有一种:VRRP通告(advertisement)。它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内。这保证了VRID在不同网络中可以重复使用。为了减少网络带宽消耗只有主控路由器才可以周期性的发送VRRP通告报文。备份路由器在连续三个通告间隔内收不到VRRP或收到优先级为0的通告后启动新的一轮VRRP选举。

  在VRRP路由器组中,按优先级选举主控路由器,VRRP协议中优先级范围是0—255。若VRRP路由器的IP地址和虚拟路由器的接口IP地址相同,则称该虚拟路由器作VRRP组中的IP地址所有者;IP地址所有者自动具有最高优先级:255。优先级0一般用在IP地址所有者主动放弃主控者角色时使用。可配置的优先级范围为1—254。优先级的配置原则可以依据链路的速度和成本、路由器性能和可靠性以及其它管理策略设定。主控路由器的选举中,高优先级的虚拟路由器获胜,因此,如果在VRRP组中有IP地址所有者,则它总是作为主控路由的角色出现。对于相同优先级的候选路由器,按照IP地址大小顺序选举。VRRP还提供了优先级抢占策略,如果配置了该策略,高优先级的备份路由器便会剥夺当前低优先级的主控路由器而成为新的主控路由器。

  为了保证VRRP协议的安全性,提供了两种安全认证措施:明文认证和IP头认证。明文认证方式要求:在加入一个VRRP路由器组时,必须同时提供相同的VRID和明文密码。适合于避免在局域网内的配置错误,但不能防止通过网络监听方式获得密码。IP头认证的方式提供了更高的安全性,能够防止报文重放和修改等攻击。

三、 应用实例

  最典型的VRRP应用:RTA、RTB组成一个VRRP路由器组,假设RTB的处理能力高于RTA,则将RTB配置成IP地址所有者,H1、H2、H3的默认网关设定为RTB。则RTB成为主控路由器,负责ICMP重定向、ARP应答和IP报文的转发;一旦RTB失败,RTA立即启动切换,成为主控,从而保证了对客户透明的安全切换。

  在VRRP应用中,RTA在线时RTB只是作为后备,不参与转发工作,闲置了路由器RTA和链路L1。通过合理的网络设计,可以到达备份和负载分担双重效果。让RTA、RTB同时属于互为备份的两个VRRP组:在组1中RTA为IP地址所有者;组2中RTB为IP地址所有者。将H1的默认网关设定为RTA;H2、H3的默认网关设定为RTB。这样,既分担了设备负载和网络流量,又提高了网络可靠性。

  VRRP协议的工作机理与CISCO公司的HSRP(Hot Standby Routing Protocol)有许多相似之处。但二者主要的区别是在CISCO的HSRP中,需要单独配置一个IP地址作为虚拟路由器对外体现的地址,这个地址不能是组中任何一个成员的接口地址。

  使用VRRP协议,不用改造目前的网络结构,最大限度保护了当前投资,只需最少的管理费用,却大大提升了网络性能,具有重大的应用价值。



我的理解是:
在一个局域网中,由几个服务器组成一个集群。他们中竞选出一个主服务器,其余的都为备选服务器。主服务器会定期的广播一个arp包,包的内容是一个虚拟ip及其mac地址。在接收到了该包的所有主机,会更新其ip ----- mac地址映射表。这样,当网关收到了这个包,则其回将来自外界的ip请求发送到这个主服务器上去,而备选服务器可以通过这个arp包知道主服务器还存活者的,那么其什么都不做。突然,有一天灾难降临,主服务器宕机了(被猫星人劫走了)。这时,备机因为收不到来自主服务器的arp包,则备机们就准备竞争成为主服务器了(小三升级)。当一个备机竞选成功后,则就履行则主机的责任,定时广播一个arp包,包的内容是一个虚拟ip及其mac地址(自己转正了嘛)。当网关收到了这个arp包后,则其更新自己的ip  mac地址映射表。网关就可以将来自外界的请求转发到新的主机上了。
分享到:
评论

相关推荐

    基于SpringBoot+MySQL+Redis+RabbitMQ+Guava开发的高并发商品限时秒杀系统【100013054】

    《基于SpringBoot+MySQL+Redis+RabbitMQ+Guava的高并发商品限时秒杀系统构建详解》 在现代电商领域,商品限时秒杀活动已成为吸引用户、提升销售额...这样的设计思路对于任何面临类似挑战的项目都具有很高的参考价值。

    高可用网站架构设计与实现.rar

    开题报告可能涵盖了项目背景、需求分析、技术选型、实施方案和预期成果等内容,而PPT则可能详细展示设计思路和实施步骤,便于理解与实践。 通过学习这些材料,读者不仅能理解高可用网站架构的基本原理,还能掌握...

    active消息通知设计思路及示例

    消息队列能够确保高可用性和可扩展性,即使在系统负载增加时也能保持稳定的服务。 `MessageConvertForSys.java`可能是一个转换器,它的职责是将系统内部的数据结构转换为适合传递给接收方的格式,比如JSON或者...

    基于RabbitMQ消息队列的分布式事务解决方案-MQ分布式消息中间件实战.docx

    1. **整体设计思路**:通过异步消息传递来降低系统之间的耦合度,允许数据最终达到一致状态,而非即时一致。 2. **步骤1 - 可靠的消息生产记录消息发送**:为确保消息一定能发送到RabbitMQ,在同一事务中增加记录表...

    mq消息中间件.rar

    在这个“mq消息中间件.rar”压缩包中,我们主要探讨的是RabbitMQ的核心API、高级特性、与Spring家族的整合、高可靠集群构建以及如何采用SET化架构设计和组件设计思路。 1. **RabbitMQ核心API** - **创建连接...

    Java思维导图xmind文件+导出图片

    什么是分布式架构下的高可用设计 构架高性能的分布式架构 构建分布式架构最重要因素 CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-...

    15-消息中间件MQ面试题.docx

    RabbitMQ可以通过设置集群、负载均衡等机制来保证高可用。 RabbitMQ的集群如何解决消息队列的延时以及过期失效问题? RabbitMQ可以通过设置集群、负载均衡等机制来解决消息队列的延时以及过期失效问题。 消息队列...

    Java 消息中间件MQ面试题

    RabbitMQ优点包括高性能、高可用性和灵活的路由机制,缺点包括学习曲线陡峭和需要专门的维护和管理。RocketMQ优点包括高性能、高可用性和分布式架构,缺点包括学习曲线陡峭和需要专门的维护和管理。 5. MQ有什么...

    2021Java高级架构面试知识点整理V1.0

    - RabbitMQ可通过镜像集群模式提供高可用性。 - Kafka通过复制、分区、副本机制来保证消息的高可用。 3. 消息消费的幂等性及可靠性传输 - 保证消息不被重复消费可以采用消息队列自带的特性(比如消息ID、幂等性...

    J2EE网站架构实施方案思路2015

    在本文中,我们将深入探讨2015年J2EE网站架构实施方案的思路,结合云计算平台,探讨如何构建高可用性和负载均衡的网站系统。首先,我们来理解J2EE平台及其在现代Web开发中的作用。 J2EE(Java 2 Platform, ...

    MySQL业务双活的初步设计方案.docx

    整个方案借鉴了Amdocs TRB的设计思路,使用多种组件和可选方案,如Maxwell、Kafka、TiDB、MongoDB等,以实现复杂度和可行性的平衡。 11. **Demo开发与验证**: 实施初步的Demo开发和测试,以验证方案的复杂度和...

    24-Nova 组件如何协同工作1

    Nova是OpenStack中的核心组件,负责虚拟机的生命周期管理。在物理部署中,Nova的各个子服务需要协同工作以实现高效、可靠的...在后续的学习中,我们将更深入地探讨这些组件的工作原理以及OpenStack组件的通用设计思路。

    大型分布式网站架构设计与实践.带目录书签.完整版

    《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展的分布式系统的重要参考资料。...通过学习,你可以掌握大型分布式网站架构的关键技术和设计思路,从而在实践中更好地应对复杂的系统挑战。

    高级架构师九阶段

    - **分布式存储**:学习NoSQL数据库、分布式文件系统(如HDFS)的设计思路。 - **微服务架构**:了解微服务的概念、优势与挑战;掌握Docker容器化技术、Kubernetes集群管理等工具。 - **消息队列**:熟悉RabbitMQ、...

    高并发场景杂谈.zip

    "高并发场景杂谈.zip"这个压缩包文件集成了多种处理高并发问题的策略和技术,旨在为开发者提供解决高并发问题的思路和实践案例。下面将详细讨论其中涉及的知识点。 首先,我们来看"Redis专场:如何利用Redisson...

    短信网关系统设计文档.zip

    《短信网关系统设计》是IT领域中一个重要的主题,主要涉及如何构建高效、稳定、安全的短信发送平台。在系统设计过程中,我们...通过阅读“短信网关系统设计文档.pdf”,我们可以深入理解整个系统的设计思路和技术方案。

    大型网站技术架构_核心原理与案例分析_李智慧 完全版

    12. **案例分析**:书中结合实际案例,如电商网站、社交网络等,解析技术架构的设计思路和实施过程,让读者能更好地理解和应用理论知识。 总之,《大型网站技术架构_核心原理与案例分析》是一本全面覆盖大型网站...

    apache-apollo-1.7.zip

    开发者可以从其源代码中学习到如何设计高性能的并发系统,或者借鉴其设计思路来开发自己的消息传递解决方案。 然而,对于新的项目或生产环境,开发者可能需要考虑其他更活跃且得到持续维护的消息中间件,如RabbitMQ...

    17-消息队列:秒杀时如何处理每秒上万次的下单请求?_For_group_share1

    在秒杀场景中,如何处理每秒上万次的下单请求是系统性能优化的一个关键问题。面对这样的高并发写请求,传统的解决方案如...这种设计思路适用于那些偶尔出现高并发写请求但并不持久的业务场景,避免了不必要的资源浪费。

    IT架构的构建思路.docx

    架构不仅仅关注技术指标,如高性能、高TPS(每秒事务处理量)和高可用性,更重要的是它为团队协作提供指导,定义系统边界,减少内耗,确保团队朝着同一目标前进。在C/S架构时代,架构的作用可能并不突出,但随着...

Global site tag (gtag.js) - Google Analytics