欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zookeeper集群搭建

程序员文章站 2022-05-07 14:22:07
...

原创转载请注明出处:http://agilestyle.iteye.com/blog/2290649

 

Zookeeper介绍

Zookeeper是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠的协调系统,提供的功能包括配置维护、名字服务、分布式同步、组服务等。ZooKeeper是可以集群复制的,集群间通过Zab(Zookeeper Atomic Broadcast)协议来保持数据的一致性。该协议看起来像是Paxos协议的某种变形,该协议包括两个阶段:leader election阶段和Atomic broadcas阶段。集群中将选举出一个leader,其他的机器则称为follower,所有的写操作都被传送给leader,并通过broadcas将所有的更新告诉follower。当leader崩溃或者leader失去大多数follower时,需要重新选举出一个新的leader,让所有的服务器都恢复到一个正确的状态。当leader被选举出来,且大多数服务器完成了和leader的状态同步后,leader election的过程就结束了,将进入Atomic broadcas的过程。Atomic broadcas同步leader和follower之间的信息,保证leader和follower具有相同的系统状态。

zookeeper集群搭建
 

Zookeeper的核心其实类似一个精简的文件系统,提供一些简单的操作和一些附件的抽象(例如:znode的排序与watch),并且集群的部署方式使其具有较高的可靠性。Zookeeper的协作过程简化了松散耦合系统之间的交互,即使参与者彼此不知道对方的存在,也能够相互发现并且完成交互。

 

集群搭建

配置ZOOKEEPER_HOME

sudo vi /etc/profile
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper-3.4.8
export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${ZOOKEEPER_HOME}/bin

zookeeper集群搭建
配置之后,记得source /etc/profile 

 

创建两个文件夹zkdata和zkdatalog

mkdir zkdata
mkdir zkdatalog

zookeeper集群搭建
 

配置zoo.cfg

cd conf
cp zoo_sample.cfg zoo.cfg

zookeeper集群搭建
 

vi zoo.cfg

修改dataDir,添加dataLogDir,修改clientPort,防止端口已被占用(默认端口号前面加1,比如2181 > 12181, 2888:3888 > 12888:13888

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/hadoop/app/zookeeper-3.4.8/zkdata
dataLogDir=/home/hadoop/app/zookeeper-3.4.8/zkdatalog
# the port at which the clients will connect
clientPort=12181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.0=hadoop-0000:12888:13888
server.1=hadoop-0001:12888:13888
server.2=hadoop-0002:12888:13888

zookeeper集群搭建
 

机器标识写入快照文件

cd zkdata
ls
echo 0 > myid
ls
cat myid

zookeeper集群搭建
 

配置完hadoop-0000上的ZooKeeper之后,scp到hadoop-0001和hadoop-0002

scp -r /home/hadoop/app/zookeeper-3.4.8/ hadoop-0001:/home/hadoop/app/zookeeper-3.4.8
scp -r /home/hadoop/app/zookeeper-3.4.8/ hadoop-0002:/home/hadoop/app/zookeeper-3.4.8

scp之后,需要修改每个Server的机器标识

zookeeper集群搭建

zookeeper集群搭建
 

最后分别启动三台Server上的zookeeper

zkServer.sh start

zookeeper集群搭建
zookeeper集群搭建
zookeeper集群搭建
 

查看Server状态

zkServer.sh status

zookeeper集群搭建
zookeeper集群搭建
zookeeper集群搭建
 

查看目录情况

zkCli.sh -server-port 12181

zookeeper集群搭建
 

jps查看进程

zookeeper集群搭建
 

修改zookeeper默认的日志zookeeper.out以及日志文件位置

修改conf目录下的log4j.properties

zookeeper.root.logger=INFO, ROLLINGFILE

zookeeper集群搭建
修改bin目录下的zkEnv.sh

ZOO_LOG_DIR="/home/hadoop/app/zookeeper-3.4.8/zkdatalog"
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

zookeeper集群搭建
 

重新启动zookeeper后,输出的日志文件就在自定义的zkdatalog目录下了

zookeeper集群搭建
 

设置定时清理日志和快照

http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#Ongoing+Data+Directory+Cleanup

 

Reference

大型分布式网站架构设计与实践 陈康贤 著