ZooKeeper笔记

ZooKeeper概述

背景:

现代企业对计算机系统的计算存储能力要求越来越高,单纯的高性能服务器已经无法满足要求。企业的IT架构从集中式向分布式过度。

所谓分布式,就是将一个计算任务分解成若干计算单元,分派到不同的计算机中去执行,然后汇总计算结果的过程。

ZooKeeper是开源的分布式协调服务,是 Google Chubby 的开源实现。是高性能的分布式一致性解决方案。它将那些复杂的、容易出错的分布式一致性服务封装起来,构成一个高效的原语集,并提供一系列简单易用的接口给用户使用。

分布式数据一致性问题,指的是:

  顺序一致性:严格按照客户请求发起的顺序到ZooKeeper中进行任务执行

  原子性:所有事务请求,在集群中的任意一台机器上的执行结果都是一致的

  单一视图:看到的服务端数据都是一致的

  可靠性:一旦服务端完成响应,则状态会保存下来

  实时性:ZooKeeper保证在一定时间内,客户端一定能从服务端获取数据

  

ZooKeeper典型应用场景:

  数据发布/订阅:一方把数据发布出来,一方通过某种手段得到这些数据。

  负载均衡:举例:需要提供服务的数据库服务器注册在 ZooKeeper中(称为 ZooKeeper 的一个节点),如果挂了一台,会被移除 ZooKeeper 节点。请求的时候先访问 ZooKeeper,随机挑选一台“活着”的数据库服务器进行使用。因为是随机的,可以认为是负载均衡的

  命名服务:举例:数据库表中的主键字段,如果使用 MySQL 中的自增,在分布式环境不好使,使用 UUID,不容易理解。可以使用 ZooKeeper 来生成一个顺序增长,可以在集群环境中使用

  分布式协调/通知:心跳检测。

优势

  开源

  已被证实高性能、易用的工业级产品

  应用广泛

——————————————————————————————————————————————————————

ZooKeeper的基本概念

集群角色:

  Leader:Leader服务器是整个ZooKeeper集群工作机制中的核心

  Follwer:Follower服务器是ZooKeeper集群状态的跟随者

  Observer:Observer服务器充当一个观察者的角色

会话:

  会话指客户端和ZooKeeper服务器的连接,ZooKeeper中的会话叫session,客户端与服务器建立一个TCP长连接来维持一个Session

  客户端在启动的时候,首先会与服务器建立一个TCP长连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效会话,也能向ZooKeeper服务器发生请求并获得响应。

  • 数据节点

ZooKeeper有两种节点

  1、集群中的一台机器称为一个节点

  2、数据模型中的数据单元znode,分为持久节点和临时节点。ZooKeeper的数据模型是一棵树,树的节点就是Znode,Znode中可以保存信息

      大多数的ZooKeeper开发,都是和树节点打交道

版本:

版本类型:

版本类型 说明
 version 当前数据节点内容的版本号【如果修改了某张表的数据,就将该表的version字段进行变更。如果version=1,表示创建以来被修改了一次】
cversion 当前数据节点子节点的版本号
aversion 当前数据节点 ACL 变更版本号

一般要修改一条数据是这么处理的,在修改前,先读取当前数据记录的version字段,如version=2,然后修改的时候,version=2作为修改条件。如果此时其他事务修改了此数据,则当前修改就会失败(因为version=2找不到了)

  • 悲观锁和乐观锁

悲观锁:是数据库中一种非常严格的锁策略,具有强烈的排他性。在上一个事务完成之前,下一个事务不能访问相同的资源。适合数据更新竞争非常激烈的场景、

乐观锁:修改数据前,先读取其版本号,更新的时候,把版本号作为更新条件。如果在此过程中,其他事物对此数据进行了修改,版本号会发生变更,会导致本次修改失败。排除异常让客户端自行处理

watcher:

  事件监听器,ZooKeeper允许用户在指定节点上注册一些watcher,当数据节点发生变化的时候,ZooKeeper服务器会把这个变化的通知发送给感兴趣的客户端

ACL权限控制:

  Access Control Lists

  权限类型:CREATE-创建子节点;READ-获取节点数和子节点列表;WRITE-更新节点数据;DELETE-删除子节点;ADMIN-设置节点ACL

——————————————————————————————————————————————————————

ZooKeeper环境搭建(集群、单机、伪集群)

集群

  1、准备多台Linux机器、JRE环境

  2、下载ZooKeeper

  3、解压安装包到需要安装的机器上

  4、进入解压后的文件夹,进入conf文件夹,复制一份配置文件:cp zoo_sample.cfg zoo.cfg

    zoo_sample.cfg是ZooKeeper配置文件的样例,一般我们复制一份后,在新文件上修改就行了

  5、配置说明

    打开配置文件(这里是zoo.cfg)后,

      dataDir:用来配置ZooKeeper服务器存储快照文件的目录,一般放到  /var/ZooKeeper 上(没有的话要自己创建)

      clientPort:服务器对外提供服务的端口。默认是2181

      配置服务器格式:server.id=ip:port:port  两个端口的含义是不一样的  1 表示机器标识。2181配置的是Leader和Follwer的通信端口,2182用于Leader选举投票过程中的通信。这两个端口可以使用任意闲置端口

        server.1=192.168.1.101:2181:2182

        server.2=192.168.1.102:2181:2182

        server.3=192.168.1.103:2181:2182

  6、将修改完后的配置文件拷贝到集群中所有机器上

    scp zoo.cfg root@192.168.1.101:/opt/zookpeer/conf

  7、myid

    在dataDir指定的目录下,创建一个  myid  文件,写入当前机器的id(就是server.1,那么就写1)

    注意:每台机器都有配置

  8、启动

    进入到bin目录下,有一个叫 zkserver.sh 的文件

    ./zkserver.sh start

    ./zkserver.stop

