zk一般是有2n+1个节点组成的集群。在Zookeeper服务有两个角色,一个是leader,负责写服务和数据同步;剩下的是follower,提供读服务。(为什么是2n+1个节点请看paxos算法)

  1. leader实效后会在follower中重新选举新的leader。(paxos算法)
  2. 每个follower都和leader有链接,接受leader的数据更新操作。(zab算法)
  3. 客户端可以连接到每个server,每个server的数据完全相同。
  4. Server记录事务日志和快照到持久存储。

1. zk的特点如下:

  • 最终一致性:为客户端展示同一个视图,这是zookeeper里面一个非常重要的功能
  • 可靠性:如果消息被到一台服务器接受,那么它将被所有的服务器接受。
  • 实时性:Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
  • 独立性 :各个Client之间互不干预
  • 原子性 :更新只能成功或者失败,没有中间状态。
  • 顺序性 :所有Server,同一消息发布顺序一致。

2. zk中的角色:

  • 领导者(Leader):领导者负责进行投票的发起和决议,更新系统状态,处理写请求
  • 跟随者(Follwer):Follower用于接收客户端的读写请求并向客户端返回结果,在选主过程中参与投票
  • 观察者(Observer):观察者可以接收客户端的读写请求,并将写请求转发给Leader,但Observer节点不参与投票过程,只同步leader状态,Observer的目的是为了,扩展系统,提高读取速度。在3.3.0版本之后,引入Observer角色的原因:

    Zookeeper需保证高可用和强一致性;
    为了支持更多的客户端,需要增加更多Server;
    Server增多,投票阶段延迟增大,影响性能;
    权衡伸缩性和高吞吐率,引入Observer ;
    Observer不参与投票;
    Observers接受客户端的连接,并将写请求转发给leader节点;
    加入更多Observer节点,提高伸缩性,同时不影响吞吐率。

客户端(Client): 执行读写请求的发起方

3. 安装:

环境:3台虚拟机:已设置ssh免密登录:

192.168.131.128
192.168.131.130
192.168.131.131

下载zookeeper并解压到/usr/local/zookeeper目录。

添加到环境变量:

ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf 使配置生效
source /etc/profile

修改配置文件:

在zk的conf/目录下,将zoo_sample.cfg重命名为zoo.cfg,然后:

修改内容:

# The number of milliseconds of each tick
tickTime=2000 # The number of ticks that the initial
# synchronization phase can take
initLimit=10 # The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5 # the directory where the snapshot is stored.
dataDir=/usr/local/zookeeper/data # the port at which the clients will connect
clientPort=2183 #the location of the log file
dataLogDir=/usr/local/zookeeper/log server.0=hadoopmaster:2288:3388
server.1=hadoopslaver1:2288:3388
server.2=hadoopslaver2:2288:3388

上面我们设置了数据库快照位置-data目录,该目录需要手动创建。

创建myid:

在dataDir(/usr/local/zk/data)目录创建myid文件

hadoopmaster的内容为:0
hadoopslaver1的内容为:1
hadoopslaver2的内容为:2

注意:以上操作三台机器都需要进行。

然后我们分别在三台机器启动zk,在bin目录下执行如下命令:

zkServer.sh start;

各个机器启动情况如下:

当然哪一台机器是leader这都是随机的,一般第一台启动的会是。

zk的配置:

Zookeeper的功能特性是通过Zookeeper配置文件来进行控制管理的(zoo.cfg).这样的设计其实有其自身的原因,通过前面对Zookeeper的配置可以看出,在对Zookeeper集群进行配置的时候,它的配置文档是完全相同的。集群伪分布模式中,有少部分是不同的。这样的配置方式使得在部署Zookeeper服务的时候非常方便。如果服务器使用不同的配置文件,必须确保不同配置文件中的服务器列表相匹配。

我们来看一下上面配置文件中的基本参数:

  1. client:监听客户端连接的端口。
  2. tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime。
  3. dataDir:存储内存中数据库快照的位置,如果不设置参数,更新食物的日志将被存储到默认位置。

高级配置:

  1. dataLogdDir:这个操作让管理机器把事务日志写入“dataLogDir”所指定的目录中,而不是“dataDir”所指定的目录。这将允许使用一个专用的日志设备,帮助我们避免日志和快照的竞争。
  2. maxClientCnxns:这个操作将限制连接到Zookeeper的客户端数量,并限制并发连接的数量,通过IP来区分不同的客户端。此配置选项可以阻止某些类别的Dos攻击。将他设置为零或忽略不进行设置将会取消对并发连接的限制。
  3. minSessionTimeout和maxSessionTimeout :即最小的会话超时和最大的会话超时时间。在默认情况下,minSession=2*tickTime;maxSession=20*tickTime。

集群配置:

  1. initLimit:此配置表示,允许follower(相对于Leaderer言的“客户端”)连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
  2. syncLimit:此配置项表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
  3. server.A=B:C:D

    A:其中 A 是一个数字,表示这个是服务器的编号;
    B:是这个服务器的 ip 地址;
    C:Leader选举的端口;
    D:Zookeeper服务器之间的通信端口。
  4. myid和zoo.cfg:除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

