zookeeper原理

ZooKeeper 学习笔记之扫盲

你说的曾经没有我的故事 提交于 2019-12-01 12:57:48
题外话:从字面上来看,ZooKeeper表示动物园管理员,而Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以可以ZooKeeper就是对这些动物进行一些管理工作的。 对于单机环境进程内的协调方法,我们一般通过线程锁来协调对共享数据的访问以保证状态的一致性。 但是分布式环境如何进行协调呢?于是,Google创造了Chubby,而ZooKeeper则是对于Chubby的一个开源实现。 ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源 协调服务 ,它提供了一项基本服务: 分布式锁服务 。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法: 配置维护、组服务、分布式消息队列、分布式通知/协调 等。它被设计为易于编程,使用文件系统目录树作为数据模型。 ZooKeeper集群模式典型架构 Zookeeper服务自身组成一个集群(2n+1个服务允许n个失效)。Zookeeper服务有两个角色,一个是leader,负责写服务和数据同步,剩下的是follower,提供读服务,leader失效后会在follower中重新选举新的leader。 保证 顺序一致性:按照客户端发送请求的顺序更新数据。 原子性:更新要么成功,要么失败,不会出现部分更新。 单一性 :无论客户端连接哪个server

Linux Zookeeper Dubbo弄弄环境

我与影子孤独终老i 提交于 2019-12-01 11:07:45
背景和什么什么就不说了,记录记录问题和过程来着。 1. 环境: Linux:CentOS 6.5 JDk:jdk-8u91-linux-x64.gz + jdk-6u45-linux-x64.bin(后面有踩了坑) Tomcat:apache-tomcat-6.0.45.tar.gz Zookeeper:zookeeper-3.4.8.tar.gz Dubbo:dubbo-admin-2.5.3.war 2.安装: 解压缩tar.gz包,使用命令: tar -zxvf xxx.tag.gz JDK的bin文件安装,可参考: http://my.oschina.net/u/1991646/blog/703205 3.配置和启动: 3.1 JDK的环境变量配置在/etc/profile文件中,对应的为jdk的解压缩路径,我这里的jdk是解压缩在/usr/tools/java8/jdk目录下,具体配置如下: #Keith JDK8 start export JAVA_HOME=/usr/tools/java8/jdk export PATH=$JAVA_HOME/bin:$PATH #export CLASSPATH=.;$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar #Keith JDK8 end 3.2 Zookeeper配置

HBase

半城伤御伤魂 提交于 2019-12-01 07:30:05
1. HBase基本介绍 a. 介绍 Hbase是一个nosql的列式存储的数据库。实际来源于Google发表的论文bigtable。构建在hdfs基础之上。 提供高可用,高性能,列储存,可伸缩, 实时读写 nosql的数据库系统。 按照key-value的形式进行数据的存储: rowkey (行键),通过行键完成数据的检索。 Hbase仅支持简单的事务(行级操作),不支持复杂的操作(不能join等操作)。 Hbase的数据类型单一:byte[] 和hadoop一样,Hbase依靠横向拓展,增加服务器,提高计算能力。 b. Hbase的特点 大:数据量大 面向列:数据按照列式的方式进行储存。 稀疏:habase中null的数据不会占用存储空间 2. Hbase和hadoop的关系 a. hdfs 为分布式存储提供文件系统 针对存储大尺寸的文件进行优化,不需要对HDFS上的文件进行随机读写 直接使用文件 数据模型不灵活 使用文件系统和处理框架 优化一次写入,多次读取的方式 b. Hbase 提供列式存储 可以对数据进行随机读取按照key-value形式操作数据 支持mr,依赖hdfs 优化多次读或者写 总结 :紧耦合关系,Hbase依赖于hdfs 3. RDBMS和Hbase对比 Hbase: 结构: 数据库以region的形式存在 支持hdfs 使用WAL存储日志(写前日志)

Hbase

巧了我就是萌 提交于 2019-11-30 23:29:16
版本:V2.0 第1章 HBase简介 1.1 什么是HBase HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储。 官方网站:http://hbase.apache.org -- 2006年Google发表BigTable白皮书 -- 2006年开始开发HBase -- 2008年北京成功开奥运会,程序员默默地将HBase弄成了Hadoop的子项目 -- 2010年HBase成为Apache顶级项目 -- 现在很多公司二次开发出了很多发行版本,你也开始使用了。 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。 HBase是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google

Zookeeper选举算法原理

為{幸葍}努か 提交于 2019-11-30 22:04:18
Leader选举 Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举。 (1) 服务器初始化启动。(集群的每个节点都没有数据 → 以SID的大小为准) (2) 服务器运行期间无法和Leader保持连接。(集群的每个节点都有数据 ,或者Leader 宕机→ 以ZXID 和 SID 的最大值为准) 1. 服务器启动时期的Leader选举 若进行Leader选举,则至少需要2台机器,两台的高可用性会差一些,如果Leader 宕机,就剩下一台,自己没办法选举。这里选取3台机器组成的服务器集群为例。 在集群初始化阶段,当有一台服务器Server1启动时,其单独无法进行和完成Leader选举,当第二台服务器Server2启动时,此时两台机器可以相互通信,每台机器都试图找到Leader,于是进入Leader选举过程。选举过程如下 (1) 每个Server发出一个投票。由于是初始情况,Server1和Server2都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用(myid, ZXID)来表示,此时Server1的投票为(1, 0),Server2的投票为(2, 0),然后各自将这个投票发给集群中其他机器。 (2) 接受来自各个服务器的投票