把集群中所有的机器都启动

  验证是否启动成功:telnet 192.168.1.101 2181   执行 stat  命令  这个telnet的ip是本机的ip

  如果只有一台服务器启动的话,是不会成功的。因为ZooKeeper中,当超过一半的机器成功启动的时候,才认为是成功的,能够向外提供访问

我需要运行几个ZooKeeper?
你运行一个zookeeper也是可以的,但是在生产环境中,你最好部署3,5,7个节点。部署的越多,可靠性就越高,当然最好是部署奇数个,偶数个不是不可以的,但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,所以奇数个集群更佳。你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘。 (独立磁盘可以确保zookeeper是高性能的。).如果你的集群负载很重,不要把Zookeeper和RegionServer运行在同一台机器上面。就像DataNodes 和 TaskTrackers一样。

机器的角色,可以在telnet命令后,输入stat,查看其中的mode参数

伪集群

zoo.cfg的配置文件中

server.1=192.168.1.101:2181:2182

server.2=192.168.1.101:2183:2184

server.3=192.168.1.101:2185:2186

其实就是ip一样,端口不同

注意:我自己试了不行,应该还有其他配置,因为只有一台机器,那么myid上写什么,启动就一次够了?

正确的方式应该是在本地不同目录安装多套zk

单机

zoo.cfg的配置文件中

server.1=192.168.1.101:2181:2182

配置一台就是了

成功

——————————————————————————————————————————————————————

ZooKeeper概述与安装的更多相关文章

  1. Zookeeper的概述、安装部署及选举机制

    一.Zookeeper概述 1.Zookeeper是Hadoop生态的管理者,它致力于开发和维护开源服务器,实现高度可靠的分布式协调. 2.Zookeeper的两大功能: (1)存储数据 (2)监听 ...

  2. (转)ZooKeeper 笔记(1) 安装部署及hello world

    ZooKeeper 笔记(1) 安装部署及hello world   先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.or ...

  3. OpenVAS漏洞扫描基础教程之OpenVAS概述及安装及配置OpenVAS服务

    OpenVAS漏洞扫描基础教程之OpenVAS概述及安装及配置OpenVAS服务   1.  OpenVAS基础知识 OpenVAS(Open Vulnerability Assessment Sys ...

  4. ZooKeeper概述

    1.Zookeeper概述 Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务.它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置 ...

  5. ZooKeeper介绍,安装,配置文件解析

    什么是ZooKeeper? ZooKeeper是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务. 所有这些类型的服务都以分布式应用程序以某种形式或另一种形式使用.每次实施时,都有很多工 ...

  6. zookeeper单机模式安装

    zookeeper单机模式安装 更多文章:http://blogxinxiucan.sh1.newtouch.com/2017/07/26/zookeeper单机模式安装/ 下载zookeeper u ...

  7. C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节

    C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立艺术级图形界面 ...

  8. Zookeeper原理、安装、基本使用和API

     ZooKeeper ZooKeeper是一种分布式协调服务, 解决应用程序的分布式带来的问题.   1 分布式应用 分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的 ...

  9. 1、zookeeper集群安装

    前提准备3台centos7.0虚拟机 c7003:192.168.70.103 c7004:192.168.70.104 c7005:192.168.70.105 并在三台虚拟机上配置hosts为 1 ...

随机推荐

  1. Hive[6] HiveQL 查询

    6.1   SELECT ... FROM 语句    hive> SELECT name,salary FROM employees;    --普通查询 hive>SELECT e.n ...

  2. Linq to Entity 时间差作为筛选条件产生的问题

    前言 在使用 Linq to Entity 的時候,會把之前 Linq to SQL 的想法就帶進去,寫好之後編譯也都不會出錯,但是實際上在跑的時候就會出現錯誤訊息了,這點真的要注意了.這次我遇到問題 ...

  3. 基于centos7实现的nfs

    NFS NFS(Network FileSystem,网络文件系统),最早由Sun公司所发展出来的,主要是通过网络让不同的主机.不同的操作系统,可以彼此分享个别档案,因此我们也可以简单把NFS看成是一 ...

  4. Ansible学习 ad-hoc命令

    Ansible提供两种方式去执行命令,一种是ad-hoc命令,一种是写入Ansible playbook.类似于前者在命令行敲shell,后者是写shell-script脚本,前者解决一些简单的任务, ...

  5. DSP资源分享贴

    DSP资源分享 [2017.5.16 更新] 分享资源共同学习.以前的资源很多人都说用不了了,我会陆续补充,逐步完善.这里不单单分享DSP的,设计基础的,还有其他的电子相关的比较好的资源吧主都和您分享 ...

  6. scrapy之分布式

    分布式爬虫 概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取. 原生的scrapy是不可以实现分布式爬虫? a) 调度器无法共享 b) 管道无法共享 工具 scrapy-redis组件: ...

  7. protobuf-2.5.0的下载与安装

    1.下载 Hadoop使用protocol buffer进行通信,需要下载和安装protobuf-2.5.0.tar.gz.由于现在protobuf-2.5.0.tar.gz已经无法在官网https: ...

  8. The Image Gallery Revisited

    Lets apply the Best practices to the Image Gallery . /*** index.html ***/ <!DOCTYPE html> < ...

  9. 4,版本控制git --忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定 ...

  10. MyBatis---自动创建表

    该项目基于Maven实现 该项目实现了在项目启动时,对数据库表进行操作 源码下载 实现步骤: 1.向pom.xml文件添加maven依赖 <dependency> <groupId& ...