当前位置:首页 > 技术文章 > 正文内容

zookeeper与keepalived高可用的区别

arlanguage3个月前 (01-31)技术文章20

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


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。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1739.html

标签: zookeeper nginx
分享给朋友:

“zookeeper与keepalived高可用的区别” 的相关文章

给你的Nginx加个防火墙

引言朋友的一个 WordPress 站经常访问慢。看了一下日志,发现整天被扫描网站目录,如phpmyadmin 或者 SQL 文件,和被 CC攻击。找了一下,发现 ngx_lua_waf 是个不错的方案,但是太久不更新了,而且代码我看不懂,猝最后找到 oneinstack 一键包内置的 ngx_lu...

如何在 NGINX 中创建自定义 404 错误页面

每次NGINX在尝试处理客户端请求时遇到错误,它都会返回一个错误。每个错误都包含一个HTTP响应代码和一个简短描述。错误通常通过简单的默认HTML页面显示给用户。幸运的是,您可以配置NGINX以向您的站点或 Web 应用程序的用户显示自定义错误页面。这可以使用 NGINX 的 error_page指...

Nginx 的日志 nginx的日志能否保存到日志审计里面?

Nginx 的日志主要有 2 个,一个是 access.log, 一个是 error.log。如果你不进行任何配置的话,这 2 个日志将会使用默认的日志配置,这个日志将会位于/var/log/nginx 目录中。针对虚拟主机的配置如果你使用了 Nginx 为虚拟主机的话。那么你可以在你的虚拟主机的配...

Nginx 最全操作——nginx配置(2)

nginx 配置基本结构main # 全局配置,对全局生效 ├── events # 配置影响 nginx 服务器或与用户的网络连接 ├── http # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置 │ ├── upstream # 配置后端服务器具体地址,负...

安卓手机上安装Linux开源模拟器-Termux

什么是TermuxTermux是一款基于 Android 平台的开源 Linux 终端模拟器,使用 pkg(apt) 进行软件包的管理。最重要的是,它无需手机 root 权限,因此,绝大多数 Android 都可以运行。Termux本质上是一个终端模拟器加上一套Linux的最小系统。这里的系统指的是...

Linux Shell

基本语法第一行第一行必须是 #!/bin/sh。它不是注释,#!/bin/sh 是对shell的声明,说明你所用的是那种类型的shell及其路径所在如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell如果脚本被编写为在Kornshell...