说明:zookeeper完全可以standalone,也可以伪集群形式,当然生产中都是集群形式。另外,也可以在windows下运行。
如果只是研究用,完全可以在windows下使用standalone或者伪集群形式。
为什么要集群?当然是为了更稳定的服务。另外因为这货的机制是超过半数节点存活才可以提供服务,所以集群时不要将数量搞成偶数 -- 不是不可以,只是很别扭。
个人是用了三台虚拟机(主要是想研究下大数据云计算之类的,集群是必须),CentOS 6.8 x64,Basic Server模式安装。对了,虚拟机是virtual box (简称vbox)。
------------------------------这部分信息不需要的可以略过:开始--------------------------------
安装vbox、新建虚拟机、安装CentOS的过程就不说了,如果需要可以自行百度,或者私信我也行。
有一点要提一下,网卡设置,我用的是桥接,也建议大家使用桥接,原因如下。
vbox的网络连接有三种:NAT (转换)、桥接、Host-only (仅主机)。
各自的特点是:NAT可以访问外网,但主机与虚拟机之间不能直接通信(可以通过端口转发,个人不喜欢);桥接是局域网独立IP,可以访问外网;Host-only则只能与主机通信,不能外网。
因为涉及到虚拟机之间的交互以及主机与虚拟机之间的交互,个人更喜欢桥接,给每个虚拟机配置固定的局域网ip即可 -- 缺点也有,就是换一个环境就不能使用了,除非局域网是类似的(网关、许可等)。
CentOS配置ip很简单,可以使用setup命令配置,半图形化的操作。或者修改/etc/sysconfig/network-scripts/ifcfg-eth0中的内容 -- 记得重启网络服务service network restart。
建议在装完一个系统之后,做一个快照,再将需要的软件如JDK、redis、zookeeper等都上传上去,然后配置好环境变量等,再做一个快照。(略)
然后,克隆该系统,记得选择重新生成网卡硬件地址。
然后,进入复制出来的系统,使用上面提到的方法修改ip,记得删除里面的UUID和硬件地址(修改也行)。--此时重启网络服务是无效的,因为系统缓存了一些网络信息。
缓存的信息位于 /etc/udev/rules.d/70-presistent-net.rules,删除该文件,最后重启系统,搞定。
------------------------------这部分信息不需要的可以略过:结束--------------------------------
1、下载
官方地址:http://zookeeper.apache.org/releases.html
可以找镜像网站下载:http://mirrors.hust.edu.cn/apache/zookeeper/ 等等。
我下载的是当前最新的release版本:zookeeper-3.4.9.tar.gz。
2、解压
tar -zxvf zookeeper-3.4.9.tar.gz ,解压出来的文件夹是zookeeper-3.4.9 (我的已经重命名为zookeeper,为了方便)。
3、配置 (standalone)
进入解压后的文件夹,里面有一个conf文件夹,其中包含了三个文件:
-rw-rw-r--. 1 1001 1001 535 8月 23 15:39 configuration.xsl
-rw-rw-r--. 1 1001 1001 2161 8月 23 15:39 log4j.properties
-rw-rw-r--. 1 1001 1001 922 8月 23 15:39 zoo_sample.cfg
复制一份 zoo_sample.cfg,重命名为zoo.cfg -- zookeeper启动需要加载zoo.cfg文件。
其中的内容:
[root@localhost conf]# cat zoo_sample.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.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
[root@localhost conf]#
其他的都好说,最重要的是要设置dataDir -- 保存快照的位置,注意,不要使用/tmp,这是临时文件夹。
我设置的位置是 zookeeper文件夹下面的data:
dataDir=/root/zookeeper/data
至此,zookeeper已经可以standalone运行了。
4、运行服务端 (standalone)
很简单,执行./bin/zkServer.sh start 即可,启动完毕会有提示。
zkServer.sh 必须附加参数,参数可以是start、restart、status、stop等。
5、运行客户端
很简单,执行./bin/zkCli.sh host:port 即可,如果是连接当前主机,可以省略host:port。
6、操作
连接后就可以进行操作了。如果不知道有哪些操作,可以输入help查看(或者胡乱敲一串也行,会提示有哪些命令),或者搜索引擎。
[zk: localhost:2181(CONNECTED) 18] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
[zk: localhost:2181(CONNECTED) 19]
create负责创建路径并设值;
get负责获取路径的值;
set负责修改路径的值;
delete负责删除路径;
rmr负责删除路径;--暂不清楚与delete的区别
ls负责查看路径
ls2负责查看路径
stat负责统计路径信息
quit退出客户端
注意,这里只是简略的说一下,具体的请自行研究。
创建:create /com “intel”
[zk: localhost:2181(CONNECTED) 3] create /com "intel"
Created /com
获取:get /com
[zk: localhost:2181(CONNECTED) 0] get /com
intel
cZxid = 0x10000001d
ctime = Sun Dec 25 17:33:43 CST 2016
mZxid = 0x10000001d
mtime = Sun Dec 25 17:33:43 CST 2016
pZxid = 0x10000001d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
修改:set /com “google”
[zk: localhost:2181(CONNECTED) 2] set /com "google"
cZxid = 0x10000001d
ctime = Sun Dec 25 17:33:43 CST 2016
mZxid = 0x100000021
mtime = Sun Dec 25 17:36:12 CST 2016
pZxid = 0x10000001d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
需要注意,不能凭空get或set,必须先create才可以操作。否则会提示节点不存在:
[zk: localhost:2181(CONNECTED) 5] set /com/a "a"
Node does not exist: /com/a
删除:delete /com
删除之后再获取就会提示节点不存在:
[zk: localhost:2181(CONNECTED) 6] delete /com
[zk: localhost:2181(CONNECTED) 7] get /com
Node does not exist: /com
各个命令具体意义请自行搜索,这里仅作测试。
7、设置(集群)
① 修改zoo.cfg,在最后添加内容:
# clusters
server.1=192.168.0.210:2888:3888
server.2=192.168.0.211:2888:3888
server.3=192.168.0.212:2888:3888
②设置myid:
注意,server.X中的X是指服务器的id,需要在${dataDir}中myid文件里设置(需要手动新建该文件,默认不存在)。
其后的内容是host:2888:3888,暂时不明白2888:3888的含义。但host可以是主机名,也可以是ip,看个人习惯了。
别忘了设置myid文件及其内容!!!
linux可以使用 echo “X” > /root/zookeeper/data/myid 搞定 -- 注意换成自己的路径。
8、启动服务器(集群)
还是 ./bin/zkServer.sh start ,只不过要将集群中的所有服务器都启动起来。
如果之前已启动,建议关闭或重启:./bin/zkServer.sh stop 或./bin/zkServer.sh restart
9、客户端(集群)
还是 ./bin/zkCli.sh,只不过此时可以选择连接的服务器,仍然可以连接当前主机的服务器。
10、操作(集群)
很简单,在一个客户端里新建一个节点,然后在另一个客户端修查看、修改即可。
不再细说。