zookeeper是什么

百度定义:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。

它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。通俗一点理解可以认为他可以服务管理集群、管理集群服务器中配置信息,这两点是我们在项目中最常用的两个特点,其中对每个服务实例中的配置文件维护非常繁琐,因此会引入配置服务器来维护配置除此之外还有日志服务器等,免去了我们为了解决一个小bug而去查找好几G的日志文件。

主要作用

在分布式SOA开发中我们要有种这样的认识:对于某一个服务是集群提供给消费者的,而不是一个特定的机器。

因此必须有一种机制来发现判断哪些节点可以提供服务,换句话说就是当消费者访问时一个服务时,判断出哪些服务可以使用,如果两个或者两个以上服务可以使用,还必须根据调用算法,合理的调用服务接口。

既然每个服务都不是简单的部署在一台电脑上面,可能部署了多个节点多个机器,为的就是避免某一个服务压力过大或其他原因宕机时,仍然保证7*24小时不间断服务;

如果公司业务扩展非常快访问数量在急剧增长,可以支持动态增加后台服务节点来适用压力的增长,也就是可伸缩性要好,zookeeper可以完美的解决这些问题,这也是很多公司倾向于使用它来作为服务注册发现调度框架。

它的名字服务就比如JNDI为我们提供的命名目录服务,为我们访问某一个特定的资源指定了一个别人,在以后适用起来通过这个别人就可以拿到我们所需资源。

开发项目的我们都知道每个项目里都会有很多的配置文件,例如大家最熟悉的连接数据库信息、日志打印格式方式、属性文件等等,在非分布式环境中常常一个项目部署一台机器即可,修改配置文件只需要在一台机器上面改一下;如果到了分布式项目一个服务就需要配置好几台机器多的话可能十几台、数百台、上千台、如果到了上万台服务,这项工作量可想而知,光改一个小小的配置文件就需要改好几天而且非常容易改错,这种事情zookeeper可以帮我们管理配置文件,并且可以做到改了zookeeper配置其它服务节点自动更新的热部署能力,在分布式中它发挥的作用还是很大的。

我们公司在管理配置文件时并没有使用zookeeper的配置管理,不知道为啥?可能单独引入一个框架会好用一些,使用的百度的disconf来统一管理配置信息,从资料和使用的效果来看还是比较简单的容易上手。

安装实例

由于机器有限这里我安装了一下伪分布式集群,公司在开发以及测试环境搭建的也是伪分布式模式,感觉和真正分布式集群其实是一样的没有多少区别,安装方式步骤几乎也一模一样,下面是安装的基本步骤。

1.安装jdk 1.6以上,我们公司安装的1.7,如

2. 下载zookeeper-3.4.6.tar.gz , 输入命令 tar -zxvf 解压,创建如下目录结构:

3. 进入conf目录,将example.zoo.cfg复制并改名为zoo.cfg,zoo.cfg内容如下图

说明:上图红框框起来的表示需要修改的地方,第一处为数据、日志目录;

第二处为客户端连接此zookeeper服务的端口,由于三个实例在一个机器所以需要修改;

第三处为zookeeper服务之间需要相互访问的IP、Port、选举Port,如果只有一个实例不需要互相通信就不需要配置这个信息。关于各个参数含义网上很多。

4. 在zookeeper-01/下面创建data、logs两个目录,并在data文件夹中建一个文件名为myid,内容为数字的文件,(数字与server.*)中*一致,可以使用命令:echo 1 > myid。意思是先将1输出到屏幕,然后读入到myid文件,不存在文件则创建。

5. 将zookeeper-01复制三份,分别改名为02 、03,对应端口改为2181、2183,然后,分别进入bin目录启动,即可完成安装。

注意在部署的时候一般部署奇数台,因为部署2n与2n-1台宕机之后他们的集群稳定性是一样的,就没有必要多部署一台了。

部署架构

安装完之后的部署架构如下图:

zookeeper是作为一个小的集群对外面提供服务,主要用来协调右下角的消费者与左下角的服务之间的调用关系,通过dubboe-admin控制台可以实时监测server-01/02是否工作正常,

总结

注册中心组成分布式框架的一部分,起着承上起来的连接协调作用,虽然不是服务的真正实现者但也不容忽视,感觉在分布式框架中已经不再仅仅关心服务的实现层面,除了服务实现还有服务管理、性能、事务等都是我们需要考虑的问题,分布式服务开发可以说对一个开发人员的素质要求也是高的,然后,大部分人习惯了实现代码忽略了整体架构,关心的东西多了慢慢就会了解架构就是架构师,有时一个人关心的决定了他将要成为什么样的角色、什么样的人。

注册中心zookeeper-3.4.6集群以及高可用的更多相关文章

  1. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

  2. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  3. 11.Redis 哨兵集群实现高可用

    作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis mast ...

  4. K8S集群Master高可用实践

    K8S集群Master高可用实践    https://blog.51cto.com/ylw6006/2164981 本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以 ...

  5. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  6. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  7. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  8. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  9. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

  10. Quartz学习笔记:集群部署&高可用

    Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...

随机推荐

  1. 【OCP-12c】CUUG最新考试原题整理及答案(071-11)

    11.(5-8) choose the best answer: Examine the structure of the BOOKS_TRANSACTIONS table. You want to ...

  2. “全栈2019”Java第五十三章:向上转型和向下转型详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. Metasploit Penetration Testing

    1.Metasploit整体框架: Shell中直接输入msfconsole启动PostgreSQL数据库服务 :service postgresql start 监听5432端口初始化Metaspl ...

  4. 基于Java软引用机制最大使用JVM堆内存并杜绝OutOfMemory

    题记:说好的坚持一周两篇文章在无数琐事和自己的懒惰下没有做好,在此表达一下对自己的不满并对有严格执行力的人深表敬意!!!! -------------------------------------- ...

  5. iOS核心动画CALayer和UIView

    UIView和CALayer的关系. 每一个UIview都有一个CALayer实例的图层属性,也就是所谓的backing layer. 实际上这些背后关联的图层才是真正用来在屏幕上显示和做动画,UIV ...

  6. python-json.loads()保持原json字符串的顺序

    import jsonfrom collections import OrderedDictmetadata = json.loads(text, object_pairs_hook=OrderedD ...

  7. 模块化之seaJs学习和使用

    使用seaJs也有一阵子了,一直也想抽个时间写个这方面的博客,直到今天才写……也许写的不是很完善,但跟大伙分享也是一种乐趣,不对之处欢迎指出.[抱拳] 时间有限,我这里不过多介绍前端模块化,有兴趣可以 ...

  8. js计算器案例

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>j ...

  9. 使用 WebClient 來存取 GET,POST,PUT,DELETE,PATCH 網路資源

    WebClient 基本資訊 提供通用方法使用 WebRequest 類別傳送及接收 URI (支援 http:, https:, ftp:,和 file: ) 的資源 Namespace:Syste ...

  10. windows下实现屏幕分享(C#)

    采用UDP广播进行数据的传输,实现windows下进行低延迟的屏幕共享. 开发语言:C# 第三方组件:Redis 1.实现思路 总体流程图 DGIS.DesktopShare实现windows下屏幕分 ...