zookeeper系列之概要介绍

 

Zookeeper是Hadoop下的一个子项目,主要用来在分布式环境下提供分布式锁、配置管理、名字服务、群组服务。它具有很高的可用性、稳定性、可靠性。它在分布式应用中像一把瑞士军刀,很多地方都用得着,像我们的DMS系统中就用它来提供分布式锁服务和动态配置服务。

Zookeeper就像google在云技术领域提供的四大金刚之chubby(分布式锁服务),采用了简化的praxos算法来确保zookeeper集群节点的数据一致性。Zookeeper可以部署为standalone模式或quorum模式。Standalone模式就是只有单个Zookeeper server提供服务,优点是部署简单,缺点是有单点故障,不能提供高负载,可靠性无法保证,一旦server当机,将不能提供服务,这种模式主要使用在测试环境中,生产环境不建议采用这种模式。Quorum模式则正好相反,只要Quorum的成员有一半以上处于正常状态,就能对外提供服务,具有高可用性,Quorum成员可以共同分担业务请求的负载。没有单点故障。下图是zookeeper的架构图。

zookeeper系列之概要介绍_第1张图片
zookeeper提供的简单接口:

Zookeeper 查询命令

Zookeeper查询命令主要用来查询服务器端的数据,不会更改服务器端的数据。所有的查询命令都可以即刻从client连接的server立即返回,不需要leader进行协调,因此查询命令得到的数据有可能是过期数据。但由于任何数据的修改,leader都会将更改的结果发布给所有的Follower,因此一般说来,Follower的数据是可以得到及时的更新。这些查询命令包括以下这些命令:

1.   exists:判断指定pathnode是否存在,如果存在则返回true,否则返回false.

2.   getData:从指定path获取该node的数据

3.   getACL:获取指定pathACL

4.   getChildren:获取指定pathnode的所有孩子结点。

所有的查询命令都可以指定watcher,通过它来跟踪指定path的数据变化。一旦指定的数据发生变化(create,delete,modified,children_changed),服务器将会发送命令来回调注册的watcher. Watcher详细的讲解将在ZookeeperWatcher中单独讲解。

Zookeeper修改命令

Zookeeper修改命令主要是用来修改节点数据或结构,或者权限信息。任何修改命令都需要提交到leader进行协调,协调完成后才返回。修改命令主要包括:

1.   createSession请求server创建一个session

2.   create创建一个节点

3.   delete删除一个节点

4.   setData修改一个节点的数据

5.   setACL修改一个节点的ACL

6.   closeSession请求server关闭session

任何修改命令都需要leader协调。 leader的协调过程中,需要3leaderFollower之间的来回请求响应。并且在此过程中还会涉及事务日志的记录,更糟糕的情况是还有take snapshot的操作。因此此过程可能比较耗时。但Zookeeper的通信中最大特点是异步的,如果请求是连续不断的,Zookeeper的处理是集中处理逻辑,然后批量发送,批量的大小也是有控制的。如果请求量不大,则即刻发送。这样当负载很大时也能保证很大的吞吐量,时效性也在一定程度上进行了保证。

配置与安装

Zookeeper代码依赖简单,仅仅依赖于log4j。部署也非常简单,只需要在官网(http://hadoop.apache.org/zookeeper/)上下载包,解压到安装目录,修改配置文件,拷贝一份zoo-sample.cfg将其修改如下:

 

 

#snapShot存放路径
dataDir=data
#transaction log 存放路径
dataLogDir=dataLog
#接收客户端请求的server端口,默认为
clientPort=2181
#代表1 tickTime多少毫秒,默认为2000毫秒
tickTime=2000
#初始化leader的时间,如果超过initLimit时间还没有收到大多数Follower的newLeader响应,则重新与各follower连接。
initLimit=5
#follower与leader之间的超时时间
syncLimit=5
#0:LeaderElection;1:AuthFastLeaderElection 非授权模式 2:AuthFastLeaderElection 授权模式 3:FastLeaderElection
electionAlg=0
#允许同一个client向server提交了请求,但还未返回的最大请求数
maxClientCnxns=100
#server.servrId=host:port:port
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
server.4=localhost:2884:3884
server.5=localhost:2885:3885

#group与weight跟大多数同意的策略相关,大多数同意策略为让所有组有超过一半权重的server已经确认过,则可以通过,
#如果没有指定server的权重,则默认为1,group中一定要包含所有的server,遗漏或多余都不行,当然可以不配,如果不配
#则weight也不需要配置
#group.groupId=serverId1:serverId2:serverId3:serverIdn
group.1=1:3:5
group.2=2:4

#weight.serverId=长整型数
weight.1=2
weight.2=3
weight.5=4

 

 

以上是集群环境下3.2.2版本的服务器端配置文件。在集群环境下每个server需要一个标识server编号的标识文件,这个标识文件需要放在data目录下,比如dataDir目录是/home/joe/zookeeper/data,则这个文件应该在data目录下,文件内容非常简单,就是一个数字编号,对应配置文件中指定的server.number,这个编号不能搞错,他们是通过这个编号来标识不同server的。配置文件准备就绪后,切换到zookeeper的安装目录/bin,你会看到一些zk*.sh. 比如zkCleanup.sh  zkCli.sh  zkEnv.sh  zkServer.sh。可以检查一下shell脚本来搞清该脚本的用途。zkServer.sh就是用来启动zookeeper server的。zkClearnup.sh是用来清除哪些不再使用的日志文件和snapshot文件。启动脚本zkServer.sh start。正常情况就可以看到以下信息,代表你的集群环境配置好了。恭喜你,让我们一起zookeeper使用里程吧。


zookeeper系列之概要介绍_第2张图片

 

 

你可能感兴趣的:(hadoop,应用服务器,配置管理,脚本,zk)