zookeeper与keepalived高可用的区别

createh512小时前技术教程1

一、常见的高可用解决方案


1、zookeeper


2、keepalived


3、DNS


二、keepalived和zookeeper对比


1、Keepalived


优点:简单,在实际接入Keepalived服务的时候,基本上不需要我们在业务层面做任何操作,就可以实现高可用,主备容灾。而且容灾的宕机时间也比较短。


缺点:也是简单,因为VRRP、主备切换都没有什么复杂的逻辑,所以无法应对某些特殊场景,比如主备通信链路出问题,会导致脑裂。同时,keepalived也不容易做负载均衡。


2、zookeeper


优点:可以支持高可用,负载均衡。zookeeper服务本身就是个分布式的服务。


缺点:zookeeper跟业务结合的比较紧密。需要在业务代码中写好ZK使用的逻辑,比如注册名字。拉取名字对应的服务地址等。



3、DNS优点

优点:不复杂,同时与业务结合的不是很紧密,通过简单的逻辑就可以实现负载均衡。

缺点:DNS容灾是更新DNS服务器需要时间,宕机时间比较长。


所以,区别很明显。从简单性来说:Keepalived最简单,DNS次之,ZK最复杂。


从负载均衡能力来看,zookeeper最强,DNS次之,Keepalived最弱。


从与业务的紧密程度来看:ZK最紧密,DNS次之,Keepalived基本跟业务层面没有关系。


keepalive只可以选出一台机器作为主机,所以keepalive只能实现M:1的备份


zookeeper可以选出N台机器作为主机,它可以实现M:N的备份


所以使用场景,个人看法,对于框架级别的业务可能会选择ZK,仅仅需要做容灾的用Keepalived。DNS的方法介乎两者中间。



二、具体明细对比


1、以主动和被动的角度考虑


keepalived是主动向nginx发送请求,如果有响应,那么则nginx可用。


对于zookeeper而言,HDFS,HBase,Yarn基于zookeeper做高可用,这里的zookeeper就是被动的,也就是说HDFS,HBase,Yarn主动向zookeeper中写数据。


2、从负载的角度来考虑


可以使用keepalived服务做到主从,主从的划分是通过配置文件(主从的priority之差>50)指定的,如果主服务在正常工作,那么大量的请求通过主然后负载到后端的nginx。


而利用zookeeper做HA,zookeeper中可以说是“人人平等”,客户端无论访问follower,还是observer,异或是leader,都能给我们返回相应的结果,可以很好的实现了负载均衡,这也可以说是zookeeper的一个优点


3、从存储数据的角度


keepalived服务本身不可以存储数据,假设keepalived的主现在有50个连接,如果没有外部数据库存储这些连接的信息,主服务器一旦挂了的话,这些连接信息也就丢失了,所以如果使用keepalived需要一个外部的数据库,但是如果主挂了的同时数据库也挂了,那么信息就会丢失,或者从起来后,连不上数据库,那么之前的连接信息也会丢失。

zookeeper可以存储数据,zookeeper中可以创建一个zNode,里面存放数据,zookeeper可以做到一个分布式数据的一致性,zookeeper中每个节点的视图是一致的,数据本身可以做到最终一致性,也就是说其中一个server挂了,其他的server还有存的数据,那么这样的话就不需要额外的数据库,zookeeper本身就可以存储一定量的信息。这也可以说是zookeeper的另一个优点。



4、从业务的角度

keepalived相对来说比较简单,我们只需要关注配置文件,进行简单的配置就可以使用keepalived服务。使用keepalived的业务场景:如果我们只需要简单的知道当前的业务中哪个是主,哪个是从,那么可以选用keepalived。


如果除了高可用以外,比如kafka,storm等复杂操作,还要想zookeeper中写一些数据,这时候就需要zookeeper。

相关文章

ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比

注册中心前言服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供...

Spring Cloud Zookeeper微服务集群实例之三-网关引入及熔断与限流

在之前的文章中我们实现了服务之间的接口调用,那么集群外部的接口调用如何进行?这就必须通过网关了。网关类似其它节点一样,会将其自身注册到集群中,从而能够获取到某个服务的实例清单;然后根据我们提前配置好的...

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

项目经历怎么写的?简历上有一两个项目经历很正常,但是真正能把项目经历很好地展示给面试官的非常少。对于项目经历大家可以考虑从如下几点来写:1. 对项目整体设计的一个感受2. 在这个项目中你负责了什么、做...

用了8年的方式-用 Docker 瞬间搭建本地开发环境

有些时候我们需要在本地搭开发环境,比如平时学习新技术的时候。或者有时候公司的项目需要在本地建一套类似的,方便调试修改。开发环境可能包括 MySQL、Redis、Nginx、MQ 、Elasticsea...

程序员去大公司面试,Java岗大厂面试官常问的那些问题,进阶学习

这段时间一直在学习Netty相关知识,因为涉及知识点比较多,也走了不少弯路。目前网上关于Netty学习资料琳琅满目,不知如何下手,其实大家都是一样的,学习方法和技巧都是总结出来的,我们在没有找到很好的...