Zookeeper

Zookeeper相关概念

Zookeeper概述

Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题。
Zookeeper本质上是一个分布式的小文件存储系统,主要的功能有统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等。

Zookeeper特性

  1. 全局数据一致
  2. 可靠性
  3. 顺序性
  4. 数据更新原子性
  5. 实时性

Zookeeper集群角色

  • Leader:Zookeeper 集群工作的核心
    事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各个服务器的调度者。
    对于 create,setData,delete 等有写操作的请求,则需要统一转发给leader 处理,leader 需要决定编号、执行操作,这个过程称为一个事务。
  • Follower:跟随者
    处理客户端非事务(读操作)请求,转发事务请求给 Leader;参与集群 Leader 选举投票。
  • Observer:针对访问量比较大的 zookeeper 集群,还可新增观察者角色
    不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。

ZooKeeper数据模型


图中的每个节点称为一个 Znode。 Znode 兼具文件和目录两种特点;具有原子性操作;存储数据大小有限制,通常以 KB 为大小单位;通过路径引用,路径必须是绝对的,由斜杠字符来开头。

  • 每个 Znode 由 3 部分组成:
  1. stat:此为状态信息, 描述该 Znode 的版本, 权限等信息
  2. data:与该 Znode 关联的数据
  3. children:该 Znode 下的子节点
  • Znode 有两种,临时节点:会话结束,临时节点将被自动删除。临时节点不允许拥有子节点和永久节点
  • 存在四种类型的 Znode 节点
  1. PERSISTENT:永久节点
  2. EPHEMERAL:临时节点
  3. PERSISTENT_SEQUENTIAL:永久节点、序列化
  4. EPHEMERAL_SEQUENTIAL:临时节点、序列化

Zookeeper Watcher

客户端向服务端注册Watcher、服务端事件发生触发 Watcher、客户端回调 Watcher 得到触发事件情况

  • Watch机制特点
  1. 一次性触发
  2. 事件封装:WatchedEvent(通知状态(keeperState),事件类型(EventType)和节点路径(path))
  3. event 异步发送
  4. 先注册再触发

ZooKeeper 选举机制

  1. 全新集群选举
    投票数正好大于半数时,服务器 ID最大的服务器为leader
  2. 非全新集群选举
    逻辑时钟小的选举结果被忽略,重新投票;统一逻辑时钟后,数据 id 大的胜出;数据 id 相同的情况下,服务器 id 大的胜出

Zookeeper集群搭建

JDK 环境安装

  1. #卸载openjdk
  2. rpm -qa | grep java
  3. rpm -e --nodeps 上一步查出来的软件
  4. #上传 jdk 安装包
  5. jdk-8u65-linux-x64.tar.gz
  6. #解压安装包
  7. tar zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps
  8. #配置环境变量
  9. vim /etc/profile
  10. export JAVA_HOME=/root/apps/jdk1.8.0_65
  11. export PATH=$PATH:$JAVA_HOME/bin
  12. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  13. #刷新配置
  14. source /etc/profile

Zookeeper集群搭建

  1. #检查集群时间,下方窗口同时间发送
  2. date
  3. #同步时间
  4. yum install -y ntp
  5. ntpdate ntp6.aliyun.com
  6. #关闭防火墙
  7. service iptables stop
  8. #注: 永久关闭防火墙[推荐使用]
  9. chkconfig iptables off
  10. 映射 cat /etc/hosts
  11. IP地址 主机名
  1. ##下载安装包、解压
  2. tar -zxvf zookeeper-3.4.5.tar.gz
  3. mv zookeeper-3.4.5 zookeeper
  4. 改一个名字
  5. ##修改环境变量(注意:3台zookeeper都需要修改)
  6. #注 : 1.写环境变量的时候最后不能带有 / 一定不能!!2. 一定要ssh 自己能通过
  7. vim /etc/profile
  8. export ZOOKEEPER_HOME=/root/apps/zookeeper
  9. export PATH=$PATH:$ZOOKEEPER_HOME/bin
  10. source /etc/profile
  11. ##修改Zookeeper配置文件
  12. cd /root/apps/zookeeper/conf
  13. cp zoo_sample.cfg zoo.cfg
  14. #创建数据文件夹
  15. mkdir -p /export/data/zkdata
  16. vim zoo.cfg
  17. 添加内容:
  18. //修改路径.改成自己的
  19. dataDir=/export/data/zkdata
  20. ## (心跳端口、选举端口)
  21. server.1=node1:2888:3888
  22. server.2=node2:2888:3888
  23. server.3=node3:2888:3888
  24. 注: 最好这行配置后面不要加别的注释以及不要断开,防止启动不起来
  25. cd /export/data/zkdata
  26. #注意这是刚才创建的data路径文件夹
  27. data文件夹下新建myid文件,myid的文件内容为(设置节点的id):
  28. echo 1 > myid
  29. ##分发安装包到其他机器(这里是要把jdk 也要传过去,)
  30. scp -r /root/apps/zookeeper root@node2:/root/apps/
  31. 注:这里zookeeper 后面有没 / 把文件夹也传过去
  32. ##修改其他机器的配置文件[记得创建数据文件夹]
  33. 修改myid文件
  34. node2上:修改myid为:2
  35. node3上:修改myid为:3
  1. #设置三个机器的本机免密登录(三台机器配置一样):
  2. ssh-keygen -t rsa ---一直回车即可
  3. cd /root/.ssh/ ---生成了公钥和私钥
  4. cat id_rsa.pub >> authorized_keys ---将公钥追加到授权文件中
  5. more authorized_keys ---可以查看到里面追加的公钥
  6. ssh node1
  7. #配置两两之间的免密登录:
  8. #将node1中的公钥复制到node2中
  9. ssh-copy-id -i node2
  10. #将node3中的公钥复制到node2中
  11. ssh-copy-id -i node2
  12. #把node2中的授权文件复制给node1和node3
  13. scp /root/.ssh/authorized_keys node1:/root/.ssh/
  14. scp /root/.ssh/authorized_keys node3:/root/.ssh/
  1. 一键启动:
  2. #!/bin/bash
  3. for host in node1 node2 node3
  4. do
  5. {
  6. echo $host start
  7. ssh $host "source /etc/profile;/root/apps/zookeeper/bin/zkServer.sh start"
  8. echo "$host zk is running"
  9. }
  10. done
  11. ##查看集群状态
  12. jps(查看进程)
  13. zkServer.sh status(查看集群状态,主从信息)
  14. 如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查
  15. 一键关闭:
  16. #!/bin/bash
  17. for host in node1 node2 node3
  18. do
  19. {
  20. echo "$host zk is stopping"
  21. ssh $host "/root/apps/zookeeper/bin/zkServer.sh stop"
  22. }
  23. done

