zookeeper初探
- 安装三台linux虚拟机,安装好java环境,并配置好网络以及host文件,分别改好hostname为node0、node1、node2

- 上传下载好的zookeeper文件到node0的/usr/local目录下,解压,然后将解压后的文件复制到另外两台机器中,使用scp -r /usr/local/zookeeper-3.4.10 root@node1:/usr/local/命令
- 同时操作三台机器,将解压后的文件重命名为zookeeper,并进入该目中的conf文件夹,拷贝一份zoo_sample.cfg并命名为zoo.cfg,使用命令:cp zoo_sample.cfg zoo.cfg
- 修改zoo.cfg文件,在文档末尾添加如下内容:

- zookeeper默认将数据存储在/tmp/zookeeper/目录中,所以需要去到/tmp目录下建立一个zookeeper目录。使用命令mkdir /tmp/zookeeper,然后进入该目录,创建myid文件,编辑内容,三台机器的内容不一,分别为1、2、3,即上一步中配置的server的值。

- 进入/usr/local/zookeeper/bin目录,输入./zkServer.sh start命令,启动zookeeper服务,然后输入jps观察启动情况:

- 执行./zkServer.sh status观察zookeeper的运行状态,会发现,3台机器中会有一台leader和两台follower,至于哪台机器是leader,是由zookeeper自己选举出来的。但是,如果leader机器挂了,会出现什么情况?下一步来做这个实验。

- 在leader机器上关闭zookeeper服务,首先输入jps观察leader的pid,然后使用kill -9 pid命令杀掉它,再次使用jps观察状况。然后使用./zkServer status查看状态,会发现zookeeper会自动再选举一个leader。

- 下面看看zookeeper到底能做什么。再复制一台虚拟机出来,装好jdk和zookeeper,并将用户名更改为node3
- 进入zookeeper/bin目录下,输入./zkCli -server node0:2181进行连接。
- 简单操作zookeeper,zookeeper就像一个数据库,里边可以存放数据,其七字真言“一致、有头、数据树”,一致是说,在所有的节点中,数据都是一致的,无论你连接到哪一个节点上,所看到的数据都是一样的,并且,修改任意一个节点上的数据,都会同步到其他所有的节点上;有头是说这些节点会有一个leader,当leader挂掉后,会自动再选举一个leader;数据树是说每个节点中都有一个数据的目录树,树的节点上存的就是数据。zookeeper是将数据存在了内存当中,所以读取的速度会很快。

