keepalived与zookeeper

作者:灯下黑
链接:https://www.zhihu.com/question/47632675/answer/127669517
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

keepalived与zookeeper都可以用来实现高可用,另外常见的还有DNS。先看看优缺点,就可以看出在实现高可用时的区别。高可用一般跟负载均衡会一起考虑,所以下面的比较也会提到负载均衡能力。
1、Keepalived:
优点:简单,基本不需要业务层面做任何事情,就可以实现高可用,主备容灾。而且容灾的宕机时间也比较短。
缺点:也是简单,因为VRRP、主备切换都没有什么复杂的逻辑,所以无法应对某些特殊场景,比如主备通信链路出问题,会导致脑裂。同时,keepalived也不容易做负载均衡。
 
脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
 
2、zookeeper:
优点:可以支持高可用,负载均衡。本身是个分布式的服务。
缺点:跟业务结合的比较紧密。需要在业务代码中写好ZK使用的逻辑,比如注册名字。拉取名字对应的服务地址等。

3、DNS
优点:不复杂,同时与业务结合的不是很紧密,通过简单的逻辑就可以实现负载均衡。
缺点:DNS容灾是更新DNS服务器需要时间,宕机时间比较长。

所以,区别很明显。从简单性来说:Keepalived最简单,DNS次之,ZK最复杂。从负载均衡能力来看,zookeeper最强,DNS次之,Keepalived最弱。从与业务的紧密程度来看:ZK最紧密,DNS次之,Keepalived基本跟业务层面没有关系。

所以使用场景,个人看法,对于框架级别的业务可能会选择ZK,仅仅需要做容灾的用Keepalived。DNS的方法介乎两者中间。
一个局域网的可以考虑用Keepalived,分布式用ZK。
 
posted @ 2017-01-06 09:54  luckc#  阅读(855)  评论(0)    收藏  举报