zoukankan      html  css  js  c++  java
  • 分布式协调服务Zookeeper

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

    zookeeper数据结构

    其中每个树节点被称为znode,每个znode类似一个文件,包含文件元信息(meta data)和数据。

    有两种类型的znode:

    Regular: 该类型znode只能由client端显式创建或删除

    Ephemeral: client端可创建或删除该类型znode;当session终止时,ZK亦会删除该类型znode

    znode创建时还可以被打上sequential标志,被打上该标志的znode,将自行加上自增的数字后缀

    znode

    (1)Watches 客户端可以在节点上设置watch(我们称之为监视器)。当节点状态发生改变时(数据的增、删、改)将会触发watch所对应的操作。当watch被触发时,ZooKeeper将会向客户端发送且仅发送一条通知,因为watch只能被触发一次。

    (2)数据访问 ZooKeeper中的每个节点存储的数据要被原子性的操作。也就是说读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。

    (3)节点类型 ZooKeeper中的节点有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。 ZooKeeper的临时节点:该节点的生命周期依赖于创建它们的会话。一旦会话结束,临时节点将被自动删除,当然可以也可以手动删除。另外,需要注意是,ZooKeeper的临时节点不允许拥有子节点。 ZooKeeper的永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

    (4)顺序节点(唯一性的保证) 当创建Znode的时候,用户可以请求在ZooKeeper的路径结尾添加一个递增的计数。这个计数对于此节点的父节点来说是唯一的,它的格式为“%10d”(10位数字,没有数值的数位用0补充,例如“0000000001”)。当计数值大于232-1时,计数器将溢出。 org.apache.zookeeper.CreateMode中定义了四种节点类型,分别对应: PERSISTENT:永久节点 EPHEMERAL:临时节点 PERSISTENT_SEQUENTIAL:永久节点、序列化 EPHEMERAL_SEQUENTIAL:临时节点、序列化

    zookeeper集群搭建

    1、下载zookeeper-3.4.8.tar.gz包(使用tar命令解压)

    2、mv zookeeper-3.4.8  /usr/local/cluster/zookeeper3.4.8(剪切到usr下)

    3、conf文件夹下 cp zoo_sample.cfg  zoo.cfg(复制一份)

    4、修改zoo.cfg中内容(集群)

    dataDir=/usr/local/cluster/zookeeper3.4.8/data(手动mkdir,日志、快照存放处) 

    server.1=192.168.111.221:2888:3888    

    server.2=192.168.111.158:2888:3888 

    server.3=192.168.111.152:2888:3888

    server后的数字(1/2/3)是pid 

    5、data目录下新建pid内容为1

    6、使用scp 复制到server2、server3,记得修改pid中的值为2/3

    7、zkServer.sh start 可以启动zookeeper服务;zkServer.sh status查看集群中的角色

    zookeeper集群中的角色

    ZK中有以下角色:

    领导者(leader) 负责进行投票的发起和决议,更新系统状态

    跟随者(follower) 用于接受客户端请求并想客户端返回结果,在选主过程中参与投票

    观察者(observer) 可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度 客户端(client) 请求发起方

    zookeeper配置文件(zoo.cfg)

    1.tickTime:CS通信心跳数 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。

    2.initLimit# Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。

    3.syncLimit# 在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题。

    4.dataDir:数据文件目录 Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。

    5.dataLogDir:日志文件目录 Zookeeper保存日志文件的目录。

    6.clientPort:客户端连接端口 客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求 7.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口(同步),选举端口) 这个配置项的书写格式比较特殊,规则如下: server.N=YYY:A:B

    zookeeper命令

    1、连接到 ZooKeeper 服务:zkCli.sh –server ip:2181

    2、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:ls / 

    3、创建一个新的 znode ,使用 create /zk Data 

    4、查看数据中的节点数据,使用 get  /zk

    5、修改数据中的节点数据,使用 set /zk modifyData

    6、删除节点使用:delete  /zk

    zookeeper集群搭建中遇到的问题

    我使用win10安装vmware搭建的linux集群,碰到vmware安装linux镜像报错(原因:vmware 与hyper-v共存问题,详细解决可度娘)

    测试代码

     代码有需要的加我q:1050797831或者留言提供一下邮箱



  • 相关阅读:
    在win7 64位上安装VS2015的问题汇总
    关于C#类的深拷贝的问题
    线程、进程
    c#日志 log4net
    C#常识
    Tribon数据抽取的一些心得
    Java Web相关课程学习笔记
    过滤器、监听器、拦截器的区别
    SHH架构中几个配置文件解释 applicationContext.xml web.xml struts.xml
    vue关于动态增加路由页面
  • 原文地址:https://www.cnblogs.com/jellyzhang/p/5991899.html
Copyright © 2011-2022 走看看