Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

Zookeeper_3.3.5源码分析 PDF 下载


分享到:
时间:2020-08-16 09:34来源:http://www.java1234.com 作者:小锋  侵权举报
Zookeeper_3.3.5源码分析 PDF 下载
失效链接处理
Zookeeper_3.3.5源码分析 PDF 下载


本站整理下载:
 
相关截图:
 
主要内容:

1. 安装部署
很多手册、博客中已经提到过,zookeeper 是一种为分布式应用提供一致性服务的协调
系统,是开源 hadoop 项目下的一个子项目。分布式应用可以用它来实现诸如同步、配置管
理、分组、命名服务等功能。系统用途、使用场景、典型应用在这里不再赘述,详情可参考:
http://en.wikipedia.org/wiki/Zookeeper
zookeeper 最新 release 版本是 3.4.5,笔者主要针对 3.3.5 版本进行了深入了解:
http://zookeeper.apache.org/doc/r3.3.5/,而本章主要讲解 Zookeeper-3.3.5 的安装部署。安装
步骤可参考:http://hadoop.apache.org/zookeeper/docs/current/zookeeperStarted.html,但是
原文讲述不够详细,比较笼统,因此有必要对步骤重新进行简略说明。
zookeeper 的安装模式有三种:
 单机模式(stand-alone):单机单 server
 集群模式:多机多 server,形成集群
 伪集群模式:单机多个 server,形成伪集群
1.1 单机模式
第一步,获取 zookeeper 稳定版本安装包,假设 MY_HOME 为基路径:
MY_HOME=******
cd ${MY_HOME}
wget http://mirror.bjtu.edu.cn/apache/zookeeper/stable/zookeeper-3.3.5.tar.gz
tar zxf zookeeper-3.3.5.tar.gz
第二步,修改配置文件 zoo.cfg:
cd ${MY_HOME}/zookeeper-3.3.5/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
需要对 zoo.cfg 做如下修改:
tickTime=2000
dataDir=${MY_HOME}/zookeeper-3.3.5/data
clientPort=2222
第三步,启动 server:
Zookeeper-3.3.5 源码分析
百度在线网络技术(北京)有限公司 - 6 -
cd ${MY_HOME}/zookeeper-3.3.5/bin
./zkServer.sh start
1.2 集群模式
第一步,获取 zookeeper 稳定版本安装包:
MY_HOME=******
cd ${MY_HOME}
wget http://mirror.bjtu.edu.cn/apache/zookeeper/stable/zookeeper-3.3.5.tar.gz
tar zxf zookeeper-3.3.5.tar.gz
第二步,配置文件 zoo.cfg 修改:
cd ${MY_HOME}/zookeeper-3.3.5/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
需要对 zoo.cfg 做如下修改:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=*****/zookeeper-3.3.5/data
clientPort=2222
server.1=server1_ip:2888:3888
server.2=server2_ip:2888:3888
server.3=server3_ip:2888:3888
注 1:本章会在后面补充讲述各配置参数的作用。
第三步,创建 data 目录和 myid 文件:
cd ${MY_HOME}
mkdir data
cd data
vi myid
Zookeeper-3.3.5 源码分析
百度在线网络技术(北京)有限公司 - 7 -
在这里需要写下该 server 对应的编号,与 zoo.cfg 的 server list 对应,比如 server1 就写
1,server2 就写 2,server3 就写 3。
需要注意:zkServer.sh 脚本存在 BUG,可能导致出现异常。BUG 在 zkServer.sh 中:
start)
...
nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \ "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
 -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < 
/dev/null &
 if [ $? -eq 0 ] 
 then
 if /bin/echo -n $! > "$ZOOPIDFILE"
 then
 sleep 1
 echo STARTED
 else
 echo FAILED TO WRITE PID #这句说明写入 Pid 出现了问题
 exit 1
 fi 
...
dataDir 是 Zookeeper 进程内部建立的,并且有一定延迟, 因此将 zookeeper 进程 id 写入
到 dataDir 下的 pidfile 时,dataDir 可能还没有建立好。对启动脚本稍作修改即可修复这个问
题:
start)
...
nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \ "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \ -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < 
/dev/null &
zkpid=$!;
if [ $? -eq 0 ] 
Zookeeper-3.3.5 源码分析
百度在线网络技术(北京)有限公司 - 8 -
 then
