存储znode 数据的容器
树形的结构 /节点/子节点
注册中心,配置中心(solr里面做配置中心)
Zk 单机版容易挂掉
机器编号 Ip 地址 端口 Zk-1 192.168.231.143 2181 Zk-2 192.168.231.143 2182 Zk-3 192.168.231.143 2183
4.3.1 新建一个集群的文件夹 4.3.2 准备三个zookeeper 4.3.3 修改配置文件 Zk1/conf/zoo.cfg: 新建数据目录 给数据目录里面新建一个myid文件 并给值为1 Zk2/conf.zoo.cfg: 新建数据目录,日志目录,在数据目录新增一个myid文件 给myid值为2 Zk3/conf/zoo.cfg: 新建数据目录,日志目录,在数据目录里面新建一个文件myid 给myid的值为3
同时启动三台zk 测试 查看状态
选举怎么胜出: Zk-1 说选我(serverid,zxid)(事务id)向启动后发的第一个名称 (1,1) Zk-2 说选我(serverid,zxid) (2,1) Zk1 对zk2 的发的(2,1)做协定, 如何协定: 1 zk2 对zk1 zk1本次是(1,1)->zk2(2,1),zk2serverid>zk1serverid 我选了自己 zk2 2 zk1 对zk2 zk2(2,1)->zk1(1,1) - >我的小于zk2,我选zk2 我选zk2 zk2 Zk3 一启动,发现有2 个已经选了zk2,它的选择没有意义,现在leader 是zk2
1 启动时 在选举期间,外键无法是zk 来存储数据 2 大佬死了 外键无法使用zk来存储数据,除非有了新的大佬
可能存在很多客户端操作zk,但是zk会把这些操作排序,然后一个一个操作,它是单线程模型
我把数据写入到leader 里面,此时还没有成功,当follow 复制成功数据后,才算成功
当我把数据写入成功后,zookeerper 会永久的保留此次操作,直到另一个操作又对他做了改变
Zk1 zk2 zk3 从zookeepr 集群里面任意一台机器上面,获取的数据都是一模一样的
当数据发生改变时,zookeeper 会通知观察者来修改自己的数据
五个特性合并成一句话: 原子扩散
C: 数据一致性 A: 服务可用性 P: 分区容错性 Cap 特性无法同时满足,一般只能满足2个点 AP :数据一致且容错 CP:服务可用,且容错 在zookeeper 里面数据的强一致性 Zookeeper 满足 :CP 数据必须一致,但是大佬挂了,无法写数据进去
192.168.231.143:2181 - >192.168.231.143:2181 ,192.168.231.143:2182 ,192.168.231.143:2183
实现zookeeper的功能 有个人实现了 Eureka(我找到了)(微服务)spring cloud 生态体系注册中心 Zookeeper : AP 数据强一致容错 java Eureka 区别:CP 服务可用容错 java