[DB] Zookeeper
介绍
- 相当于“数据库”,类似linux、hdfs的属性文件结构
- 分布式协调框架,实现HA(High Availability)
- 分布式锁管理框架
- 保证数据在zookeeper集群之间数据的事务一致性
组成
- Leader:数据总控节点,用于接收客户端连接请求,分发给所有的Follower节点后,各个Follower节点进行更新数据操作并返回给Leader节点,如果满足半数以上(所以Zookeeper集群一般是奇数个节点)更新成功则此次操作成功
- Follower:跟随者,Zookeeper的Leader宕机时,所有的Follower内部通过选举机制,选举出新的Leader
- Observer:客户端,用于观察Zookeeper集群的数据发送变化,如果产生变化则zookeeper会主动推送watch事件给Observer(客户端),用于对数据变化的后续处理;Observer(客户端)也可以发送数据变更请求
功能
- 分布式协调
- 分布式锁
- 数据同步(端口:2888)
- 选举机制(端口:3888)
场景
- 统一命名服务
- 配置管理
- 集群管理
- Hadoop2.0使用ZK的事件处理确保整个集群只有一个活跃的NameNode,并存储配置信息
- HBase使用ZK的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,并存储访问控制列表
- 共享锁
- 队列管理
单机配置
- 解压,设置环境变量
- 生效环境变量
- 创建目录 /root/training/zookeeper-3.4.10/tmp
- 在 conf/ 下创建zoo_sample.cfg的副本zoo.cfg,添加内容:
- dataDir=/root/training/zookeeper-3.4.10/tmp
- server.1=bigdata111:2888:3888
- 在 /root/training/zookeeper-3.4.10/tmp 下创建文件:myid,输入1
- zkCli.sh:连接客户端
- create /node1 "hello world"
秒杀系统
- 实现方式
- Zookeeper:利用分布式锁
- Redis:利用队列
- 消息系统:利用队列
传统多线程方式(会产生混乱)


1 package demo;
2
3 public class TestZookeeperDemo {
4
5
6 private static int NUMBER = 10;
7 private static void getNumber() {
8 System.out.println("*******业务方法开始***********");
9 System.out.println("当前值:" + NUMBER);
10 NUMBER --;
11 try {
12 Thread.sleep(2000);
13 } catch (InterruptedException e) {
14 e.printStackTrace();
15 }
16 System.out.println("*******业务方法结束***********");
17 }
18
19 public static void main(String[] args) {
20 //启动10个线程
21 for(int i = 0 ; i < 10 ; i ++ ) {
22 new Thread(new Runnable() {
23 public void run() {
24 getNumber();
25 }
26 }).start();
27 }
28 }
29 }
Zookeeper方式(分布式锁)


