一:概念
zookeeper是一个分布式的,开放源代码的分布式应用程序协调服务。而Apache Hbase和Apache Solr等的分布式集群都用到了zookeeper。zookeeper相当于一个集群管理软件,SolrCloud就需要Solr基于Zookeepe部署,由zookeeper进行协调管理。
二:角色:
Leader:领导者,对于改变系统状态的更新操作,交由Leader进行提议投票,超过半数通过后返回结果给client,它不接受client请求。
Follower:跟随者,服务client请求,对于不改变系统一致性状态的读操作由follower的本地内存数据库直接给client返回结果。
Observer:观察者接受客户端连接,将写请求转发给leader节点。
三:原理:
Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议是Zab协议。Zab协议的两种模式:恢复模式(选主)、广播模式(同步),当服务器启动或者领导者崩溃,Zab进入恢复模式。当领导者被选举出来,且大多数server完成了和leader的状态同步,恢复模式结束。
当leader已经和多数follower进行状态同步后,他就可以开始广播消息了,进入广播状态。广播模式及其类似于分布式事务中的2pc,,即leader提起一个决议,由followers进行投票,leader对投票结果进行计算决定是否通过该决议,通过则执行该事务,不通过则不执行。
四:准备环境:
安装jdk
五:搭建zookeeper集群:
1、集群配置
zookeeper必须是集群才能保证高可用,zookeeper有选举和投票的机制。集群至少有3个节点,所以通常zookeeper由2n+1台servers组成,每个server都知道彼此的存在,只要有n+1台server可用,整个系统保持可用。如下是一个搭建集群的demo,在一台虚拟机上创建三个zookeeper实例(伪分布式),当然,真正情况下各个节点应该在不同的服务器上。
2、搭建步骤:
1、将安装包下载到服务器上、解压、复制
3、配置
zookeeper01文件夹中创建data目录,并且在data目录中创建myid文件,内容为1,zk02为2,zk03为3
进入conf文件,把zoo_sampe.cfg改名为zoo.cfg/或者复制一份,改名为zoo.cfg
修改zoo.cfg:
dataDir=/usr/local/solr-cloud/zookeeper01/data/
clientPort=2181
dataDir为myid的路径,这里分别设置三个zookeeper各自的路径
clientPort为端口号:只要不和其他端口号冲突即可,分别为2181、2182、2183
zoo.cfg文件中添加如下内容:
server.1=192.168.246.44:2881:3881
server.2=192.168.246.44:2882:3882
server.3=192.168.246.44:2883:3883
剩下的两个同理。。。
4、启动zookeeper
5、查看服务状态