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
c)、ZK锁=》ZK锁=》序临节点+watch监
机1:创 序临节点与ALL节点 重排=》序Min:获锁;
非序Min:监前一节点,前一点删获锁.....依推..
队列
先进先出
机1:创 序临节点与ALL节点 重排=》序Min:获锁;
非序Min:监前一节点,前一点删获锁.....依推...