zookeeper

1.zookeeper 是一个分布式数据一致性解决方案
    1.维护配置信息 (通过watcher 监听数据变化,然后实时跟新配置信息)
    2.分布式锁服务
        思路:1.每一个客户端往/locks下创建有序节点/locks/lock_,创建成功后/locks下面会有每个客户端对应的节点 如:/locks/lock_0000000001
              2.客户端获取到/locks下子节点,并进行排序,判断排在最前面的是否是自己,如果自己的节点在第一位,代表获取锁成功,
              3.如果自己的锁节点不在第一位,则监听自己前一位的锁节点,如:自己的锁节点lock_0000000002,那么则监听lock_0000000001
              4.当前一位锁节点(lock_0000000001)对应的客户端执行完毕,释放了锁(删除掉),将会触发监听客户端的逻辑
              5.监听客户端重新执行步骤 2 的逻辑,判断自己是否获得了锁
    3.集群管理
    4.生成分布式的唯一ID(通过创建有序节点生成全局唯一ID)
    
    
2.zookeeper的特点
    1.高性能:将数据存储在内存中
    2.高可用:一般以集群的形势提供服务
    3.严格顺序访问:

3.zookeeper的数据模型
    数据节点可视为树状结构(类似linux的目录)

    1.新增节点:create -s  -e  path data  #-s 有序节点  -e 临时节点
        有序几点特点:zk会在节点后面追加数字序号 例如: createa -s  /h "123" 实际得到的节点名称是 /h0000000001   (这个可以在分布式环境生成唯一的ID)
        临时节点特点:会话结束,数据消失
        (临时、有序节点,一般用来生成分布式锁)
        
    2.修改节点:set -v /path  data  #-v是指定版本号,可选参数
    
    3.删除节点:delete /path  当节点下有子节点时,delete不能生效,需要用rmr命令
    
    4.查看节点:get命名   get -s  -w  /path # -s 显示节点属性  - 对节点进行监听
    
    5.查看节点属性:stat /path
    
    6.查看子节点列表 : ls  -w  /path  #  -w 对子节点进行监听

    7.ACL 针对节点的权限控制
        授权模式:
            world: 只有一个用户 anyone,代表登陆zookeeper所有人(默认)
            ip    : 对客户端使用IP地址认证
            auth: 使用已添加认证的用户认证
            digest: 使用“用户名:密码”方式认证
            
            生成密文:echo -n username:password | openssl dgst -binary -sha1 | openssl base64
            
            c(create):创建
            d(delete):删除
            r(reda)    :读取、显示
            w(write):设置节点数据
            a(admin):设置节点访问控制权限 
            
            例如:setAcl /test ip:192.168.2.222:wdrwa
                  setAcl /test word:anyone:wdrwa
                  setAcl /test auth:user:wdrwa  #user 是认证用户   通过addauth digest username:password 添加授权用户
                  
                相关命令:setAcl\ getAcl \ addauth
    8.配置超级管理员 在zkServer.sh文件里面配置(百度)
            
            
4.集群配置
    1.在配置文件中配置
        dataDir=/data
        server.1=192.168.2.204:2288:3388
        server.2=192.168.2.205:2288:3388
        server.A=B:C:D
        A:一个数字,表示这太服务器的编号
        B:服务器的编号
        C:Zookeeper服务器之间的通信
        D:Lerader选举的端口
    2.在所配置的dataDir的目录下创建myid文件,文件内容为当前服务的编号
    3.其他服务器做相应的配置
    
5.一致性协议:zab协议 (zookeeper atomic broadcast)
    zookeeper通过zab协议来保证分布式事务的最终一致性
    
    zab协议的工作原理:
    
        写请求只能有leader执行,读请求都能执行,如果写请求到follow,follow会转发到leader
        
        1.leader从客户端收到一个写请求
        2.leader生成一个新的事务并为这个事务生成一个唯一的ZXID,
        3.leader将这个事务提议(propose)发送给所有的follow节点
        4.follow将收到的事务请求加入的历史队列(history queue)中,并发送ack给leader,
        5.当leader收到半数以上的follow的ack消息,leader会发送commit请求。
        6.当follow收到commit请求时,从历史队列中将事务请求commit

6.leader的选举
    服务器状态:
        looking:寻找leader状态,当服务器处于该状态时,他会认为集群是没有leader的,因此需要进入leader选举状态
        leading:领导者状态,表明当前服务器是领导者
        following:表明当前服务器为跟随着,
        observing:观察者状态
        
    服务器启动时的leader选举:
    服务器运行是的leader的选举:
    
    发起投票,传递投票数据(myid,zxid),先进行zxid比较,谁大就是谁,如果,相同,比较myid,谁大是谁(比较zxid是为了保证最后一次执行事务的机器的数据,)

7.配置观察者角色
    观察者不参与集群leader的选举
    不参与集群写数据的ack反馈
    
    1.在配置文件中加入
        peerType=observer
    2.在集群中每一台机器中加入  
        server.2=192.168.2.205:2288:3388:observer

8.java API 连接 zookeeper的集群
    ZooKeeper zk = new ZooKeeper("192.168.2.203:2181,192.168.2.204:2181", 5000, new Watcher() {}
    
    
    
    
            
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值