Window下Zookeeper的安装:
本文介绍的 Zookeeper 是以 3.4.8 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集
群模式两个方面介绍 Zookeeper 的Windows安装和配置.
首先需要安装JdK,从Oracle的Java网站下载,安装很简单,下面Linux会详述。
A. 单机模式:
单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如: E:\web-server\Zookeeper\zookeeper-3.4.8 下,Zookeeper 的启动脚本在 bin 目录下,Windows 下的启动脚本是 zkServer.cmd。
在你执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper 在启动时会找这个文件作为默认配置文件。下面会详细介绍一下配置文件中各个配置项的意义。当这些配置项配置好后,你现在就可以启动 Zookeeper 了,启动后要检查 Zookeeper 是否已经在服务,可以通过 netstat – ano 命令查看是否有你配置的 clientPort 端口号在监听服务。
B.伪集群模式:
所谓 “伪分布式集群” 就是在,在一台PC中,启动多个ZooKeeper的实例。“完全分布式集群” 是每台PC,启动一个ZooKeeper实例,只是单纯的IP地址信息的改变,伪分布式的IP只是本机IP; Zookeeper 的集群模式的安装和配置也不是很复杂,所要做的就是增加几个配置项。
主要配置的选项:
- tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
- dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
- dataLogDir:顾名思义就是 Zookeeper 保存日志文件的目录
- clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
- dataDir:数据文件目录 Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
- dataLogDir:Zookeeper保存日志文件的目录。
- 集群模式除了上面的三个配置项还要增加下面几个配置项:
# ****************************** 集群配置*****************************************************************#
# 服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
server.1=192.168.1.201:2888:3888
server.2=192.168.1.201:2889:3889
server.3=192.168.1.201:2890:3890
C.集群模式
集群模式跟上述的伪分布式模式的配置相同,只是
Zookeeper配置详解:
Linux下的伪分布安装
第一步:下载JDK并准备工作
wget : http://download.oracle.com/otn-pub/java/jdk/6u33-b04/jre-6u33-linux-x64.bin
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
查看Linux自带的JDK是否已安装(卸载centOS已安装的)
安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息:
java version "1.6.0"
OpenJDK Runtime Environment (build1.6.0-b09)
OpenJDK 64-Bit Server VM (build1.6.0-b09, mixed mode)
最好还是先卸载掉openjdk,在安装sun公司的jdk.
先查看 rpm -qa| grep java
显示如下信息:
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
卸载:
rpm -e --nodepsjava-1.4.2-gcj-compat-1.4.2.0-40jpp.115
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
还有一些其他的命令
rpm -qa| grep gcj
rpm -qa| grep jdk
如果出现找不到openjdksource的话,那么还可以这样卸载
yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
nameserver 218.85.157.99
<1># rpm-qa|grep jdk ←查看jdk的信息或直接执行
或
# rpm -q jdk
或
# java -version
<2># rpm -qa | grep gcj ← 确认gcj的版本号
<3># yum -y remove java-1.4.2-gcj-compat ← 卸载gcj
第二步:安装JDK
<1>从SUN下载jdk-1_5_0_14-linux-i586-rpm.bin或jdk-1_5_0_14-linux-i586.bin
在/usr下新建java文件夹,将安装包放在opt目录下
# mkdir opt
<2>安装JDK
# cd / opt
①jdk-1_5_0_14-linux-i586-rpm.bin文件安装
# chmod 777 jdk-1_5_0_14-linux-i586-rpm.bin ← 修改为可执行
# ./jdk-1_5_0_14-linux-i586-rpm.bin ← 选择yes同意上面的协议
# rpm -ivh jdk-1_5_0_14-linux-i586.rpm ← 选择yes直到安装完毕
②jdk-1_5_0_14-linux-i586.bin文件安装
# chmod a+x jdk-1_5_0_14-linux-i586.bin ← 使当前用户拥有执行权限
# ./jdk-1_5_0_14-linux-i586.bin ← 选择yes直到安装完毕
第三步:配置环境变量
<1># vi /etc/profile
<2>在最后加入以下几行:
1.查询jdk安装在那个目录下
echo $JAVA_HOME
echo $PATH
2.通过vi /etc/profile 进行编辑
ESC:退出 :wq 退出保存;a,进入insert模式;
export JAVA_HOME=/usr/java/jdk1.6.0_45
exportPATH=$PATH:${JAVA_HOME}/bin
<3>#
source /etc/profile <----配置文件立即生效
reboot ← 重启机器配置生效
第二步:下载并配置Zookeeper
本次安装实例假设启动3个ZooKeeper的实例。
创建环境目录
~ mkdir /home/server/zookeeper/zk1
~ mkdir /home/server/zookeeper/zk2
~ mkdir /home/server/zookeeper/zk3
新建myid文件
~ echo "1" > /home/server/zookeeper/zk1/myid
~ echo "2" > /home/server/zookeeper/zk2/myid
~ echo "3" > /home/server/zookeeper/zk3/myid
拷贝配置文件
生成三个配置文件:zoo-1.cfg: (另外两个zoo-2.cfg 和zoo-3.cfg)。zoo-slave1.cfg需要为dataDir和dataLogDir设置目录,
改动内容如下:修改:dataDir,clientPort
增加:集群的实例,server.X,”X”表示每个目录中的myid的值
3个节点的ZooKeeper集群配置完成,接下来我们的启动服务。
启动集群
~ /home/server/zookeeper3.4.8/bin/zkServer.sh start zoo-1.cfg
~ /home/server/zookeeper3.4.8/bin/zkServer.sh start zoo-2.cfg
~ /home/server/zookeeper3.4.8/bin/zkServer.sh start zoo-3.cfg
~ jps
5422 QuorumPeerMain
5395 QuorumPeerMain
5463 QuorumPeerMain
5494 Jps
查看节点状态
~ /home/server/zookeeper3.4.8/bin/zkServer.sh status zoo-1.cfg JMX enabled by default
Using config: /home/server/zookeeper3.4.8/bin/bin/../conf/ zoo-1.cfg
Mode: follower
~ /home/server/zookeeper3.4.8/bin/zkServer.sh status zk2.cfg
JMX enabled by default
Using config: /home/server/zookeeper3.4.8/bin/../conf/ zoo-2.cfg
Mode: leader
~ /home/server/zookeeper3.4.8/bin/zkServer.sh status zk3.cfg
JMX enabled by default
Using config: /home/server/zookeeper3.4.8/bin/../conf/ zoo-3.cfg
Mode: follower
我们可以看到zk2是leader,zk1和zk3是follower
查看ZooKeeper物理文件目录结构
~ tree -L 3 /home/server/zookeeper
/home/server/zookeeper
├── zk0
├── zk1
│
├── myid
│
├── version-2
│
│
├── acceptedEpoch
│
│
├── currentEpoch
│
│
├── log.100000001
│
│
└── snapshot.0
│
└── zookeeper_server.pid
├── zk2
│
├── myid
│
├── version-2
│
│
├── acceptedEpoch
│
│
├── currentEpoch
│
│
├── log.100000001
│
│
└── snapshot.0
│
└── zookeeper_server.pid
└── zk3
├── myid
├── version-2
│
├── acceptedEpoch
│
├── currentEpoch
│
├── log.100000001
│
└── snapshot.100000000
└── zookeeper_server.pid
zookeeper命令行操作
常用命令
4.1. 启动ZK服务: bin/zkServer.sh start
4.2. 查看ZK服务状态: bin/zkServer.sh status
4.3 停止ZK服务: bin/zkServer.shstop
4.4. 重启ZK服务: bin/zkServer.sh restart
4.5 连接服务器 zkCli.sh-server 127.0.0.1:2181
4.6 查看根目录 ls /
4.7 创建 testnode节点,关联字符串"zz" create /zk/testnode"zz"
4.8 查看节点内容 get/zk/testnode
4.9 设置节点内容 set/zk/testnode abc
4.0 删除节点 delete /zk/testnode
我们通过客户端连接ZooKeeper的集群,我们可以任意的zookeeper是进行连接。
~ /home/server/zookeeper3.4.8/bin/zkCli.sh -server 192.168.1.201:2181
#ls,
查看/目录内容
[zk: 192.168.1.201(CONNECTED) 1] ls /
[zookeeper]
#create,
创建一个znode节点
[zk: 192.168.1.201(CONNECTED) 2] create /node conan
Created /node
#ls,
再查看/目录
[zk: 192.168.1.201(CONNECTED) 3] ls /
[node, zookeeper]
#get,
查看/node的数据信息
[zk: 192.168.1.201(CONNECTED) 4] get /node
conan
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000006
mtime = Mon Aug 12 05:32:49 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
#set,
修改数据
[zk: 192.168.1.201(CONNECTED) 5] set /node fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
#get,
再查看/node的数据信息,已改为fens.me
[zk: 192.168.1.201(CONNECTED) 6] get /node
fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
#delete,
删除/node
[zk: 192.168.1.201(CONNECTED) 7] delete /node
[zk: 192.168.1.201(CONNECTED) 8] ls /
[zookeeper]
#quit,
退出客户端连接
[zk: 192.168.1.201(CONNECTED) 19] quit
Quitting...
2013-08-12 05:40:29,304 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x1406f3c1ef90002 closed
2013-08-12 05:40:29,305 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@509] - EventThread shut down
Java编程现实命令行操作
基础的Zookeeper客户端API实例,实现的方式有Zookeeper API、zkclient API、curatorAPI 实例练习