ITPub博客

首页 > 大数据 > 数据分析 > day03 zookeeper笔记

day03 zookeeper笔记

数据分析 作者:hgs19921112 时间:2018-10-19 18:34:23 1 删除 编辑

高并发基础 Day03
复习:
    1. Concurrent 包 - 原子性操作。本质上就是对数据进行了加锁。
    2. NIO :同步式阻塞式 IO 。在操作的时候基于选择器,面向通道进行传输,利用缓冲区作为载体来存储数据。
        1. Buffer :缓冲区。存储数据,并且存储的都是基本类型的数据,底层是以数组来作为存储结构 --- 标记位
            mark <= 操作位 position<= 限制位 limit<= 容量位 capacity --- 翻转、重置、重绕、清空
        2. Channel :通道。用于传输数据,面向缓冲区进行操作。双向传输。
        3. Selector :多路复用选择器。针对事件进行选择。保证使用少量的线程去处理大量的请求。
Zookeeper
    是 Apache 开发的开源组件。是 Hadoop 的子间件之一,但是不只是支持 Hadoop ,支持常见的大部分的分布式框架。
分布式存在的问题
    1. 需要设置管理节点
    2. 如果管理节点只有一个,那么就存在单点问题:即这台服务器一旦宕机,那么入口被封闭。
    3. 为了解决单点问题,引入管理集群,就会产生多个管理者的情况
    4. 需要在管理集群中选出一个 leader
    5.
确定一套选举机制
    6. 管理节点之间实现信息的共享
    7. 需要一套机制来确定一个唯一的 leader
    8.
分布式锁:死锁,活锁 ( 没有把持资源,占用 CPU) 。
搭建单机的 Zookeeper
    1. 运行环境中必须安装了 JDK1.6 及以上
    2. 解压 Zookeeper 的压缩包
    3. 打开 conf (配置)
    4. cp zoo_sample.cfg zoo.cfg --- zookeeper 在启动的时候需要自动寻找 zoo.cfg
    5. cd ../bin
    6.
启动 Zookeeper 的服务器: sh zkServer.sh start
        1. jps:
查看 java 进程,如果是单机的,可以用这种方式查看,如果是集群版本,则不意味着集群就搭建成功
        2. sh zkServer.sh status Standalone
    7. Zookeeper
进行启动的时候,会在启动的目录下生成一个 zookeeper.out, 存储的就是启动的信息日志。
        Zookeeper 的默认端口号是 2181
Zookeeper 的结构
    1. Zookeeper 本身一个树状结构
    2. 根节点是 /
    3. 每一个节点都要存储数据
    4. 没有相对路径,只有绝对路径
    5. 每一个节点的路径是唯一的
    6. 任意一个持久节点都可以挂载子节点
    7. 所有的临时节点都不能挂载子节点
    8. 所有节点存储的数据是字节形式
    9. Zookeeper 构成的这棵树是维系在内存中
    10. 每一个节点是一个 znode 节点
Zookeeper 的基本命令
    1. ls 路径 查看指定路径下的所有的子节点
    2. create 路径 数据 创建节点
    3. create -e 路径 数据 创建临时节点
    4. get 路径 查看指定节点的信息
    5. set 路径 数据 修改指定节点的数据
    6. delete 路径 删除指定节点,但是要求节点下没有子节点
    7. rmr 路径 删除这个节点及其子节点
节点信息
    Zookeeper 会对每一次发生的事务(创建、更新、删除)进行一个编号,编号是依次递增 1 个
    cZxid 创建事务 id
    ctime
创建时间
    mZxid 修改事务 id
    mtime
修改时间
    pZxid 最大事务 id
    cversion
创建版本
    dataVersion 数据版本 节点的数据每修改依次,那么数据版本就 +1
Zookeeper 节点的类型
    持久节点 - 0 :可以挂载子节点
    临时节点
- 1 :不能挂载子节点,关机即没
    持久顺序节点
- 2 :会对节点顺次编号
    临时顺序节点
- 3 : -e -s
    Zookeeper
本身是基于 Netty 的
Zookeeper 的 API 操作
    pom 文件需要加入的依赖:
Zookeeper 的集群配置
    1. 解压压缩包
    2. 进入 conf 目录
    3. cp zoo_sample.cfg zoo.cfg
    4.
编辑 zoo.cfg ,改变属性 dataDir=/home/software/zookeeper-3.4.8/tmp
    5. server.
编号 =ip 地址 :2888:3888 --- 2888 是原子广播端口, 3888 是选举端口,只要端口不冲突就可以使用
    6. 需要在 dataDir 指定的目录下来创建一个文件 :myid, 文件内容就是当前服务器的编号
    7. 其他服务器依次做类似操作 scp -r 文件 ip 地址 : 存放路径
        scp -r zookeeper-3.4.8 10.9.130.83:/home/software
注意: 如果在集群中只启动了一个节点,那么这个节点默认是失败的,至少出现一半以上的节点才能查
    看状态。
ZooKeeper 的选举机制
    1. 数据恢复阶段:保证每一个节点都能找到当前节点的最大事务 id
    2.
选举阶段:每一个节点都会提交自己的选举信息,并且推荐自己当 leader 。在选举的时候比较每一个节点所提
    交的选举信息(最大事务
id---pZxid ,选举 id---myid, 逻辑时钟 --- 保证是同一轮选举) , 在选举的时候是先比较
    两个节点的最大事务
id ,谁大谁就胜出。如果事务 id 一致,那么就根据 myid 进行比较,谁大谁胜出。选举的
    时候不是一次胜出就能够当
leader ,而是要满足过半性原则。一旦选出 leader ,后续添加的节点无论事务 id 和
    myid 是多少,都只能作为 follower 。每一个节点将会对应不同的状态: Looking (选举) ,Follower( 追随 ) ,
    Leader (管理) ,Observer( 观察 )
    3.
集群要想对外提供服务,也需要满足过半性:即至少有一半以上有选举权的服务器还存活。
    4. 集群在选举过程中不对外提供服务。
Observer - 观察者
    和 follower 一样具有对外提供事务的能力,但是不参加选举。适用于网络不稳定条件下的事务处理。
过半性的意义
    1. 选举要满足过半性
    2. 处理事务的时候需要有过半的节点同意才能处理
    3. 防止脑裂 --- 通常都会将节点个数设置为奇数个
    Zookeeper 根据 Paxos 来进行选举的。

------------------------------------------------------------------------

其它:

zookeeper 3.4.7

1.setData()不会检查节点是否存在,即使节点不存在也不会报错

2.Watcher对当前操作注册监听,当发生当前事件的时候回调用Watcher的方法

3.通过CountDownLatch的方法避免主线程先退出,无法看到测试结果

4.Observer角色,只参加事务的处理,不参加选举,如果所有的observer都挂掉,

集群依旧正常运行,只有属于leader+follower的一半挂掉,集群才会瘫痪

5.过半性,为了防止闹裂(选举的时候如果有两个一半选出两个leader)

6.有follower宕机重启后会将缺少的事务恢复


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31506529/viewspace-2216949/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-11-22

  • 博文量
    106
  • 访问量
    186398