1. ZooKeeper简介
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: 多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃
最新文章
- PullToRefreshScrollView嵌套SwipeMenuListView冲突问题解决
- 记录nginx 搭建集群环境踏过的坑
- struts1.3设置编码三种方法
- CSS那些事儿-阅读随笔2(选择符的组合与优先级/权重)
- HW3.26
- ARM学习笔记11——GNU ARM汇编程序设计
- UVA 11624 Fire! (bfs)
- C#中英文混合字符串过长截断
- 自定义ASP.NET WebApplication中调用SharePoint2010的对象
- BZOJ 2879: [Noi2012]美食节( 费用流 + 动态加边 )
- IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)
- TCP/IP详解--拥塞控制 &; 慢启动 快恢复 拥塞避免
- !function 笔记
- java8 for ,forEach ,lambda forEach , strean forEach , parller stream forEach, Iterator性能对比
- UVA1605-Building for UN(思维)
- LeetCode Search for a Range (二分查找)
- webgl绘制粗线段
- PHP匿名函数如何理解,什么是匿名函数
- js insertBefore
- Understanding the JavaScript Engine—— two phase