zookeeper笔记

CAP   
*************************
可用    容错       强一致


响应S   网络故障   加锁

注:强一致/最终一致
*************************

3阶提交
***************************
请求(响应/撤消)

       预提(响应/撤消)

                       终提

***************************


PAX OS
***************************
活锁:   同路相向=》《=
         解锁:不同时

弱:锁、不顺
***************************


ZAB  半数原则
***************************
Leader主
follower从-->follower从协


Zxid:纪元-事务  poach-xid
     注:xid递增,poach-leader



恢复:故障后,重新leader算法

广播:主写 从读
      leader算法

******************************************************
server.1=localhost:29001:31001
server.2=localhost:29002:31002
server.3=localhost:29003:31003
server.myid=IP:Port1:Port2
myid服务器编号
port1服务器与集群中的Leader服务器交换信息的端口,一般用2288,
Port2万一集群中的Leader服务器宕机需要一个端口重新宣讲,选新Leader,一般3388



数构  树
***************************
类型Znode

持久目节点/持久编码目节点
临时目节点/临时编码目节点
注:ZK断后自动清


ls /

ls2/

create /zookeeper/itheima itheimavalue
get  /zookeeper/itheima
set  /zookeeper/itheima   itheimavalue
stat  /zookeeper/itheima
delete  /zookeeper/itheima

create /zookeeper/itheima itheimavalue
create /zookeeper/itheima/it01 it01value

delete  /zookeeper/itheima
rmr  /zookeeper/itheima

create /zookeeper/itheima itheimavalue
ls  /zookeeper/itheima watch
create /zookeeper/itheima/it01 it01value
#########ls watch  path提示一次#####################
get  /zookeeper/itheima watch
set  /zookeeper/itheima  itheimaupdate
#########get watch path提示一次#####################

源码  https://github.com/apache/zookeeper

导入源码=》导入项目,选中pom.xml,选下一步..........等待全部导入

################选举################
org.apache.zookeeper.server.quorum.quorumPeer.start()



场景
1)、配置中心   ZK节点,节点数据变更Watach(节点客户广播)
2)、负载均衡   监听--》服务器列表、均衡算法
3)、命名       集群机器、服务地址、远程对象
                全局唯一 UUID

4)、集群管理  监控:状态收集  
               控制:操作控制

           实现=》Watcher、临点

               例=》机器上下线检测:子点创建=》ZK/Machines接收‘子节点变更’上线通知
                                新节点开启‘后台管理’逻辑
                        监控=》运行状态
                机器监控:主机写入各节点、节点数变


1)单机锁

             //上锁
            lock.lock();
            //调用减少库存的方法
            boolean b=new Stock().reduceStock();
            //解锁
            lock.unlock();

2)多机锁
           锁对象非同
               锁:
                 a)、数库锁=》dblock(id主键,lock_name唯一)

                        机1:dblock.lock(insert lock_name:db_lock_stock)
                                  机2:dblock.lock(insert lock_name:db_lock_stock.....循环等待)
                                                  机1:dblock.unlock(delete lock_name:db_lock_stock)
                                                             机2:dblock.lock(insert lock_name:db_lock_stock)

                            lock_demo_DBLOCK.zip

                b)、redis锁=》key/value lock_name/redis_lock_stock

                机1:dblock.lock(insert lock_name:redis_lock_stock,expire,TimeUnit.SECONDS)
                    机2:dblock.lock(insert lock_name:redis_lock_stock,expire,TimeUnit.SECONDS.....循环等待)
                            机1:dblock.unlock(delete lock_name:redis_lock_stock)
                               机2:dblock.lock(insert lock_name:redis_lock_stock,expire,TimeUnit.SECONDS)

                        setnx name z3    #设KEY:name
                  keys *        #查看
                  del name        #删除KEY:name
                  expire name 15      #设KEY:name  15s  过期
                  ttl name            #查看KEY:name  过期

                  注:因主挂导致同锁多户=》redisson

 lock_demo_redisLock

                 



             c)、ZK锁=》ZK锁=》序临节点+watch监   
       
                    机1:创 序临节点与ALL节点 重排=》序Min:获锁;
                                               非序Min:监前一节点,前一点删获锁.....依推..

lock_demo_ZkLock.zip

队列
     先进先出
     机1:创 序临节点与ALL节点 重排=》序Min:获锁;
              非序Min:监前一节点,前一点删获锁.....依推...

原文地址:https://www.cnblogs.com/smallfa/p/12019242.html