Zookeeper介绍
1、初识ZooKeeper
1.1、ZooKeeper介绍
Zookeeper是Apache的顶级项目,为分布式应用提供高效且可靠的分布式协调服务。ZooKeeper是一个典型的分布式数据一致性的解决方案。基于他可以实现数据的发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。
ZooKeeper的分布一致性特征如下。
顺序一致性
同一客户端发起的事务请求,会按照发起顺序在ZooKeeper执行。
原子性
事务请求处理的结果在所有集群上都是相同的。
单一视图
无论客户端连接的是哪个ZooKeeper服务器,其数据模型一致。
可靠性
服务端成功执行一个事务,则该事务引起的服务端状态将会保留。
实时性
ZooKeeper仅仅保证在一段时间内,客户端可以从服务器读取到最新数据。
1.2、为什么选择ZooKeeper
ZooKeeper在性能、易用性、稳定性方面均达到到了工业级标准。
ZooKeeper是开源的。
ZooKeeper是免费的。
ZooKeeoer得到广泛的应用。
Hadoop、HBase、Storm、Dubbo等软件均使用ZooKeeper作为核心组件,用于分布式协调。
2、安装ZooKeeper
2.1、开发环境介绍
楼主使用VMware安装的虚拟机,虚拟机系统是CentOS 7的系统。在虚拟机中安装的Docker,所以使用Docker安装ZooKeeper镜像。
2.2、单机部署
2.2.1、ZooKeeper的配置文件zoo.cfg。
1 | # The number of milliseconds of each tick |
配置文件的配置选项含义:
- tickTime:配置Zookeeper中最小事件单元的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的。例如,Zookeeper中会话的最小超时时间默认是2*tickTime。
- initLimit :该参数用于配置Leader服务器等待Follower启动,并完成数据同步的时间,默认值10,表示该时间是参数tickTime值的10倍。
- syncLimit: 用于配置Leader服务器和Follower之间进行心跳检测的最大延时时间。
- dataDir: Zookeeper服务器存储快照文件的目录。
- dataLogDir: dataLogDir用于配置Zookeeper服务器存储事务日志文件的目录。
- clientPort: clientPort用于配置当前服务器对外的服务器端口,客户端会通过该端口和Zookeeper服务器创建连接,一般设置为2181。每台Zookeeper服务器都可以配置任意可用的端口,同时,集群中的所有服务器不需要保持clientPort端口一致。
- server.id=host:port2:port3:id被称为ServerID,用来标识该机器在集群中的机器序号。第一个port表示 端口2用于选举leader,端口3用于集群内通讯使用(Leader会监听此端口) ,Zookeeper实例数应为大于等于3的奇数,如3、5、7…不宜太多。
2.2.2、通过Docker启动ZooKeeper
建立映射文件
在虚拟机的路径下分别建立三个文件夹,conf、data、datalog文件夹,将设置好的zoo.cfg文件放入conf中,另外的两个文件夹保存ZooKeeper生成的快照文件和日志文件。
拉取文件,启动ZooKeeper。
1
2
3
4
5
6
7
8docker run --name zk1 --restart always \
-v /mydata/zookeeper/zk1/data:/data \
-v /mydata/zookeeper/zk1/datalog:/datalog \
-v /mydata/zookeeper/zk1/conf/zoo.cfg:/conf/zoo.cfg \
-p 2181:2181 \
-p 2881:2881 \
-p 3881:3881 \
-d zookeeper
2.3、集群部署
集群的部署和单机部署类似,不过需要在zoo.cfg文件的server.id=host:port2:port3配置其他的ZooKeeper应用的配置。