zookeeper学习(刚开始)

基础概念:
zk是分布式协调服务,高性能分布式数据一致性解决方案,其实就是个注册中心。

2、可解决的数据一致性问题有:
    1.顺序一致性:服务a调用服务b,多次调用过程中,zk会严格保证调用顺序的一致性
    2.原子行:单个机器的处理结果在所有机器的应用是一致的
    3.单一试图:保证客户连接到每个服务器所展示的试图都是一致的。
    4.可靠性:客户端调用服务端完成的操作,服务端会完整的保存下来。
    5.实时性:zk保证在一段时间内,客户端最终一定能从服务端读取到最终的数据。
    
3.高性能:据统计3台的zk集群,可以达到12k的qbs(query per second),单位时间内的请求响应次数。

4.应用特点:
    1.一般是rest风格的请求。
    2.试用与发布订阅模式:发布者发布服务到zk,订阅者订阅相关的服务,当这些服务节点发生变化时,就通知订阅者,订阅者可以获取对应的数据信息。
    3.负载均衡:目前是rest风格的多服务负载。特点:当有多个服务a.b.c 3个负载,a出问题后,zk会将该节点删除。先过去可用服务,然后通过算法使用对应的服务(比如轮训)
    
5、zk的服务命名:
    1.uuid形式
    2.生成自增形式的id
    
6、分布式协调/通知
    1.心跳监测:正常手动监测服务是使用ping来证明服务可用,zk客户端监测只需要获取zk中的节点列表即可判断(无用节点会自动剔除)。
    
7、集群角色:
    leader:zk的核心角色,主服务
    follower:leader的跟随者,从服务
    observer:监听,参考java中的observer
    
8、会话:
    客户端和zk服务器建立一个tcp长连接来维持一个session会话,当然也可以使用rest风格服务器来发送请求并获取响应。
    
7、数据节点:树形节点
    1.集群中的一个机器为一个节点
    2、数据模型中的数据单元znode,分为永久节点和临时节点。
    
8、版本:
    version:当前数据节点数据内容的版本号
    cversion:当前数据节点子节点的版本号
    aversion:当前数据节点acl变更版本号
    可以作为分布式锁使用
    
9、watcher:事件监听器
    zk允许·用户在指定节点上注册一些watcher,当数据节点发生变化时,zk服务器会把这个变化发送给订阅的客户端。
    
10,acl(access control lists)才有acl策略进行权限控制:
    create:创建子节点
    read:读取节点数据权限
    write:更新节点数据权限
    delete:删除子节点的权限
    anmin:设置节点acl的权限

11、节点的模式有:持久节点、持久的顺序节点、临时节点、临时顺序节点。
    
----------------------------------------------------------------------------------------------------------------------------
环境搭建:
虚拟机vmware centos7 secureCRT  个人比较喜欢使用

网络设置:桥接模式(不同机)、net模式
1、下载zk的安装包wget http://zk地址
2、解压:tar xzvf zookeeper.压缩文件
3、重命名:  mv zookeeper.压缩文件 zookeeper
4、准备jdk环境、关闭防火墙
5、复制一份zoo_sample.cfg文件  进入zookeeper/conf目录 cp zoo_sample.cfg zoo.cfg  (配置的样例文件)
6、修改zoo.cfg文件 vim zoo.cfg   
    修改dataDir=/tmp/zookeeper  为 dataDir=/var/zookeeper  (zk的快照文件)
    修改clientPort=2181  为  自定义 (服务器对外提供的端口号默认是:2181,随意配置未用的端口)
    配置服务器:server.1=192.168.1.105:2888:3888(格式:server.id=host:port:port    id:服务器id为一个整数、host:服务器的ip地址、port:leader/follow/observer服务器的通讯端口、port:代表专门用于leader选举使用的端口)
    zk集群有几个服务器就在zoo.cfg中就需要多少个server.id=host:port:port
7、根据6的步骤配置其余的zk服务器(可以直接远程复制过去)    scp zoo.cfg root@192.168.1.106:/opt/zookeeper/conf
8、新增myid:进入6中修改的dataDir指定的目录下/var/zookeeper
    新增目录zookeeper:mkdir zookeeper
    新增文件myid:vim myid     存入6中配置的server.id中的id  比如:1
    zk集群有几个服务器就在对应服务器配置myid
9、启动zookeeper服务器:cd .opt/zookeeper/bin   启动:./zkServer.sh start   停止:./zkServer.sh stop
10、启动验证:telnet 192.168.1.105 2181(安装命令:yum install telnet)  
    ping通之后输入:stat  显示为不能提供服务:原因:集群的其余服务器还没有启动。启动其他zk服务器再次进行验证(启动过半就可以提供服务了,因为zk集群机制就是如此)
注明:zookeeper集群分为:集群、伪集群(所有集群服务器配置在同一个主机上)、单机模式。配置的区别只是在6中的server.id=host:port:port不同而已。


----------------------------------------------------------------------------------------------------------------------------
zookeeper客户端使用:---省略
使用java api来操作zookeeper:创建会话、创建节点、删除节点、读取数据、节点检测
1、下载指定的压缩包:/stable/zookeeper-3.4.6.tar.gz
2、创建java工程:
    创建会话:zookeeper = new Zookeeper(192.168.1.105:2181",5000,new CreateSession()); 其中5000是超时时间,createSession是一个watcher;
    zookeeper建立链接是异步的,如果想看到链接成功需要在watcher中的process方法里面获取event。
    因为建立链接异步,所以实际的api操作也需要放在watcher中的process中,需要建立链接成功才能进行操作if(event.getState()==keeperState.SyncConnected){doSomeSthing()}}
3、创建节点:zookeeper.create("路径","内容".getBytes(),"权限","模式(持久节点/临时节点)",AsyncCallbackd.StringCallback的异步回调实现类,回调返回的内容);(分为同步获取和异步获取,如果是同步获取不需要最后2个值)
    获取子节点:zooKeeper.getChildren();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值