Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。node
■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境;
■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;
■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)mysql
Zookeeper经过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就可以保证服务继续。为何必定要超过半数呢?这跟Zookeeper的复制策略有关:zookeeper确保对znode 树的每个修改都会被复制到集合体中超过半数的机器上。sql
建立zookeeper用户和用户组,并建立zookeeper的数据和日志存储目录。数据库
# 建立zookeeper用户组 [root@localhost~]# groupadd zookeeper # 建立一个用户名为zookeeper的用户,并加入zookeeper用户组 [root@localhost~]# useradd -g mysql zookeeper # 设置密码 [root@localhost~]# passwd zookeeper
[root@localhost~]# mkdir -P /data_disk/zookeeper/data [root@localhost~]# mkdir -P /data_disk/zookeeper/logs
[root@localhost~]# chown -R zookeeper:zookeeper /data_disk/zookeeper
下载ZooKeeper:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gzapache
解压:tar -zxvf zookeeper-3.4.14.tar.gz 重命名:mv zookeeper-3.4.14 zookeeper3.4vim
# 更改所属的组和用户 [root@localhost local]# chown -R zookeeper zookeeper3.4/ [root@localhost local]# chgrp -R zookeeper zookeeper3.4/
配置文件:在conf目录下备份zoo_sample.cfg文件,建立一个配置文件zoo.cfg。bash
tickTime=2000 dataDir=//data_disk/zookeeper/data dataLogDir=/data_disk/zookeeper/logs clientPort=2181
配置环境变量:为了从此操做方便,咱们须要对Zookeeper的环境变量进行配置,方法以下在/etc/profile文件中加入以下内容:服务器
export ZOOKEEPER_HOME=/usr/local/zookeeper3.4 export PATH=$ZOOKEEPER_HOME/bin:$PATH
启动ZooKeeper的Server:zkServer.sh start;关闭ZooKeeper的Server:zkServer.sh stopsession
建立服务启动文件并发
[Unit] Description=zookeeper After=syslog.target network.target [Service] Type=forking Environment=ZOO_LOG_DIR=/data_disk/zookeeper/logs ExecStart=/usr/local/zookeeper3.4/bin/zkServer.sh start ExecStop=/usr/local/zookeeper3.4/bin/zkServer.sh stop Restart=always User=zookeeper Group=zookeeper [Install] WantedBy=multi-user.target
Zookeeper不但能够在单机上运行单机模式Zookeeper,并且能够在单机模拟集群模式 Zookeeper的运行,也就是将不一样节点运行在同一台机器。咱们知道伪分布模式下Hadoop的操做和分布式模式下有着很大的不一样,可是在集群为分布 式模式下对Zookeeper的操做却和集群模式下没有本质的区别。显然,集群伪分布式模式为咱们体验Zookeeper和作一些尝试性的实验提供了很大 的便利。好比,咱们在实验的时候,能够先使用少许数据在集群伪分布模式下进行测试。当测试可行的时候,再将数据移植到集群模式进行真实的数据实验。这样不 但保证了它的可行性,同时大大提升了实验的效率。这种搭建方式,比较简便,成本比较低,适合测试和学习,若是你的手头机器不足,就能够在一台机器上部署了 3个server。
在一台机器上部署了3个server,须要注意的是在集群为分布式模式下咱们使用的每一个配置文档模拟一台机器,也就是说单台机器及上运行多个Zookeeper实例。可是,必须保证每一个配置文档的各个端口号不能冲突,除了clientPort不一样以外,dataDir也不一样。另外,还要在dataDir所对应的目录中建立myid文件来指定对应的Zookeeper服务器实例。
■ clientPort端口:若是在1台机器上部署多个server,那么每台机器都要不一样的 clientPort,好比 server1是2181,server2是2182,server3是2183
■ dataDir和dataLogDir:dataDir和dataLogDir也须要区分下,将数据文件和日志文件分开存放,同时每一个server的这两变量所对应的路径都是不一样的
■ server.X和myid: server.X 这个数字就是对应,data/myid中的数字。在3个server的myid文件中分别写入了0,1,2,那么每一个server中的zoo.cfg都配 server.0 server.2,server.3就好了。由于在同一台机器上,后面连着的2个端口,3个server都不要同样,不然端口冲突
下面是我所配置的集群伪分布模式,分别经过zoo1.cfg、zoo2.cfg、zoo3.cfg来模拟由三台机器的Zookeeper集群.
zoo1.cfg、 zoo2.cfg、 zoo3.cfg都是同样的配置便可,只不过dataDir和dataLogDir稍微改动一下,以下:
# 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=/data_disk/zookeeper/data_1 # the port at which the clients will connect clientPort=2181 #the location of the log file dataLogDir=/data_disk/zookeeper/logs_1 server.0=localhost:2287:3387 server.1=localhost:2288:3388 server.2=localhost:2289:3389
在集群为分布式下,咱们只有一台机器,按时要运行三个Zookeeper实例。此时,若是在使用单机模式的启动命令是行不通的。此时,只要经过下面三条命令就能运行前面所配置的Zookeeper服务。以下所示:
zkServer.sh start zoo1.cfg zkServer.sh start zoo2.cfg zkServer.sh start zoo3.cfg
为了得到可靠地Zookeeper服务,用户应该在一个机群上部署Zookeeper。只要机群上大多数的Zookeeper服务启动了,那么总的 Zookeeper服务将是可用的。集群的配置方式,和前两种相似,一样须要进行环境变量的配置。在每台机器上conf/zoo.cf配置文件的参数设置 相同
在dataDir(/data_disk/zookeeper/data)目录建立myid文件,vim myid ;内容为0。
Server0机器的内容为:0
Server1机器的内容为:1
Server2机器的内容为:2
在conf目录下删除zoo_sample.cfg文件,建立一个配置文件zoo.cfg,以下所示,代码清单 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=/data_disk/zookeeper/data # the port at which the clients will connect clientPort=2183 #the location of the log file dataLogDir=/data_disk/zookeeper/logs server.0=hadoop:2288:3388 server.1=hadoop0:2288:3388 server.2=hadoop1:2288:3388
分别在3台机器上启动ZooKeeper的Server:zkServer.sh start;
Zookeeper的功能特性是经过Zookeeper配置文件来进行控制管理的(zoo.cfg).这样的设计其实有其自身的缘由,经过前面对Zookeeper的配置能够看出,在对Zookeeper集群进行配置的时候,它的配置文档是彻底相同的。集群伪分布模式中,有少部分是不一样的。这样的配置方式使得在部署Zookeeper服务的时候很是方便。若是服务器使用不一样的配置文件,必须确保不一样配置文件中的服务器列表相匹配。
在设置Zookeeper配置文档时候,某些参数是可选的,某些是必须的。这些必须参数就构成了Zookeeper配置文档的最低配置要求。另外,若要对Zookeeper进行更详细的配置,能够参考下面的内容。
下面是在最低配置要求中必须配置的参数:
(1) client:监听客户端链接的端口。
(2) tickTime:基本事件单元,这个时间是做为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过时时间为2倍tickTime
dataDir:存储内存中数据库快照的位置,若是不设置参数,更新食物的日志将被存储到默认位置。
应该谨慎的选择日志存放的位置,使用专用的日志存储设备可以大大提升系统的性能,若是将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。
下面是高级配置参数中可选配置参数,用户可使用下面的参数来更好的规定Zookeeper的行为:
(1) dataLogdDir
这个操做让管理机器把事务日志写入“dataLogDir”所指定的目录中,而不是“dataDir”所指定的目录。这将容许使用一个专用的日志设备,帮助咱们避免日志和快照的竞争。配置以下:
# the directory where the snapshot is stored
dataDir=/usr/local/zk/data
(2) maxClientCnxns
这个操做将限制链接到Zookeeper的客户端数量,并限制并发链接的数量,经过IP来区分不一样的客户端。此配置选项能够阻止某些类别的Dos攻击。将他设置为零或忽略不进行设置将会取消对并发链接的限制。
例如,此时咱们将maxClientCnxns的值设为1,以下所示:
# set maxClientCnxns
maxClientCnxns=1
启动Zookeeper以后,首先用一个客户端链接到Zookeeper服务器上。以后若是有第二个客户端尝试对Zookeeper进行链接,或者有某些隐式的对客户端的链接操做,将会触发Zookeeper的上述配置。
(3) minSessionTimeout和maxSessionTimeout
即最小的会话超时和最大的会话超时时间。在默认状况下,minSession=2*tickTime;maxSession=20*tickTime。
(1) initLimit
此配置表示,容许follower(相对于Leaderer言的“客户端”)链接并同步到Leader的初始化链接时间,以tickTime为单位。当初始化链接时间超过该值,则表示链接失败。
(2) syncLimit
此配置项表示Leader与Follower之间发送消息时,请求和应答时间长度。若是follower在设置时间内不能与leader通讯,那么此follower将会被丢弃。
(3) server.A=B:C:D
A:其中 A 是一个数字,表示这个是服务器的编号;
B:是这个服务器的 ip 地址;
C:Leader选举的端口;
D:Zookeeper服务器之间的通讯端口。
(4) myid和zoo.cfg
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断究竟是那个 server。