kjfcpua 2016-10-14
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(VirtualRouterRedundancyProtocol)虚拟路由冗余协议。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。
我们在本文中的测试环境如下
两台物理服务器和一个虚拟服务器(vip):
master:redhat2.6.18-53.el5192.168.8.4
backup:redhat2.6.18-53.el5192.168.8.6
vip:192.168.8.100
测试环境的网络topology图如下:
节点A192.168.8.4(主节点),节点B192.168.8.6(备用节点),虚拟IP(对外提供服务的IP192.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,然后解压安装
#tarzxvfkeepalived-1.1.15.tar.gz
#cdkeepalived-1.1.15
#./configure
#make
#makeinstall
2,配置keepalived
配置中的stateMASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:
global_defs{
router_idNodeA
}
vrrp_instanceVI_1{
stateMASTER#设置为主服务器
interfaceeth0#监测网络接口
virtual_router_id51#主、备必须一样
priority100#(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int1#VRRPMulticast广播周期秒数
authentication{
auth_typePASS#VRRP认证方式,主备必须一致
auth_pass1111#(密码)
}
virtual_ipaddress{
192.168.8.100/24#VRRPHA虚拟地址
}
备用节点的配置如下:
global_defs{
router_idNodeB
}
vrrp_instanceVI_1{
stateBACKUP#设置为主服务器
interfaceeth0#监测网络接口
virtual_router_id51#主、备必须一样
priority90#(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int1#VRRPMulticast广播周期秒数
authentication{
auth_typePASS#VRRP认证方式,主备必须一致
auth_pass1111#(密码)
}
virtual_ipaddress{
192.168.8.100/24#VRRPHA虚拟地址
}
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端口的状态来决定服务器工作正常与否。如webserver的服务端口一般是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|||
4server(MASTER)<----keepalived---->server(BACKUP)
5(192.168.0.1)(192.168.0.2)
keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍一下VRRP的原理。
VRRP协议简介
在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:
·在主机上使用动态路由协议(RIP、OSPF等)
·在主机上配置静态路由
很明显,在主机上配置动态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关defaultgateway)却经常成为单点。
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广告包(VRRPAdvertisementmessage),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。
由于安全性考虑,VRRP包使用了加密协议进行加密。
==========================================
vrrp简介
随着Internet的迅猛发展,基于网络的应用逐渐增多。这就对网络的可靠性提出了越来越高的要求。斥资对所有网络设备进行更新当然是一种很好的可靠性解决方案;但本着保护现有投资的角度考虑,可以采用廉价冗余的思路,在可靠性和经济性方面找到平衡点。
虚拟路由冗余协议就是一种很好的解决方案。在该协议中,对共享多存取访问介质(如以太网)上终端IP设备的默认网关(DefaultGateway)进行冗余备份,从而在其中一台路由设备宕机时,备份路由设备及时接管转发工作,向用户提供透明的切换,提高了网络服务质量。
一、协议概述
在基于TCP/IP协议的网络中,为了保证不直接物理连接的设备之间的通信,必须指定路由。目前常用的指定路由的方法有两种:一种是通过路由协议(比如:内部路由协议RIP和OSPF)动态学习;另一种是静态配置。在每一个终端都运行动态路由协议是不现实的,大多客户端操作系统平台都不支持动态路由协议,即使支持也受到管理开销、收敛度、安全性等许多问题的限制。因此普遍采用对终端IP设备静态路由配置,一般是给终端设备指定一个或者多个默认网关(DefaultGateway)。静态路由的方法简化了网络管理的复杂度和减轻了终端设备的通信开销,但是它仍然有一个缺点:如果作为默认网关的路由器损坏,所有使用该网关为下一跳主机的通信必然要中断。即便配置了多个默认网关,如不重新启动终端设备,也不能切换到新的网关。采用虚拟路由冗余协议(VirtualRouterRedundancyProtocol,简称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(HotStandbyRoutingProtocol)有许多相似之处。但二者主要的区别是在CISCO的HSRP中,需要单独配置一个IP地址作为虚拟路由器对外体现的地址,这个地址不能是组中任何一个成员的接口地址。
使用VRRP协议,不用改造目前的网络结构,最大限度保护了当前投资,只需最少的管理费用,却大大提升了网络性能,具有重大的应用价值。
我的理解是:
在一个局域网中,由几个服务器组成一个集群。他们中竞选出一个主服务器,其余的都为备选服务器。主服务器会定期的广播一个arp包,包的内容是一个虚拟ip及其mac地址。在接收到了该包的所有主机,会更新其ip-----mac地址映射表。这样,当网关收到了这个包,则其回将来自外界的ip请求发送到这个主服务器上去,而备选服务器可以通过这个arp包知道主服务器还存活者的,那么其什么都不做。突然,有一天灾难降临,主服务器宕机了(被猫星人劫走了)。这时,备机因为收不到来自主服务器的arp包,则备机们就准备竞争成为主服务器了(小三升级)。当一个备机竞选成功后,则就履行则主机的责任,定时广播一个arp包,包的内容是一个虚拟ip及其mac地址(自己转正了嘛)。当网关收到了这个arp包后,则其更新自己的ipmac地址映射表。网关就可以将来自外界的请求转发到新的主机上了。