zookeeper
Zookeeper
Zookeeper是开源的分布式的协调服务框架,是Apache Hadoop的子件,适用 于绝大部分分布式集群的管理
Zookeeper的特点
-
本身是一个树状结构 --- Znode树
-
每一个节点称之为znode节点
-
根节点是 /
-
Zookeeper的所有操作都必须以根节点为基准进行计算 /
-
每一个znode节点都必须存储数据
-
任意一个持久节点都可以有子节点
-
任意一个节点的路径都是唯一的
-
Znode树是维系在内存中 --- 目的是为了快速查询
-
Zookeeper不适合存储海量数据。原因:1)维系在内存中,如果存储大
量数据会耗费内存 2) 不是一个存储框架而是一个服务协调框架
-
Zookeeper会为每一次事务(除了读取以外的所有操作都是事务)分配一
个全局的事务id ---Zxid
Zookeeper的选举
第一阶段:数据恢复阶段 会从数据目录(dataDir)中恢复数据 第二阶段:选举阶段
-
所有的节点都会推荐自己当leader并且发送自己的选举信息(最大事务 id - pZxid,编号 - myid,逻辑时钟值)
-
选举原则:先比较最大事务id,谁的事务id大谁就胜出;如果最大事务id 一样,则比较myid,谁的myid大谁就胜出
-
选举出的leader的胜出要满足过半性:即要比至少一半的节点大
-
如果在集群中新加入一个节点,节点的事务id比leader的事务id大,新的 节点是否会成为leader? --- 不会。只要选定了一个leader,那么后续节点
的事务id和myid无论是多少,一律都是follower
-
如果leader宕机,集群中会自动选举一个新的leader
Zookeeper的一致性
在Zookeeper中,接收一个请求之后,leader会将请求分发给每一个节点,由所有的节点投票确定是否执行这个请求 --- 如果有超过一半的节点同意执行 这个请求,那么这个时候leader才会决定执行这个操作

浙公网安备 33010602011771号