一、概念
ZooKeeper是一个分布式的,开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是大数据软件如Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口。
Java
二、zookeeper的安装和配置【伪集群模式】:
官网:https://www.apache.org/dyn/closer.cgi/zookeeper/
找到一个stable版本的下载地址:
wget http://mirrors.shuosc.org/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
解压:tar -zxvf zookeeper-3.4.11.tar.gz
创建软连接:ln -s zookeeper-3.4.11 zookeeper
在同一个机器中配置三个实例(Ensemble):
# cd zookeeper/conf/
配置第一个:
# cp zoo_sample.cfg zoo1.cfg
# vi zoo1.cfg
配置内容:
tickTime=2000
clientPort=2181
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeperdata/1
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
各个参数的意义:
tickTime:心跳检测的时间间隔(毫秒),缺省:2000
clientPort:其他应用(比如solr)访问ZooKeeper的端口,缺省:2181
initLimit:初次同步的阶段(followers连接到leader的阶段),允许的时长(tick数量),缺省:10
syncLimit:允许followers同步到ZooKeeper的时长(tick数量),缺省:5
dataDir:数据(比如所管理的配置文件)的存放路径,初始时应该为空
server.X:X是ensemble中一个服务器的id,后面指定该server的hostname、第一个端口号用于ZooKeeper之间的通信、第二个端口用于和其他应用之间的通信
配置第二个:
# cp zoo1.cfg zoo2.cfg
修改:dataDir=/var/lib/zookeeperdata/2
修改:clientPort=2182
配置第三个:
# cp zoo1.cfg zoo3.cfg
修改:dataDir=/var/lib/zookeeperdata/3
修改:clientPort=2183
Java
创建相应的dataDir目录和myid文件:
# cd /var/lib
# mkdir zookeeperdata
# cd zookeeperdata
# mkdir 1
# mkdir 2
# mkdir 3
# echo "1" > 1/myid
# echo "2" > 2/myid
# echo "3" > 3/myid
启动ZooKeeper:
# cd <ZOOKEEPER_HOME>
# bin/zkServer.sh start ./conf/zoo1.cfg
# bin/zkServer.sh start ./conf/zoo2.cfg
# bin/zkServer.sh start ./conf/zoo3.cfg
启动结果:
JMX enabled by default
Using config: /opt/app/zookeeper/bin/../conf/zoo1.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /opt/app/zookeeper/bin/../conf/zoo2.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /opt/app/zookeeper/bin/../conf/zoo3.cfg
Starting zookeeper ... STARTED
查看状态:
用jps命令查看进程:
# jps
24617 QuorumPeerMain (这个就是zookeeper进程)
/opt/app/zookeeper/bin/zkServer.sh status zoo1.cfg
JMX enabled by default
Using config: /opt/app/zookeeper/bin/../conf/zoo1.cfg
Error contacting service. It is probably not running.
说明有错误,查看日志文件:
# cd <zookeeper_home>
# less zookeeper.out
java.net.BindException: 地址已在使用
杀掉当前进程:
# kill -9 24617
Java
再重启那三个实例后,查看状态:
# /opt/app/zookeeper/bin/zkServer.sh status zoo1.cfg
JMX enabled by default
Using config: /opt/app/zookeeper/bin/../conf/zoo1.cfg
Mode: follower
# /opt/app/zookeeper/bin/zkServer.sh status zoo2.cfg
JMX enabled by default
Using config: /opt/app/zookeeper/bin/../conf/zoo2.cfg
Mode: leader
# /opt/app/zookeeper/bin/zkServer.sh status zoo3.cfg
JMX enabled by default
Using config: /opt/app/zookeeper/bin/../conf/zoo3.cfg
Mode: follower
三、zookeeper的安装和配置【单机模式】:
解压到合适目录. 进入zookeeper目录下的conf子目录, 创建zoo.cfg:
修改如下内容:
tickTime=2000
dataDir=/Users/apple/zookeeper/data
dataLogDir=/Users/apple/zookeeper/logs
clientPort=4180
参数说明:
tickTime: zookeeper中使用的基本时间单位, 毫秒值.
dataDir: 数据目录. 可以是任意目录.
dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
clientPort: 监听client连接的端口号.
至此, zookeeper的单机模式已经配置好了. 启动server只需运行脚本:
bin/zkServer.sh start
Server启动之后, 就可以启动client连接server了, 执行脚本:
bin/zkCli.sh -server localhost:4180
Java
四、zookeeper的安装和配置【集群模式】:
集群模式的配置和伪集群基本一致:
由于集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样。下面是一个示例:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/zookeeper/data
dataLogDir=/home/zookeeper/logs
clientPort=4180
server.43=10.1.39.43:2888:3888
server.47=10.1.39.47:2888:3888
server.48=10.1.39.48:2888:3888
示例中部署了3台zookeeper server, 分别部署在10.1.39.43, 10.1.39.47, 10.1.39.48上. 需要注意的是, 各server的dataDir目录下的myid文件中的数字必须不同.
10.1.39.43 server的myid为43, 10.1.39.47 server的myid为47, 10.1.39.48 server的myid为48.
Java学习资料(复制下段链接至浏览器即可)
data:textml;charset=UTF-8;base64,5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNjg2NTc5MDE0Cg==