- zookeeper应用场
- 配置一致:顾名思义,如hadoop服务需要修改配置文件,但如果集群机器特别多,需要一个个修改很麻烦,可以将配置文件放到zookeeper里,这样修改一个,其他的就都可以修改过来了。
- HA(High Available):高可用集群
- pub/sub
- naming service
- load balance
- 分布式锁
- ...
- 使用java操作zookeeper
- 新建maven项目,添加zookeeper依赖
<dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</version> </dependency> </dependencies> - 编写java代码
public class ZkClient implements Watcher { static CountDownLatch connected = new CountDownLatch(1); static final String CONN_STR = "192.168.217.170:2181,192.168.217.171:2181,192.168.217.172:2181"; public void test() throws Exception { ZooKeeper zoo = null; zoo = new ZooKeeper(CONN_STR, 5000, this); System.out.println(zoo.getState()); connected.await(); if (zoo.exists("/skyer", false) != null) { zoo.delete("/skyer", -1); } zoo.create("/skyer", "192.168.56.1:2000".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("ok"); byte[] data = zoo.getData("/skyer", false, null); System.out.println(new String(data)); zoo.create("/e", "e".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); Thread.sleep(10000); zoo.close(); } public static void main(String[] args) throws Exception { new ZkClient().test(); } public void process(WatchedEvent event) { System.out.println("event:" + event); if (event.getState() == KeeperState.SyncConnected) { connected.countDown(); System.out.println("connected!"); } } }
- 新建maven项目,添加zookeeper依赖
- 下面演示一个HA的过程,编写java代码
public class TankMaster { static String status = "ACTIVE"; public static void main(String[] args) throws Exception { String CONN_STR = "192.168.217.170:2181,192.168.217.171:2181,192.168.217.172:2181"; ZooKeeper zk = new ZooKeeper(CONN_STR, 5000, null); String IP = "202.106.29.138"; String port = new Random().nextInt(500) + ""; System.out.println(port); if (zk.exists("/tankMaster", new MasterWatcher()) != null) { status = "STANDBY"; } else { zk.create("/tankMaster", (IP + ":" + port).getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); status = "ACTIVE"; // 启动server System.out.println("启动就是active"); } Thread.sleep(Integer.MAX_VALUE); } static class MasterWatcher implements Watcher { public void process(WatchedEvent event) { if (event.getType() == EventType.NodeDeleted) { status = "ACTIVE"; System.out.println("切换为active"); } } } } - 运行上述程序,观看控制台输出

- 不要停止上述程序,再次运行该程序,观察控制台输出

- 停止步骤15运行的程序,观察步骤16的控制台输出

zookeeper初探的更多相关文章
- ZooKeeper初探之安装和配置
1. ZooKeeper简介 Zookeeper是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠的协调系统,提供的功能包括配置维护,名字服务,分布式同步,组服务等,Zookeeper是可 ...
- Dubbo zookeeper 初探
先把zookeeper在本地给安装好, 安装方法参考:http://blog.csdn.net/wxwzy738/article/details/16330253 这里的话讲述了两个工程一个工程是提供 ...
- Zookeeper集群是如何升级到新版本的
方案1:复用老数据方案 这是经过实践的升级方案,该方案是复用旧版本的数据,zk集群拓扑,配置文件都不变,只是启动的程序为最新的版本. 参考文章: Zookeeper集群是如何升级到新版本的 方案2:重 ...
- 深入了解ZooKeeper(一)
在上篇博客ZooKeeper初探之安装和配置中已经对Zookeeper这个“服务协调者”有了初步的认识和了解,一个字“美”,接下来开始深入的交往,开始了解其内心世界! 1. 内容思维导图 2. 分布式 ...
- Zookeeper——分布式一致性协议及Zookeeper Leader选举原理
文章目录 一.引言 二.从ACID到CAP/BASE 三.分布式一致性协议 1. 2PC和3PC 2PC 发起事务请求 事务提交/回滚 3PC canCommit preCommit doCommit ...
- Kafka学习(学习过程记录)
Apache kafka 这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. Kafka ...
- 搞懂分布式技术3:初探分布式协调服务zookeeper
搞懂分布式技术3:初探分布式协调服务zookeeper 1.Zookeepr是什么 Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡, ...
- 2、初探 ZooKeeper 技术内幕
分布式一致性 “分布式” 是大型系统实现高性能.高可用所常用的架构手段,本章节将概述 “分布式一致性”的基本内容,以作为 ZAB 算法阐述的基础. 分布式一致性的基本概念 数据库系统的基础理论中,“事 ...
- 好用的zookeeper客服端----Curator初探
maven配置: <dependency> <groupId>org.apache.curator</groupId> <artifactId>cura ...
随机推荐
- 笔记:Spring Cloud Eureka 服务发现与消费
服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon.JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器:使用Jersey ...
- VMware 下快速克隆出多个 Linux 环境
念念不忘,必有回响 好好工作,好好吃饭,困了倒头就睡:吃你认为好吃的,吃到饱:买贵的,你想买的:去玩去野: 就这样. 为什么要克隆多个 Linux 系统? 因为要玩阿. 其实也不是了,就是为了折腾嘛, ...
- Redis这些知识点,是必须知道的!
Redis是一个开源(BSD许可)的内存数据结构存储,可作为数据库,缓存和消息队列.相比Memcached它支持更多的数据结构,如string(字符串),hash(哈希),list(链表),set(集 ...
- linux下tomcat无法访问问题(换一种说法:无法访问8080端口)
有时候linux下的tomcat其他机器无法访问,比如主机无法访问linux虚拟机的tomcat,这是因为tocat的端口,linux没有对外开放,所以只能localhost访问,但是别的机器访问不了 ...
- 第四次团队作业:社团申请App
概要: 基于上次软件设计本着界面简洁.易于使用的初衷,进行功能的实现,代码位置:https://github.com/LinZezhong/testDemo 第一部分:软件的使用 注册: 登录: 主界 ...
- 20162318 实验二《Java面向对象程序设计》实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623班 姓名:张泰毓 指导老师:娄老师.王老师 实验日期:2017年4月14日 实验密级:非密级 实验器材:带Lin ...
- 2018C程序设计—第0次作业
1.翻阅邹欣老师博客关于师生关系博客,并回答下列问题,每个问题的答案不少于500字 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 答:正如邹欣老师博客里所 ...
- 201621123044 《Java程序设计》第六周实验总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- 大神都在看的RxSwift 的完全入坑手册
大神都在看的RxSwift 的完全入坑手册 2015-09-24 18:25 CallMeWhy callmewhy 字号:T | T 我主要是通过项目里的 Rx.playground 进行学习和了解 ...
- CNN中的padding
在使用TF搭建CNN的过程中,卷积的操作如下 convolution = tf.nn.conv2d(X, filters, strides=[1,2,2,1], padding="SAME& ...