zookeeper入口在哪
首先通过 ./zkServer.sh start 开启zookeeper
通过 jps -l 查看开启了那些java线程运行的类,图中表明运行了QuorumPeerMain
源码启动zookeeper
在github上下载zookeeper源码
1.将代码导入idea,配置信息如下信息
2.通过maven下载jar包
在这里插入图片描述
-Dlog4j.configuration=file:F:\message\study\framework\zookeeper\zookeeper源码\zookeeper-master/conf/log4j.properties
3.如果这里的jar包报红线,则根据路径删除jar包重新下载
4.还是不好使则将不好使的项目先clean 然后在compile
尽量不要用 clean 和 complile 如果class没有编译好可以试试
5.然后在 zookeeper-server 项目中添加如下接口
package org.apache.zookeeper.version;
public interface Info {
int MAJOR = 3;
int MINOR = 5;
int MICRO = 6;
String QUALIFIER = null;
String REVISION_HASH = "c11b7e26bc554b8523dc929761dd28808913f091";
String BUILD_DATE = "10/08/2019 20:18 GMT";
}
6.针对单机版本和集群版本,启动分别对应两个类:
单机:ZooKeeperServerMain
集群:QuorumPeerMain
启动QuorumPeerMain即可
zk启动流程
1.初始化配置
2.初始化datatree
3.监听客户端端口
4.领导选举
5.初始化服务器其他信息
为什么在本服务器上节点过半才可用
如果节点为5个,节点必须要大于等于3个才好使
zookeeper为什么节点过半才可以使用?为什么要这样设置
主要是为了在部署zookeeper集群的时候节点部署到多个服务器上,服务器之间如果由于网络原因中断,那么在中断的时间内zookeeper会在这段时间内选举出一个节点作为leader,当本服务器上部署的节点数过半时候才可以选举出来leader节点,如果不过半就可以选举出leader节点的话,那么两台服务器则会选举出来两个leader节点,这样当网络恢复正常则会出现问题(脑裂)。
要求zk运行时只有一个leader或者没有leader才可以持续运行。
Paxos算法
Paxos算法是为了保证一致性,在一致性算法中Paxos最好
Paxos算法的前提条件就是 不存在拜占庭将军问题(传递的信息不能被篡改)
达到一致性的方法有两种 共享内存和 消息传递
共享内存: 可以理解为有一个中心存储着所有投票信息,最终做出决定(中心挂了则不能服务)
消息传递: 没有中心,每个节点和别的所有的节点单独通信
Paxos 算法采用消息传递方案来解决一致性