1. ZooKeeper简介
ZooKeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组件
1.1 ZooKeeper设计目标
-
简单的数据结构:共享的树形结构,类似文件系统,存储于内存;
-
可以构建集群:避免单点故障,3-5台机器就可以组成集群,超过半数正常工作就能对外提供服务;
-
顺序访问:对于每个读请求,zk会分配一个全局唯一的递增编号,利用这个特性可以实现高级协调服务;
-
高性能:基于内存操作,服务于非事务请求,适用于读操作为主的业务场景。3台zk集群能达到13w QPS;
1.2 ZooKeeper的使用场景
-
数据发布订阅
-
负载均衡
-
命名服务
-
Master选举
-
集群管理
-
配置管理
-
分布式队列
-
分布式锁
2. ZooKeeper的安装部署
ZooKeeper安装部署方式分为三种
-
单机模式:在一台机器上部署
-
集群模式:在多台机器上部署,通过zoo.conf配置不同机器ZooKeeper之间的关联关系
-
伪集群模式:在一台机器上部署,复制多个ZooKeeper,在zoo.conf中配置这几个拷贝之间的关系
2.1 windows单机安装
-
首先要安装jdk
-
安装ZooKeeper,在官网http://zookeeper.apache.org/下载zookeeper,解压即可
-
解压后目录
-
zoo.cfg中的dataDir配置Zookeeper工作中相关的data及log目录
2.2 集群配置(Linux环境)
-
安装jdk,配置环境变量【vi /etc/profile】【关闭防火墙】
-
安装ZooKeeper
-
下载ZooKeeper安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
-
解压
tar -zxvf zookeeper-3.4.10.tar.gz
-
重命名
mv zookeeper-3.4.10 zookeeper
-
修改配置文件【复制zoo_sample.cfg到zoo.cfg】
cd /usr/local/zookeeper/conf mv zoo_sample.cfg zoo.cfg ------------zoo.cfg------------- (1)dataDir=/usr/local/zookeeper/data(注意同时在zookeeper创建data目录) 创建服务器标识:myid 服务器标识配置: 创建文件夹: mkdir data 创建文件myid并填写内容 vi myid (内容为服务器标识【id】) (2)最后面添加集群服务器配置 server.id=host:port:port : 表示了不同的zookeeper服务器的自身标识 id:myid中的内容,服务器标识 host:服务器ip地址 port:第一个端口,用于从follower连接到leader机器的端口 port:第二个端口,用来进行leader选举时所用的端口 e.g server.0=192.168.212.154:2888:3888 server.1=192.168.212.156:2888:3888 server.2=192.168.212.157:2888:3888
-
同样的在其它服务器上配置剩余节点 可以远程复制
scp -r /soft root@zk2:/ scp -r /soft root@zk3:/
最后注意修改不同节点的myid文件内容
-
启动集群所有节点ZooKeeper
路径: /usr/local/zookeeper/bin 执行: zkServer.sh start (注意这里每台机器的ZooKeeper都要进行启动)
-
查看集群节点状态
zkServer.sh status【在三个节点上检验zk的node,一个leader和俩个follower】
伪集群模式其实就是在一台机器上通过不同端口号来模仿集群模式部署的
2.3 目录结构
目录 | bin | conf | contrib | dist-maven | docs | lib | recipes | src |
---|---|---|---|---|---|---|---|---|
作用 | 存放系统脚本 | 存放配置文件 | zk附加功能支持 | maven仓库文件 | zk文档 | 依赖的第三方库 | 经典场景样例代码 | zk源码 |
其中最重要的就是bin和conf两个目录
bin目录c
-
zkServer为服务器,启动后默认端口为2181
-
zkCli为命令行客户端
conf目录
conf目录为配置文件存放的目录,zoo.cfg为核心的配置文件,这里面的配置有很多,这配置是运维的工作,没必要全部掌握,挑选几个讲解:
-
clientPort: 参数无默认值,必须配置,用于配置当前服务器对外的服务端口,客户端必须使用这端口才能进行连接
-
dataDir: 用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)
-
dataLogDir: 用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
-
snapCount: 新安装zk这文件夹里面是没有文件的,可以通过snapCount参数配置产生快照的时机
以下配置集群中才会使用
-
tickTime: 心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
-
initLimit: 多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
-
syncLimit: