ZooKeeper简介与集群部署
ZooKeeper 是一个开源的分布式协调服务,由雅虎公司创建,是Google Chubby的开源实现,ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集。
ZooKeeper 是什么
ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布、数据订阅、负载均衡、命名服务、分布式协调、分布式通知、集群管理、master选举、分布式锁和分布式队列等功能。ZooKeeper可以保证如下分布式一致性特性。
(1)顺序一致性
从同一个客户端发起的请求,最终将会严格地按照其发起顺序被应ZooKeeper中去。
(2)原子性
所有事务请求的处理结果是在整个集群中所有机器上应用情况是一致的,也就是说,要么整个集群所有机器都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况。
(3)单一试图
无论客户端连接的是那个ZooKeeper服务器,其看到的服务端数据模型都是一致的。
(4)可靠性
一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来,除非有另一个事务又对其进行了变更。
(5)实时性
通常人们看到实时性的第一反应是,一旦一个事务被成功应用,那么客户端能够立即从服务端上读取到这个事务变更后的最新数据状态。这里需要注意的是,ZooKeeper仅仅保证在一定时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。
ZooKeeper设计目标
ZooKeeper致力于提供一个高性能、高可用,且具有严格的顺序访问控制能力(主要是写操作的严格顺序)的分布式协调服务。高性能使得ZooKeeper能够应用于那些对系统吞吐量有明确要求的大型分布式系统中,高可用使得分布式的单点问题得到了很好的解决,而严格的顺序访问控制使得客户端能够基于ZooKeeper实现一些复杂的同步原语。一下是ZooKeeper的四个设计目标。
目标一:简单的数据模型
ZooKeeper使得分布式程序能够通过一个共享的、树形结构的名字空间来进行相互协调。这里所说的树形结构的名字空间,是指ZooKeeper服务器内存中的一个数据模型,其由一些列被称为ZNode的数据节点组成,总的来说其数据模型类似于一个文件系统,而ZNode之间的层级关系,就像文件系统的目录结构一样。不过和传统的磁盘文件系统不同的是,ZooKeeper将全量数据存储在内存中,一次来实现提供服务器吞吐、减少延迟的目的。
目标二:可以构建集群
一个ZooKeeper集群通常有一组服务器组成,一般3~5台机器就可以组成一个可用的ZooKeeper集群了。
组成ZooKeeper集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都互相保持着通信。值得一提的是,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。
ZooKeeper的客户端程序会选择和集群中任意一台机器共同来创建一个TCP连接,而一旦客户端和某台ZooKeeper服务器之间的连接断开后,客户端会自动连接到集群中的其它机器,
目标三:顺序访问
对于来自客户端的每个请求,ZooKeeper都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用ZooKeeper的这个特性来实现更高层次的同步原语。
目标四:高性能
由于ZooKeeper将全量数据存储在内存中,并直接服务于客户端的所有非事务请求,因此它尤其适用于以读操作为主的应用场景。
ZooKeeper集群部署与运行
实验环境说明
操作系统:centos 7.3
node1:192.168.29.110
node2:192.168.29.120
node3:192.168.29.130
zookeeper版本为3.4.10
安装jdk
[root@ ~]# yum install jdk-8u152-linux-x64.rpm -y
[root@ ~]# java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
node1 安装配置
下载ZooKeeper
http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
解压ZooKeeper
[root@ ~]# tar -xf zookeeper-3.4.10.tar.gz -C /opt/
[root@ ~]# cd /opt
创建软连接
[root@ opt]# ln -sv zookeeper-3.4.10 zookeeper
‘zookeeper’ -> ‘zookeeper-3.4.10/’
修改配置文件
[root@ opt]# cd /opt/zookeeper/conf/
[root@ conf]# mv zoo_sample.cfg zoo.cfg
[root@ conf]# vim /opt/zookeeper/conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000 ##向ZK发送心跳的时长,单位为ms
# The number of ticks that the initial
# synchronization phase can take
initLimit=10 ##初始同步阶段,要经过多少个tickTime 时长
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5 ##发送请求经过多少个tickTime 后确认
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper ##数据目录
dataLogDir=/opt/data/zookeeper/log ##日志目录,不配置亦可
# 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=20 ##最大并发连接数
#
# 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
#
server.1=192.168.29.110:2888:3888
server.2=192.168.29.120:2888:3888
server.3=192.168.29.130:2888:3888
说明:serverID=IP:port:port
ID:各主机的数字标识,一般从1开始
IP:各主机的IP
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3 ##这个参数和下面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1 ##ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功,(purge操作的时间间隔,0表示不启动)
创建数据目录
[root@ ~]# ]# mkdir /opt/data/zookeeper -pv
mkdir: created directory ‘/opt/data’
mkdir: created directory ‘/opt/data/zookeeper’
指定ID ,node1,node2、node3分别是1,2,3
[root@ ~]# echo 1 > /opt/data/zookeeper/myid
启动服务
[root@ ~]# /opt/zookeeper/bin/zkServer.sh start
仿照node1 配置node2、node3
查看状态
[root@ ~]# telnet 192.168.29.130 2181
Trying 192.168.29.130...
Connected to 192.168.29.130.
Escape character is '^]'.
stat ##查看状态的命令
Zookeeper version: 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
Clients:
/192.168.29.110:44824[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: leader ##可以看到已经成为leader
Node count: 4
Connection closed by foreign host.
[root@ ~]# telnet 192.168.29.110 2181
Trying 192.168.29.110...
Connected to 192.168.29.110.
Escape character is '^]'.
stat
Zookeeper version: 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
Clients:
/192.168.29.110:42864[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower ##可以看到已经成为follower
Node count: 4
Connection closed by foreign host.
客户端连接
[root@ ~]# /opt/zookeeper/bin/zkCli.sh
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
ZooKeeper简介与集群部署的更多相关文章
- Zookeeper简介与集群搭建【转】
Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...
- Apache ZooKeeper 单机、集群部署文档
简介: Apache ZooKeeper 是一个分布式应用的高性能协调服务,功能包括:配置维护.统一命名.状态同步.集群管理.仲裁选举等. 下载地址:http://apache.fayea.com/z ...
- Zookeeper(4)---ZK集群部署和选举
一.集群部署 1.准备三台机器,安装好ZK.强烈建议奇数台机器,因为zookeeper 通过判断大多数节点的存活来判断整个服务是否可用.3个节点,挂掉了2个表示整个集群挂掉,而用偶数4个,挂掉了2个也 ...
- Zookeeper简介与集群搭建
Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...
- kafka简介及集群部署
消息队列概念:(Message queue): “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. “消息队列”是在消息的传输过程中保存消 ...
- zookeeper与kafka集群部署实现
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终, ...
- hadoop 2.7.2 + zookeeper 高可用集群部署
一.环境说明 虚拟机:vmware 11 操作系统:Ubuntu 16.04 Hadoop版本:2.7.2 Zookeeper版本:3.4.9 二.节点部署说明 三.Hosts增加配置 sudo ge ...
- zookeeper 高可用集群搭建
前言 记录Zookeeper集群搭建的过程! 什么是 Zookeeper ? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hado ...
- Zookeeper(一)-- 简介以及单机部署和集群部署
一.分布式系统 由多个计算机组成解决同一个问题的系统,提高业务的并发,解决高并发问题. 二.分布式环境下常见问题 1.节点失效 2.配置信息的创建及更新 3.分布式锁 三.Zookeeper 1.定义 ...
随机推荐
- Java入门篇(六)——类和对象
写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...
- yourphp目录结构
Yourphp企业网站管理系统是一款完全开源免费的PHP+MYSQL系统.核心采用了Thinkphp框架等众多开源软件,同时核心功能也作为开源软件发布的网站后台管理系统. 二.目录说明 /Cache ...
- sqlite效率探测
在编译后当然就是使用sqlite,贸贸然去测试了一下创建数据库,插入数据,仅几条数据,发现,真不错的数据库,后来把数据量提高到10000的 时候,发现,怎么这么慢,后来自己都受不了,网上一查,原来是如 ...
- 【视频编解码·学习笔记】2. H.264简介
一.H.264视频编码标准 H.264视频编码标准是ITU-T与MPEG合作产生的又一巨大成果,自颁布之日起就在业界产生了巨大影响.严格地讲,H.264标准是属于MPEG-4家族的一部分,即MPEG- ...
- 借助 Vue 来构建单页面应用
原文: https://github.com/MeCKodo/vue-tutorial 主题 Vue.js (1/2)Vue构建单页应用最佳实战 前言 我们将会选择使用一些vue周边的库 1.使用no ...
- Selenium自动化测试脚本中三种等待时间简介
为了提高脚本的稳定性,我们需要在脚本中增加等待时间 第一种:强制等待 Thread.sleep():固定休眠时间设置,Java的Thread类里提供了休眠方法sleep,导入包后就能使用 sleep( ...
- linux unzip 解压后文件名乱码
在windows上zip的包,rz上传到linux下,发现出现乱码.记录下解决过程: 1.确定windows上的默认字符集 在Windows平台下,直接在命令行中,输入:chcp 在显示的结果中,会出 ...
- navicat的简单使用
navicat的简单使用: 连接: 输入ip地址,端口,用户名,密码 新建数据库: 数据库名,字符编码一定要选择utf-8 新建表: 字段,约束条件 双击表名,自己打开表,点击空列,添加数据,ctl+ ...
- kindeditor使用
下载地址http://kindeditor.net/down.php @官方文档 使用步骤: 引入js <script charset="utf-8" src="r ...
- Log4j源码解析--Appender接口解析
本文转自上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/07/10/382676.html.感谢作者的无私的分享. Appender负 ...