1 package demo;
2
3 import org.apache.curator.RetryPolicy;
4 import org.apache.curator.framework.CuratorFramework;
5 import org.apache.curator.framework.CuratorFrameworkFactory;
6 import org.apache.curator.framework.recipes.locks.InterProcessMutex;
7 import org.apache.curator.retry.ExponentialBackoffRetry;
8
9 public class TestZookeeperDemo {
10
11
12 private static int NUMBER = 10;
13 private static void getNumber() {
14 System.out.println("*******业务方法开始***********");
15 System.out.println("当前值:" + NUMBER);
16 NUMBER --;
17
18 // 睡两秒,客户端依然拿着锁
19 try {
20 Thread.sleep(2000);
21 } catch (InterruptedException e) {
22 e.printStackTrace();
23 }
24 System.out.println("*******业务方法结束***********");
25 }
26
27 public static void main(String[] args) {
28 // 定义retry policy(重试策略)
29 // 每次等待1000ms,重试10次
30 RetryPolicy policy = new ExponentialBackoffRetry(1000, 10);
31 // 创建一个ZK的客户端
32 CuratorFramework cf = CuratorFrameworkFactory.builder()
33 .connectString("192.168.174.111:2181")
34 .retryPolicy(policy)
35 .build();
36
37 cf.start();
38
39 //在ZK中定义一把锁
40 final InterProcessMutex lock = new InterProcessMutex(cf, "/mylock");
41
42 //启动10个线程
43 for(int i = 0 ; i < 10 ; i ++ ) {
44 new Thread(new Runnable() {
45 public void run() {
46 try {
47 // 请求得到锁,如果没有得到,使用retrypolicy重试
48 lock.acquire();
49
50 // 访问共享资源
51 getNumber();
52 }catch(Exception ex) {
53 ex.printStackTrace();
54 }finally {
55 // 释放锁
56 try {
57 lock.release();
58 } catch (Exception e) {
59 e.printStackTrace();
60 }
61 }
62 }
63 }).start();
64 }
65 }
66 }
...
ZK集群
- Leader(bagdata113)
- Follower(bigdata112、bigdata114)
- 依赖zk的服务
参考
CDH zookeeper
https://www.aboutyun.com/forum.php?mod=viewthread&tid=9664
https://blog.csdn.net/weixin_33797791/article/details/94468085
集群排错
https://blog.51cto.com/10950710/2129883
https://www.cnblogs.com/austinspark-jessylu/p/6956319.html
zkClient
https://blog.csdn.net/sun_wangdong/article/details/77461108
[DB] Zookeeper的更多相关文章
- Docker 系列七(Dubbo 微服务部署实践).
一.前言 之前我们公司部署服务,就是大家都懂的那一套(安装JDK.Tomcat —> 编译好文件或者打war包上传 —> 启动Tomcat),这种部署方式一直持续了很久,带来的问题也很多: ...
- ActiveMQ 笔记(八)高级特性和大厂常考重点
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.可用性保证 引入消息队列之后该如何保证其高可用性? 持久化.事务.签收. 以及带复制的 Leavel ...
- 分布式锁三种实现方式(DB,redis,zookeeper)比较
先贴出看到的一篇博客,后续补充自己总结分析的. https://blog.csdn.net/u010963948/article/details/79006572
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
activemq官网给出了3种master/slave的HA方案,详见:http://activemq.apache.org/masterslave.html,基于共享文件目录,db,zookeepe ...
- ZooKeeper之FastLeaderElection算法详解
当我们把zookeeper服务启动时,首先需要做的一件事就是leader选举,zookeeper中leader选举的算法有3种,包括LeaderElection算法.AuthFastLeaderEle ...
- ZooKeeper 笔记(3) 实战应用之【统一配置管理】
大型应用通常会按业务拆分成一个个业务子系统,这些大大小小的子应用,往往会使用一些公用的资源,比如:需要文件上传.下载时,各子应用都会访问公用的Ftp服务器.如果把Ftp Server的连接IP.端口号 ...
- Zookeeper集群的安装和使用
Apache Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,现已经成为 Apache 的顶级项目,它是一个开放源码的分布式应用程序协调服务,是Google ...
- 【转】flume+kafka+zookeeper 日志收集平台的搭建
from:https://my.oschina.net/jastme/blog/600573 flume+kafka+zookeeper 日志收集平台的搭建 收藏 jastme 发表于 10个月前 阅 ...
随机推荐
- 认识Python解释器和PyCharm编辑器
(1)安装Python解释器 Python官网:https://www.python.org/ 下载对应机器(Windows/Mac)的安装包: 百度网盘地址: 链接:https://pan.baid ...
- 【DB宝47】企业知识分享+团队协作神器之Confluence
目录 一.Confluence简介 二.知识库软件对比 三.快速安装confluence 7.4.6版本 四.confluence基本操作简介 4.1.创建空间(Space) 4.2.配置空间权限 4 ...
- Kafka 消息存储机制
Kafka 消息以 Partition 作为存储单元,那么在 Partition 内消息是以什么样的格式存储的呢,如何处理 Partition 中的消息,又有哪些安全策略来保证消息不会丢失呢,这一篇我 ...
- Dubbo 编解码那些事
一.背景 笔者在一次维护基础公共组件的过程中,不小心修改了类的包路径.糟糕的是,这个类被各业务在facade中进行了引用.传递.幸运的是,同一个类,在提供者和消费者的包路径不一致,没有引起各业务报错. ...
- 201871030133-徐作朝 实验二 个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求连接 作业要求链接 我的课程学习目标 (1)掌握软件项目个人开发流程.(2)掌握Github发布软件项目的操作方法. 这个作业在那些方面帮助 ...
- Windows Service 2016 Datacenter\Stand\Embedded激活方法
安装好系统后连入互联网之后使用管理员身份打开命令行 输入命令 slmgr /skms kms.03k.org 弹出窗口提示模式修改成功后再输入命令:slmgr /ato 以下为各个版本的key 版本: ...
- 2021浙江省程序省赛(ACFGJLM题解)
A 签到,加起来就行了,记得等于属于先手赢(2A) C 题意 给八个点三维坐标,问是否在三维是立方体 思路 八个点的连成56条线,如果是立方体的话有8条,24条,24条相同的线,且都不相同 用map存 ...
- OOP-面向对象(一)
一图描述面向对象 类 - 相关参考 定义一个类 # 在定义类名的时候推荐使用大陀峰 class Car: pass # 推荐这么定义 class Car(): pass class Car(objec ...
- 『动善时』JMeter基础 — 1、JMeter介绍
1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...
- 08- Tomcat入门与环境搭建部署
环境搭建:网站文件(开发人员提供),相关软件(web服务器,应用服务器,数据库软件),硬件(服务器设备上),网络环境. 开发人员提供:部署文档说明书(操作系统版本,硬件配置,服务器软件及相关版本,部署 ...