Zookeeeper环境搭建(二)的更多相关文章

  1. odoo开发环境搭建(二):安装Ubuntu 17虚拟机

    odoo开发环境搭建(二):安装Ubuntu 17虚拟机 下载镜像文件: 配置网络: 安装vmware tools: 配置共享文件夹: 选中虚拟机,右键编辑设置里边配置共享文件夹,指定windows本 ...

  2. eclipse中SSH三大框架环境搭建<二>

    通过上一篇博客我们可以轻松搭建strtus2的环境,接下来由我来继续介绍spring的环境搭建以及spring注入的简单使用 相关链接:eclipse中SSH三大k框架环境搭建<一> ec ...

  3. RobotFramework-RIDE环境搭建二:Robot Framework-RIDE安装过程以及踩雷点

    前期准备工作: Python 2.7(上篇文章中已安装成功) Robot Framework-2.8.5 Robot Framework-RIDE-1.5.2.1 (测试用例的创建.运行可以在图形界面 ...

  4. (SenchaTouch+PhoneGap)开发笔记(2)开发环境搭建二

    一.Java环境和Android SDK  1.安装JDK和JRE JRE会在JDK安装完成后自动出现安装界面. 安装完成后,设置环境变量 JAVA_HOME    D:\Program Files\ ...

  5. cocos2d-js入门二 环境搭建二

    电脑升级到WIN10后,cocos  code IDE安装不成功. 于是搭建新的环境JetBrainsWebStorm+chrome+JetBrains IDE Support,其中JetBrains ...

  6. Macaca环境搭建(二)----uirecorder PC录制

    上一节我们安装好了macaca环境,这节我们来进行PC录制: 一.安装UI Recorder 命令窗口输入:npm install uirecorder mocha -g 二.初始化配置 1.创建文件 ...

  7. appium环境搭建(二)----搭建android开发环境

    一.安装Java环境: java 环境分JDK 和JRE ,JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境. JRE ...

  8. react native windows开发环境搭建(二)

    上一篇中介绍了本地服务器端环境的安装,使用已经编译好的apk程序,设置ip地址,就可以看到welcome界面,并且可以对程序做出修改以及调试. 为了扩展和发布应用 还需要能编译loader程序,这里介 ...

  9. 环境搭建二 secureCRT配置

    上一篇里面讲到了虚拟机安装,以及secureCRT的远程连接.此篇文章介绍secureCRT的配置. 颜色设置 参考   http://jingyan.baidu.com/article/a681b0 ...

随机推荐

  1. HDU 4055:Number String(DP计数)

    http://acm.hdu.edu.cn/showproblem.php?pid=4055 题意:给一个仅包含‘I','D','?'的字符串,’I'表示前面的数字比后面的数字要小(Increase升 ...

  2. 【原创】面试官:讲讲mysql表设计要注意啥

    引言 近期由于复习了一下mysql的内容,有些心得.随手讲其中一部分知识,都是一些烟哥自己平时工作的总结以及经验.大家看完,其实能避开很多坑.而且很多问题,都是面试中实打实会问到的! 比如 OK,具体 ...

  3. django基础知识之POST属性:

    POST属性 QueryDict类型的对象 包含post请求方式的所有参数 与form表单中的控件对应 问:表单中哪些控件会被提交? 答:控件要有name属性,则name属性的值为键,value属性的 ...

  4. lambda匿名函数和他的小伙伴(处理大量数据的时候用到)

    lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n f = lambda n : n ** n 语法: 函数名 = ...

  5. scrapy实战6爬取IT桔子国内所有融资公司:

    爬取融资公司,融资公司简介,融资时间,轮次,融资额,投资方,股权占比以及融资公司完整融资历史 如图 源码地址:https://github.com/huwei86/spiderITjuzi

  6. 18.linux基础优化

    1.linux系统的基础优化 (1)关闭selinux sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 临时关闭 ...

  7. redis可视化客户端

    1. 场景描述 redis安装完成后,使用命令行看还是有点不方便,github上有开源的redis可视化客户端,很好用,介绍下. 2.解决方案 使用redisclient客户端,来操作redis. 2 ...

  8. 从动态代理到Spring AOP(上)

    一.前言 虽然平时日常开发很少用到动态代理,但是动态代理在底层框架等有着非常重要的意义.比如Spring AOP使用cglib和JDK动态代理,Hibernate底层使用了javassit和cglib ...

  9. python爬虫笔记之用cookie访问需要登录的网站

     目标:用cookie访问一个需要登录的网站 如图,直接访问会跳转到登录页面,提示登录. 运行结果: 直接在浏览器上输入该url,网站立马跳转到登录页面.  方法: 1.先手动登录,通过抓包获取coo ...

  10. select语句中不应该数据库关键字(如:precision)

    解决方案: 在关键字左右家特殊小点,在esc键的下面.(不是单引号) 如:`precision` 也可以在字段前加上表名.