一、zookeeper是啥?
ZooKeeper是一个开源的分布式服务框架,它是Apache Hadoop项目的一个子项目,主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置管理等。
简单点说,正如某位前辈说的zookeeper = 通知机制 + 文件系统。
- 文件系统 : 这是所说文件系统,其实并非真正的文件系统,它是一种类似于文件系统的层次结构(树开结构),如下图:
- 通知机制 : 客户端注册监听它关心的目录节点,当目录节点发生变化,如数据改变、被删除、子目录节点增加删除时,zookeeper会通知客户端。 这时客户端就可以根据传过来的信息采取一系列的操作。
二、在Linux上安装zookeeper
注:安装zookeeper请确认是否安装jdk,zookeeper需要先安装zookeeper(为啥要装jdk呢?因为zookeeper就是用java写的啊)
1、下载zookeeper源码
请移步官网:http://zookeeper.apache.org/
wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.10.tar.gz
2、解压zookeeper源码
tar -zxvf zookeeper-3.4.10.tar.gz
mv zookeeper-3.4.10 /usr/local/zookeeper
3、修改配置文件
cd /usr/local/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
注:如果是单机,按默认配置即可,如果是集群,可加入以下配置:
#本机IP设置成0.0.0.0
server.1=0.0.0.0:2888:3888
#集群中另一台主机IP地址
server.2=192.168.0.101:2888:3888
4、zookeeper配置文件参数说明
参数名 | 参数说明 | 默认值 |
---|---|---|
clientPort | 客户端连接服务端的端口,即对外服务端口 | 2181 |
dataDir | 存储快照文件snapshot的目录,集群的myid文件也会存放在这个文件夹。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。 | |
tickTime | 心跳检测间隔时间,以毫秒为单位 | |
dataLogDir | 事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能 | |
globalOutstandingLimit | 客户端请求队列最大长度,为了防止内在溢出 | 1000 |
preAllocSize | 预先为事务日志分配的空间大小 | |
snapCount | 每进行snapCount次事务日志输出后,触发一次快照(snapshot), 此时,ZK会生成一个snapshot.文件,同时创建一个新的事务日志文件log.。 | 100000 |
traceFile | 用于记录请求的log,一般用于Deug,不建议打开 | |
maxClientCnxns | 最大并发客户端数 | |
clientPortAddress | 可以设置指定的客户端IP和端口 | |
minSessionTimeout | 最小的客户端session超时时间(毫秒为单位) | |
maxSessionTimeout | 最大的客户端session超时时间 | |
fsync.warningthresholdms | 事务日志输出时,如果调用fsync方法超过指定的超时时间,那么会在日志中输出警告信息 | |
autopurge.snapRetainCount | ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能 | |
autopurge.purgeInterval | 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目 |
集群模式的参数:
参数名 | 参数说明 | 默认值 |
---|---|---|
electionAlg | 用于选举实现的参数,0表示以原始的基于UDP的方式协作;1表示不进行用户验证的基于UDP的方式选举;2表示进行用户验证的基于UDP的试选举;3表示基于TCP的快速选举 | 3 |
initLimit | 多少个tickTime内,接受其他server连接及初始化数据 | |
leaderServes | leader是否接受客户端连接 | |
server.x | 配置集群里的主机信息,如server.x=[hostname]:nnnnn[:nnnnn] | |
syncLimit | 在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了 | |
group.x | 分组信息,表明哪个分组有哪些节点 | |
weight.x | 权重信息,表明哪个节点权重多少 | |
cnxTimeout | 设置leader选举通知连接的超时时间 |
更多参数请参考:http://zookeeper.apache.org/doc/r3.4.10/zookeeperAdmin.html#sc_configuration
三、zookeeper基本操作
zookeeper的操作脚本都在安装目录下面bin目录中,主要使用到以下脚本
- zkServer.sh:服务端操作脚本(包括zookeeper的启动、关闭等)
- zkCli.sh: zookeeper客户端操作工具
1、zookeeper启动与关闭
#启动 zookeeper
/usr/local/zookeeper/bin/zkServer.sh start
#停止 zookeeper
/usr/local/zookeeper/bin/zkServer.sh stop
#重启 zookeeper
/usr/local/zookeeper/bin/zkServer.sh restart
2、查看zookeeper状态
/usr/local/zookeeper/bin/zkServer.sh status
输出结果:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: standalone
注:通过status参数查看的状态,可以查看zookeeper的配置文件位置和启动模式(本例是单机模式)
3、通过自带的客户端连接zookeeper服务器
./zkCli.sh -server 127.0.0.1:2181
ls /
客户端常用命令
1) ls
使用ls命令,可以列出ZooKeeper指定节点下的所有的子节点,不过只能看到指定节点下第一级所有子节点。用法如下:
ls path [watch]
- 其中,path表示的是指定数据节点的节点路径,如:
ls /
2) create
使用create命令,可以创建一个ZooKeeper节点。用法如下:
create [-s] [-e] path data acl
其中:
- -s或-e分别指定节点特性:顺序或临时节点。默认情况下,即不添加-s或-e参数的,创建的是持久节点。data代表节点的数据内容。acl是进行权限控制,缺省情况下,不做任何权限控制。 如:
create /app1 "应用1"
3) get
使用get命令,可以获取ZooKeeper指定节点的数据内容和属性信息。用法如下:
get path [watch]
get /app1
4) set
使用set命令,可以更新指定节点的数据内容。用法如下:
set path data [version]
set /app1 "应用改名"
5) delete
使用delete命令,可以删除ZooKeeper上的指定节点。用法如下:
delete path [version]
delete /app1