while [ ! -d `dirname $ZOOPIDFILE` ]
 do 
 sleep 1;
 done
 if /bin/echo -n $zkpid > "$ZOOPIDFILE"
 then
 sleep 1
 echo STARTED
 else
 echo FAILED TO WRITE PID
 exit 1
 fi
...
第四步,同步该文件夹到其他机器上,然后依次启动各 server:
cd ${MY_HOME}/zookeeper-3.3.5/bin
./zkServer.sh start
1.3 伪集群模式
安装方式和集群模式类似,只是需要额外注意两点即可:
1) 部署到不同的 MY_HOME,比如将 server 部署到同一目录下的 server1、server2、
server3 目录中。
2) zoo.cfg 中配置信息不能重复,尤其是 dataDir、clientPort 和 server list 的端口设置不
能重复。建议配置方式如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=*****/zookeeper-3.3.5/data
clientPort=*****
server.1=127.0.0.1:2888:2889
Zookeeper-3.3.5 源码分析
百度在线网络技术(北京)有限公司 - 9 -
server.2=127.0.0.1:3888:3889
server.3=127.0.0.1:4888:4889
注 2:集群/伪集群模式启动首个 server 时,可能会报大量错误,这是因为现在只起了 1 个 server,server 启动后会根据 zoo.cfg 的 server list 发起选举 leader 的请求,因为连不上其
他机器而报错;当我们起第二个 server 后,leader 将会被选出,从而一致性服务开始可以使
用。
注 3:启动后需要对 server 的状态进行查看,有两种方法:
1) ./zkServer.sh status,可以获取"Using config"和"Mode"信息。
2) jps 命令,可以查看部署在 zookeeper 节点上的 QuorumPeerMain 进程是否存在。
1.4 配置参数说明
dataDir
用于存放内存数据库快照的文件夹,同时用于集群的 myid 文件也存在这个文件夹里。
dataLogDir
用于单独设置 transaction log 的目录,transaction log 分离可以避免和普通 log 还有快照
的竞争。
tickTime
心跳时间,为了确保 client-server 连接存在的,以毫秒为单位,最小超时时间为两个心
跳时间。
clientPort
客户端监听端口。
globalOutstandingLimit
client 请求队列的最大长度,防止内存溢出,默认值为 1000。
preAllocSize
预分配的 Transaction log 空间 block 为 proAllocSize KB,默认 block 为 64M,一般不需要
更改,除非 snapshot 过于频繁。
snapCount
在 snapCount 个 snapshot 后写一次 transaction log,默认值是 100,000。
traceFile
用于记录请求的 log,打开会影响性能,用于 debug,最好不要定义。
maxClientCnxns
Zookeeper-3.3.5 源码分析
百度在线网络技术(北京)有限公司 - 10 -
最大并发客户端数,用于防止 DOS 的,默认值是 10,设置为 0 是不加限制。
clientPortBindAddress
可以设置指定的 client ip 以及端口,不设置的话等于 ANY:clientPort
minSessionTimeout
最小的客户端 session 超时时间,默认值为 2 个 tickTime,单位是毫秒
maxSessionTimeout
最大的客户端 session 超时时间,默认值为 20 个 tickTime,单位是毫秒
electionAlg
用于选举的实现的参数,0 为以原始的基于 UDP 的方式协作,1 为不进行用户验证的基
于 UDP 的快速选举,2 为进行用户验证的基于 UDP 的快速选举,3 为基于 TCP 的快速选举,
默认值为 3。
initLimit
多少个 tickTime 内,允许其他 server 连接并初始化数据,如果 zooKeeper 管理的数据较
大,则应相应增大这个值。
syncLimit
多少个 tickTime 内,允许 follower 同步,如果 follower 落后太多,则会被丢弃。
leaderServes
leader 是否接受客户端连接。默认值为 yes。leader 负责协调更新。当更新吞吐量远高
于读取吞吐量时,可以设置为不接受客户端连接,以便 leader 可以专注于同步协调工作。
server.x=[hostname]:nnnnn[:nnnnn]
配置集群里面的主机信息,其中 server.x 的 x 要写在 myid 文件中,决定当前机器的 id,
第一个 port 用于连接 leader,第二个用于 leader 选举。如果 electionAlg 为 0,则不需要第二
个 port。hostname 也可以填 ip。
group.x=nnnnn[:nnnnn]
分组信息,表明哪个组有哪些节点,例如 group.1=1:2:3 group.2=4:5:6 group.3=7:8:9。
weight.x=nnnnn
权重信息,表明哪个结点的权重是多少,例如 weight.1=1 weight.2=1 weight.3=1


 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