1.什么是zookeeper

  ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,[1] 提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
2.zookeeper的原理
  ZooKeeper是以Fast Paxos算法为基础的,paxos算法存在活锁的 问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader,只有leader才能提交propose,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。[3]

 
ZooKeeper的基本运转流程:
  1、选举Leader。
  2、同步数据。
  3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
  4、Leader要具有最高的zxid。
  5、集群中大多数的机器得到响应并follow选出的Leader
3.zookeeper的特点
   在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为 EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper 里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数 据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。
那么Zookeeper能作什么事情呢,简单的例子:假设我们有20个搜索引擎服务器(每 个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕 机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个 搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以搜索提供服务了。使用 Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。
 
4.centos 5.8搭建环境
  所需软件:VM 虚拟机  centos系统  jdk 1.6或者以上  zookeeper-3.4.6.tar.gz
  这里至少需要三台server,不然的话这里zookeeper安装的时候,测试会报至少需要三台server,相关可以查看zookeeper.out(测试环境下)
  
  首先下载jdk的rpm包,分别上传到三个虚拟机上并安装。
    1.先查看系统是否存在jdk的相关包。(有时候装的系统中会有一个openJDK)有的话就将其卸载掉。
    2.将jdk保存在/usr/local/java目录下
    3.安装jdk:rpm -ivh jdk-**-**.rpm
  这里不用配置java环境,因为rpm将其自动加到path中。
  安装zookeeper,将zookeeper上传到三个服务器,保存在/usr/local/zookeeper目录下,解压tar包
  tar -xzvf zookeeper-3.4.6.tar.gz
  进入目录zookeeper-3.4.6中,将conf目录中的zoo_sample.cfg文件复制为zoo.cfg并利用vi命令进行修改
  tickTime=2000
  initLimit=10
  syncLimit=5
  clientPort=2181
  dataDir=/usr/local/zookeeper/zookeeper-3.4.6/data    保存数据目录
  dataLogDir=/usr/local/zookeeper/zookeeper-3.4.6/log 保存日志目录
  server.1=ip:2888:3888   ip为服务器的ip
  server.2=ip:2888:3888   ip为服务器的ip
  server.3=ip:2888:3888   ip为服务器的ip
  
  这里的data和log需要自己创建 mkdir命令创建
  

  在/usr/local/zookeeper/zookeeper-3.4.6/data目录下创建一个文件:myid
 
  分别在myid上按照配置文件的server.<id>中id的数值,在不同机器上的该文件中填写相应过的值
  ip  的myid内容为1
  ip  的为2
  ip  的为3
    ip为服务器的ip   这里对应上面的server.1,server.2,server.3
 
  创建一个环境变量ZOOKEEPER并把该环境变量添加到系统路径:
  vim /etc/profile
 
  在export PATH语句前添加两行:
  ZOOKEEPER=/usr/local/zookeeper/zookeeper-3.4.6
  PATH=$PATH:$ZOOKEEPER/bin
 
  并执行 source /etc/profile
此时安装成功,进行测试:
  1.进入zookeeper的bin目录,执行sh zkServer.sh start进行启动zookeeper
  2.查看状态   进入bin目录,执行sh zkServer.sh status
  3.停止    进入bin目录,执行sh zkServer.sh stop
 
  
  
  

linux 安装配置zookeeper的更多相关文章

  1. linux 安装配置zookeeper脚本

    #!/bin/bash # automatic install zookeeper echo "========= Start to install zookeeper ========== ...

  2. Linux安装配置php环境的方法

    本文实例讲述了Linux安装配置php环境的方法.分享给大家供大家参考,具体如下: 1.获取安装文件: http://www.php.net/downloads.php php-5.3.8.tar.g ...

  3. linux经常使用(一)linux 安装配置 jdk之 找不到安装文件文件夹及source /etc/profile 报unexpected end of file 错误 解决

    linux 安装配置 jdk 应该算是一个非常主要的东西.可是我到如今才自己第一次 正式安装.果然出现了问题.. 问题就是 安装之后 找不到 安装路径 ,进而没法配置环境变量. 现象例如以下: 提示 ...

  4. Ubuntu 16下单机安装配置zookeeper和kafka

    网上其他的没有一个能直接照做完成的,我这个也是看了些帖子,整出来的怕以后忘记 建议连接工具:Bitvise SSH Client 一.安装配置zookeeper 下载zookeeper 3.4.13: ...

  5. Linux安装配置apache

    Linux安装配置apache   1.获取软件: http://httpd.apache.org/  httpd-2.2.21.tar.gz 2.安装步骤: 解压源文件: 1 tar zvxf ht ...

  6. window安装配置 zookeeper 单机模式

    1.zookeeper简单介绍 zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,我所了解到的主要的使用场景有两个 (1).微服务注册中心(Dubbo较常用Zookeeper做注册中 ...

  7. 安装配置ZooKeeper及基本用法

    要想学习分布式应用,ZooKeeper是一个绕不过去的基础系统.它为大型分布式计算提供开源的分布式配置服务.同步服务和命名注册. 今天先介绍系统的安装和基本使用,后续会推一些基本的Java使用代码. ...

  8. Hadoop集群搭建-02安装配置Zookeeper

    Hadoop集群搭建-05安装配置YARN Hadoop集群搭建-04安装配置HDFS  Hadoop集群搭建-03编译安装hadoop Hadoop集群搭建-02安装配置Zookeeper Hado ...

  9. Linux安装配置varnish web加速器

    Linux安装配置varnish web加速器       Varnish是一款高性能的开源HTTP加速器,它可以来做纯粹的代理服务器,负载均衡,但varnish最主要的功能是缓存加速,也是它最出色的 ...

随机推荐

  1. spring 事务注解

    在spring中使用事务需要遵守一些规范和了解一些坑点,别想当然.列举一下一些注意点. 在需要事务管理的地方加@Transactional 注解.@Transactional 注解可以被应用于接口定义 ...

  2. enzyme design 整体流程及感想

    想起什么来写什么吧. 整体流程(以Ceas2, TPP, G3P为例): 准备蛋白即配体参数文件: 设置CST文件: 准备protocol和flag文件: 运行enzyme_design: 结果处理. ...

  3. Oracle表空间碎片整理SHRINK与MOVE

    整理表碎片通常的方法是move表,当然move是不能在线进行的,而且move后相应的索引也会失效,oracle针对上述不足,在10g时加入了shrink,那这个方法能不能在生产中使用呢?        ...

  4. javascript时间处理

    1.将一般格式时间转换为时间戳: var systime = "2018年04月28日 16:01:09"; systime = systime.replace('年', &quo ...

  5. DataTable插件 后台分页 (服务器端分页)

    <script type="text/javascript">        var persontable; var personQueryCondition = { ...

  6. idea 报错 :error:java:Compilation failed:internal java compiler error

    当使用Tomcat运行项目时报错 翻译一下是 错误:Java:编译失败:内部Java编译器错误 这样看来更不理解了 其实原因是Java的版本不一致 查看项目的jdk版本是否一致: file----pr ...

  7. 【 记忆网络 1 】 Memory Network

    2015年,Facebook首次提出Memory Network. 应用领域:NLP中的对话系统. 1. 研究背景 大多数机器学习模型缺乏一种简单的方法来读写长期记忆. 例如,考虑这样一个任务:被告知 ...

  8. Docker run命令参数整理

    Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d, --detach=false 指定容器运行于前台还是后台,默认为false -i, - ...

  9. Docker Kubernetes YAML文件常用指令

    YAML文件常用指令 配置文件说明: 定义配置时,指定最新稳定版API(当前为v1). 配置文件应该存储在集群之外的版本控制仓库中.如果需要,可以快速回滚配置.重新创建和恢复. 应该使用YAML格式编 ...

  10. rds下载备份集在另外一台机器上恢复并应用binlog日志

    -----------------------------备份还原并启动数据库----------------------------------1.创建目录,并把下载的压缩文件拷贝到相应的目录[ro ...