zookeeper相关知识与集群搭建的更多相关文章

  1. ZooKeeper的伪分布式集群搭建

    ZooKeeper集群的一些基本概念 zookeeper集群搭建: zk集群,主从节点,心跳机制(选举模式) 配置数据文件 myid 1/2/3 对应 server.1/2/3 通过 zkCli.sh ...

  2. zookeeper+activemq高可用集群搭建

    一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...

  3. Zookeeper,Hbase 伪分布,集群搭建

    工作中一般使用的都是zookeeper和Hbase的分布式集群. more /etc/profile cd /usr/local zookeeper-3.4.5.tar.gz zookeeper在安装 ...

  4. ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建

    在上一个小系列文章<ASP.NET Core on K8S学习初探>中,通过在Windows上通过Docker for Windows搭建了一个单节点的K8S环境,并初步尝试将ASP.NE ...

  5. 【ZooKeeper】单机伪集群搭建(适用于mac)

    1.配置 .zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4. ...

  6. zookeeper集群搭建及Leader选举算法源码解析

    第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...

  7. 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

  8. K8S之集群搭建

    转自声明 ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建 1.K8S环境搭建的几种方式 搭建K8S环境有几种常见的方式如下: (1)Minikube Minikube是一 ...

  9. 初始zookeeper与集群搭建实例

    zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...

随机推荐

  1. 详细分析UserLock如何保证高校内部信息安全

    俄克拉荷马城市公立学校的IT团队负责该片区接近43000个学生的网络管理工作.长期以来,学生和教师员工共享Windows网络登录为他们带来了很多难题. 由于没有并发登录的限制,也不能对网络使用情况进行 ...

  2. 02_ActiveMQ入门

    [ActiveMQ 入门HelloWorld例子] [启动ActiveMQ] 1.由于本人PC是64位的,选择在bin目录下的win64/activemq.bat启动. 2.启动成功后,访问http: ...

  3. Android layout 布局 属性详解

    第一类:属性值 true或者 false           android:layout_centerHrizontal 水平居中     android:layout_centerVertical ...

  4. 编译时提示软件包 javax.servlet.http 不存在 import javax.servlet.http.HttpServletRequest;

    编译时错误:软件包 javax.servlet.http 不存在import javax.servlet.http.HttpServletRequest; 解决办法:把servlet-api.jar加 ...

  5. SQL Server ->> Move characters in string N position(s) forward/backward based on ASCII table(根据ASCII表的排列顺序将字符串内的数值往前或者后移N个位)

    去年无聊的时候想到想玩一下根据ASCII表的排列顺序将字符串内的数值往前或者后移N个位,顺便看一下是T-SQL性能好还是用C#写CLR函数处理得快.结果是在50万行以下其实两者差距很小,当然这是在我的 ...

  6. 基于CAS的SSO单点登录-实现ajax跨域访问的自动登录(也相当于超时重连)

    先补课,以下网址可以把CAS环境搭起来. [JA-SIG CAS服务环境搭建]http://linliangyi2007.iteye.com/blog/165307 [JA-SIG CAS业务架构介绍 ...

  7. 如何批量删除Redis数据库中的Key

    借助 Linux 的 xargs 指令来完成 redis-cli keys "*" | xargs redis-cli del //如果redis-cli没有设置成系统变量,需要指 ...

  8. codeforces 597C - Subsequences

    枚举子序列的末尾,递推. 方案数:f[i = 以i结尾][k =子序列长度] = sum(f[j][k-1]),j < i. 转移就建立k个BIT. #include<bits/stdc+ ...

  9. JavaMail简单应用

    版权声明:本文为博主原创文章,未经博主同意不得转载. --caicongyang https://blog.csdn.net/caicongyang/article/details/33731395 ...

  10. Gym - 101334F 单调栈

    当时我的第一想法也是用单调栈,但是被我写炸了:我也不知道错在哪里: 看了大神的写法,用数组模拟的: 记录下单调递增栈的下标,以及每个数字作为最小值的最左边的位置. 当有数据要出栈的时候,说明栈里的数据 ...