Zookeeper 安装方式有三种,分别为单机模式,伪集群模式,集群模式
1.单机模式:Zookeeper 只运行在一台服务器上,适合测试环境
2.伪集群模式:在一台物理机上运行多个Zookeeper 实例
3.集群模式:Zookeeper 运行在一个集群上,适合生产环境,这个计算机集群被称为一个“集群合体“
Zookeeper 通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它能够保证服务器继续,为什么一定要超过半数?这跟Zookeeper 的复制策略有关;Zookeeper 确保对Znode 树的每一个修改都会有被复制到集合体种超过半数的机器上。
单机模式
配置准备
和之前所说一样,将下载的.tar文件放在一个自己指定的目录下,解压该文件并复制到另一个自己指定的目录下,我自己指定目录是/usr/share
使用root 用户修改/etc/profile 文件,添加ZOODEEPER_HOME环境变量,给PATH追加:$ZOOKEEPER_HOME/bin,如所示:
退出并重新登录hadoop用户,验证修改失败。
修改Zookeeper 的配置文件
Zookeeper 服务器包含单个JAR文件中,安装此服务器·需要用户创建一个配置文档,并对其进行设置。在$ZOOKEERER_HOME/conf
下复制一个zoo.cfg 配置文件:cp zoo_sample.cfg zoo.cfg
使用编辑模式打开,包含如下内容:
在这个文件中,tickTime 是基本事件单元,以毫秒为单位来指示心跳,会话过期时间为两倍的tickTime ,dataDir 指示存储中数据库快照的位置,如果不设置,更新事务日志将会被存储到默认位置。ClientPort :监听客户端连接的端口
为方便管理,需要修改dataDir 的值为ZOOKEEPER_HOME/snapshot/data.先创建目录:
madir -p ZOOKEEPER_HOME/snapshot/data.
再修改zoo.cfg 的dataDir 项目:
在使用单机模式时需要注意,这种配置方式下由于没有Zookeeper 副本,所以一旦Zookeeper 服务器出现故障,则整个Zookeeper 服务器将会停止
启动和关闭Zookeeper
1.启动Zookeeper 服务 zkServer.sh start
2.查看Zookeeper 服务状态 zkServer.sh status
3.关闭Zookeeper服务 zkServer.sh stop
伪集群模式
Zookeeper 不但可以在单机上运行,而且可以在单机模拟集群模式来运行,也就是说将不同的节点运行在同一台机器上。在前面说过Hadoop的操作和分布式模式下有着很大的不同,但是在伪分布式模式下对于Zokkeeper 操作没有本质区别。在实验中可以先使用少量数据在集群伪分布模式下进行测试,当测试可行时,同时大大提高了实验效率。伪分布式比较简便,成本也低,适合测试和学习。
使用集群伪分布模式时,需要在单台机器上运行多个Zookeeper 实例,因此就必须保证各个实例的参数不能产生冲突,具体如下:
1.clientPort:用来设置客户端连接Zookeeper 的端口号,当一台机器上部署多个Zookeeper 时,则每台机器就需要有不同的clientPort设置
2.dataDir和dataLogDir:在集群伪分布模式下,这两个需要区分下,将每个Zookeeper 实例的数据文件和日志文件存放,要求这两个文件有不同的路径
3.server.X 和myid: server .X 值就是对应的data/myid 中的数字值。3个Server 的myid 文件分别写入0,1,2,那么每个Server 中的zoo.cfg 都配置server.0,server.1,server.2
第一步:创建和修改Zookeeper 配置文件,这里所配置的集群伪分布模式是通过zoo1.cfg ,zoo2.cfg,zoo3.cfg 模拟三台机器的zookeeper集群
一次修改zoo2.cfg ,zoo3.cfg 配置文件
第二步:创建并配置dataDir 目录:
mkdir -p $ZOOPEEPER_HOME/snapshot/data_1
mkdir -p $ZOOPEEPER_HOME/snapshot/data_2
mkdir -p $ZOOPEEPER_HOME/snapshot/data_3
第三步:创建myid:
在上面创建的目录下,分别创建myid
第四步:启动Zookeeper ,在集群伪分布模式下,由于要在一台机器上运行Zookeeper 实例,因此要使用三条独立的命令分别启动:
退出到最初目录下
zkServer.sh start zoo1.cfg zkServer.sh start zoo2.cfg zkServer.sh start zoo3.cfg
使用jps 命令看到三个QuorumPeerMain进程在运行:(还是在最初的目录下执行)
第五步:停止Zookeeper 服务:也是分别执行
zkServer.sh stop zoo1.cfg 同上
集群模式
集群模式可以确保可靠的Zookeeper 服务,只要集群大多数的Zookeeper 服务启动了,那么Zookeeper 服务将总是可用的。另外,最好使用奇数机器,如果Zookeeper 拥有5台机器,系统就能够2台机器的故障了。
集群模式的安装和单机模式的安装类似,需要所有主机对JAVA环境进行设置,在每台机器上的conf/zoo.cfg 配置文件的参数设置相同,这里说明的是使用3个节点。
第一步:创建和修改hadoop1主机上的zookeeper 配置文件zoo.cfg
图中所看到的server.id=host:port:port 参数指示了不同的Zookeeper 服务器的自身标识,作为集群的成员的机制应该知道ensemble 中的其他机器信息,这些信息就是从这个参数中获取的。这一行配置中,第一个端口用来从Follower 机器连接到主Leader 机器端口,第二个端口是用来进行Leader 选举的端口。在本次实验中,每台机器使用了三个端口,客户端连接端口2181,Follower 连接Leader 端口2888,Leader 选举端口3888
注意,因为在集群模式下是在不同的主机上启动服务的,dataDir 和clientPort 可以相同
第二步:配置hadoop2和hadoop3 主机的环境变量,可以通过复制hadoop1主机的/etc/profile 文件配置到hadoop2和hadoop3;
scp /etc/profile root@hadoop2:/etc/profile 对于3也一样,当然也可以挨个配置
第三步:通过复制hadoop1主机上的/usr/zookeeper-3.4.8(依照个人情况来) 目录来部署hadoop2 和hadoop3 主机的zookeeper 环境
scp -r /usr/zookeeper-3.4.8/hadoop@hadoop2:/usr/hadoop
第四步:创建myid,分别在三台机器上/usr/zookeeper-3.4.8/snapshot/data 目录下创建myid 文件
与伪集群模式下创建的方式一样,不再赘述
在服务器的data(dataDir 参数所指的目录)目录下创建的myid 文件仅还有一行的内容,该值用于指定自身的id,例如,服务器1应该在myid 文件写入1,并且在这个id 值必须是emsemble 中唯一值,大小在0-255之间。
第五步:启动zookeeper 服务,分别在3台机器上分别启动zookeeper 服务:
zooServer.sh start
注意:在运行完第一条指令之后,某些特定功能可能会出现异常,原因是由于Zookeeper 服务的每个实例都拥有全局配置信息,他们在启动时候会随时进行Leader 选举规则,此时,第一个启动的Zookeeper 需要和另外两个Zookeeper 实例进行通信。但如果另外两个Zookeeper 实例没有启动起来,就有可能产生异常信息。对于这样的信息,可以忽略。待其他zookeeper 实例安装启动后,相应的异常信息会自动消失。
第六步:查看Zookeeper 服务状态
分别在三个不同机器上 zkServer.sh status
第七步:停止服务
zkServer.sh stop