zookeeper集群搭建
原创转载请注明出处: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的核心其实类似一个精简的文件系统,提供一些简单的操作和一些附件的抽象(例如: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
配置之后,记得source /etc/profile
创建两个文件夹zkdata和zkdatalog
mkdir zkdata mkdir zkdatalog
配置zoo.cfg
cd conf cp zoo_sample.cfg zoo.cfg
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
机器标识写入快照文件
cd zkdata ls echo 0 > myid ls cat myid
配置完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的机器标识
最后分别启动三台Server上的zookeeper
zkServer.sh start
查看Server状态
zkServer.sh status
查看目录情况
zkCli.sh -server-port 12181
jps查看进程
修改zookeeper默认的日志zookeeper.out以及日志文件位置
修改conf目录下的log4j.properties
zookeeper.root.logger=INFO, ROLLINGFILE
修改bin目录下的zkEnv.sh
ZOO_LOG_DIR="/home/hadoop/app/zookeeper-3.4.8/zkdatalog" ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
重新启动zookeeper后,输出的日志文件就在自定义的zkdatalog目录下了
设置定时清理日志和快照
http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#Ongoing+Data+Directory+Cleanup
Reference
大型分布式网站架构设计与实践 陈康贤 著
上一篇: PHP 5.6.20 发布
下一篇: python堆排序算法实例代码