zookeeper介绍与核心概念

纵饮孤独 提交于 2019-11-30 14:29:38
1、ZooKeeper介绍与核心概念 1.1 简介 ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务。在学习zookeeper之前,先要对分布式系统的概念有所了解,否则你将完全不知道zookeeper在分布式系统中起到了什么作用,解决了什么问题。 1.2分布式系统面临的问题 我们将分布式系统定义为:分布式系统指的是同时跨越多个物理主机,将一个完整的系统划分为多个独立运行的子系统,这些子系统之间互相协作构成一个完整的系统功能。类比一下,分布式系统就是将一个完整的任务细分为多个子任务,一群人分别完成一个子任务,最终完成整个任务。人多力量大,每个服务器的算力是有限的,但是通过分布式系统,由n个服务器组成起来的集群,算力是可以无限扩张的。 说起分布式就要谈谈集群,两者很相似,都是通过网络协同多台主机服务器节点完成整体的功能。 但不同点在于: 集群中的每个服务器节点都完成的是同一个功能,比如mysql数据库集群、redis集群; 而分布式系统则是各个服务器节点所负责的是不同的子系统(任务或者说功能),比如电商系统的分布式系统会分为订单系统、支付系统、数据库系统、缓存系统等等。 所谓分布式集群系统,就是将一个完整的系统进行拆分多个子系统,每个子系统都进行集群部署,各系统集群之间互相协作,就能构成一个分布式集群系统。 优点显而易见,人多干活快,并且互为备份。但是缺点也很明显

Kafka Consumer底层原理分析【Kafka系列】

孤街浪徒 提交于 2019-11-30 14:19:42
虽然目前Kafka0.10版本已经重写了其API,但底层原理是类似的,所以我们可以先了解kafka0.8.x里面的提供的Consumer的实现原理与交互流程 Kafka提供了两套API给Consumer The SimpleConsumer API The high-level Consumer API 1. 低阶API 本质上是提供了一种与broker交互信息的API 剩下的处理全靠用户自己的程序,功能比较简单,但用户扩展性比较强 1) API结构 低阶API的consumer,指定查找topic某个partition的指定offset去消费 首先与broker通信,寻找到leader(不与zookeeper通信,不存在groupid), 然后直接和 leader 通信,指定 offset 去消费。消费多少,从哪里开始消费,都可控 (我们的例子是从 0 开始消费) findLeader方法中会去调用findPartitionMetadata方法 程序运行结果: 运行过程中一直卡住没有成功消费,加入如下错误信息判断,发现error code为1 说明我们从offset 0消费offsetoutofrange了 (我们发送请求topic1 partition0的offset 0 broker回复我们offset out of range,因为kafka中已经没有offset 0

hadoop高可用安装和原理详解

拜拜、爱过 提交于 2019-11-30 04:34:19
本篇主要从hdfs的namenode和resourcemanager的高可用进行安装和原理的阐述。 一、HA安装 1、基本环境准备 1.1.1、centos7虚拟机安装,详情见 VMware安装Centos7虚拟机 1.1.2、关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service 1.1.3、修改selinux vim /etc/selinux/config 将SELINUX=enforcing改为SELINUX=disabled [hadoop@lgh2 ~]$ cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can

1.4Zookeeper和Thymeleaf的使用

无人久伴 提交于 2019-11-30 02:40:49
什么是Zookeeper? Zookeeper 是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务、配置维护和命名服务等等。 采用下图描述zookeeper协调服务。 Zookeeper特性 ZooKeeper非常快速且非常简单。但是,由于其目标是构建更复杂的服务(如同步)的基础,因此它提供了一系列保证。这些是: 顺序一致性 - 客户端的更新将按发送顺序应用。 原子性 - 更新成功或失败。没有部分结果。 单系统映像 - 无论服务器连接到哪个服务器,客户端都将看到相同的服务视图。 可靠性 - 一旦应用了更新,它将从那时起持续到客户端覆盖更新。 及时性 - 系统的客户视图保证在特定时间范围内是最新的。 什么是分布式锁 顾名思义,分布式锁肯定是用在分布式环境下。在分布式环境下,使用分布式锁的目的也是保证同一时刻只有一个线程来修改共享变量,修改共享缓存……。 前景: jdk提供的锁只能保证线程间的安全性,但分布式环境下,各节点之间的线程同步执行却得不到保障,分布式锁由此诞生。 实现方式有以下几种: 基于数据库实现分布式锁; 基于缓存(Redis等)实现分布式锁; 基于Zookeeper实现分布式锁; 本示例利用zookeeper实现分布式锁。 实现思路 zookeeper 可以根据有序节点+watch实现,实现思路,如:

zookeeper入门

谁说我不能喝 提交于 2019-11-30 01:20:50
zookeeper 简介 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 zookeeper 单机使用 访问http://zookeeper.apache.org/releases.html 并下载最新版本的ZooKeeper,这里我使用的版本是3.4.8。 下载完成后解压缩。进入conf目录,创建zoo.cfg配置文件(可复制已有的zoo_sample.cfg修改)。 tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper clientPort=2181 说明一下几个配置项的意义(initLimit和syncLimit暂时先不管,后面有说明): tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。 clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口