1.1
1.1.1系统描述
ZooKeeper是一个高可用、高可靠的协同工作系统,分布式程序可以用ZooKeeper保存并更新关键共享状态。
Katta使用zookeeper保证主节点和搜索节点的有效性,指派索引文件给搜索节点,察觉搜索节点的失效等。
1.1.2 安装和配置
安装zookeeper也很简单,下载zookeeper-3.1.1.tar.gz,解压到/home/hezhiming/zookeeper-3.1.1。zookeeper要部署到各台机器的相同目录下,且具有相同的配置文件。
Zookeeper 的配置文件主要有以下两个:
1、/zookeeper -3.1.1/conf/zoo.cfg:
# 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.
dataDir=/home/nutch/zookeeper-3.1.1/zookeeper-data
# the port at which the clients will connect
clientPort=3355
# 2888,3888 are election port
server.1=devcluster01:2555:3555
server.2=devcluster05:2555:3555
server.3=devcluster06:2555:3555
注明:2555端口号是zookeeper服务之间通信的端口,而3555是zookeeper与其他应用程序通信的端口。
2、myid(在zoo.cfg 配置的dataDir目录下,此处为/home/nutch/zookeeper-3.1.1/zookeeper-data)
注意: Myid中的值与server的编号相同:
devcluster01上的myid:
1
devcluster05上的myid:
2
devcluster06上的myid:
3
1.1.3 启动zookeeper
到每台zookeeper server的目录下,执行:
启动
关闭 ./bin/zkServer.sh start
1.1.4zookeeper的使用
zookeeper启动之后,不需要执行命令,只需查看批准的状况,命令如下:
1、ruok - The server will respond with imok if it is running. Otherwise it will not respond at all.
2、kill - When issued from the local machine, the server will shut down.
3、dump - Lists the outstanding sessions and ephemeral nodes. This only works on the leader.
4、stat - Lists statistics about performance and connected clients.
例如:
Imok$
2.1 Katta和zookeeper的关系
2.4.1 什么是zookeeper?
zookeeper是针对分布式应用的分布式协作服务,它的目的就是为了减轻分布式应用从头开发协作服务的负担。
它的基本功能是命名服务(naming),配置管理(configuration management),同步(synchronization)和组服务 (group services)。在此基础上可以实现分布式系统的一致性,组管理,Leader选举等功能。
一个zookeeper机群包含多个zookeeper服务器,这些Server彼此都知道对方的存在。 Zookeeper系统结构图如图2所示:
l所有的Server都保存有一份目前zookeeper系统状态的备份;
2在zookeeper启动的时候,会自动选取一个Server作为Leader,其余的Server都是Follower;
3作为Follower的Server服务于Client,接受Client的请求,并把Client的请求转交给Leader,由Leader提交请求。
4Client只与单个的zookeeper服务器连接。Client维护一个持久TCP连接,通过其发送请求, 获取响应和事件,并发送心跳信息。如果Client到Server的TCP连接中断, Client将会连接到另外一个Server。
5zookeeper机群的鲁棒性是我们使用它的原因,只要不超过半数的服务器当机(如果正常服务的服务器数目不足一半,那么原有的机群将可能被划分成两个信息无法一致的zookeeper服务),该服务就能正常运行。
2.4.2 zookeeper的虚拟文件系统
Zookeeper允许多个分布在不同服务器上的进程基于一个共享的、类似标准文件系统的树状虚拟文件系统来进行协作。虚拟文件系统中的每个数据节点都称作一个znode。每个znode都可以把数据关联到它本身或者它的子节点.如图3所示:
1每个znode的名称都是绝对路径名来组成的,如“/katta/index/index_name”等。
2读取或写入znode中的数据都是原子操作,read会获取znode中的所有字节, write会整个替换znode中的信息.每个znode都包含一个访问控制列表(ACL)以约束该节点的访问者和权限.
3有些znode是临时节点.临时节点在创建它的session的生命周期内存活, 当其session终止时,此类节点将会被删除.
4zookeeper提供znode监听器的概念. Client可以在某个znode上设置监听器以监听该znode的变更. 当znode有变更时, 这些Client将会收到通知,并执行预先敲定好的函数。
那么Zookeeper能为我们做什么事情呢?简单的例子:假设这样一个系统:
1
2 一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集) ;
3 一个备用的总服务器(负责当总服务器宕机时替换总服务器) ;
4 一个web的cgi(向总服务器发出搜索请求) 。
使用Zookeeper可以保证:
1.总服务器自动感知有多少台服务器可以提供搜索服务,并向这些服务器发出搜索请求;
2.总服务器当机时自动启用备用的总服务器;
3.Web的cgi能够自动地获知总服务器的网络地址变化。
这些都可以通过zookeeper的虚拟文件系统来实现,把这些状态信息,配置,位置等信息都保存于znode中,znode是被所有服务器共享的,通过znode及其数据的变化来完成服务器之间的协作。
2.4.3 Katta与zookeeper的关系
l
2 Master管理服务器, Node检索服务器和Client服务器之间的通信就是通过zookeeper来实现的。
3