栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Zookeeper(学习笔记)

Zookeeper(学习笔记)

全部内容: Zookeeper 简介         Zookeeper 存储结构         监听通知         安装 Zookeeper         Zookeeper 操作命令         Zookeeper 集群         Zookeeper中的常用命令 使用 Java API 操作 Zookeeper Zookeeper 实战 Linux Zookeeper 安装包: 链接:https://pan.baidu.com/s/1CcDBCcnL7BxuIxQJHDNXPw 
提取码:5555 
  一、 Zookeeper 简介: 1:什么是zookeeper                  zooper首先 明白这是一个分布式框架,类似于注册中心,起的主要作用就是一个文件系统中心+一个监听通知 Zookeeper 官网: http://zookeeper.apache.org/ Zookeeper 是 Apache 的一个分布式服务框架,是 Apache Hadoop 的一个子项目。官方 文档上这么解释 Zookeeper ,它主要是用来解决分布式应用中经常遇到的一些数据管理问题, 如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 2:zookeeper的存储结构         zookeeper的存储结构类似于Linux系统的文件结构,根为/,下次有znode节点然后一节一节往下扩展,由此可以看出必然是树形结构,并且吧信息可以存放带每个节点                   2.1:znode的节点类型 共四种,持久,带序号持久,临时节点,带序号临时节点 3: 通知机制: Zookeeper 是使用观察者设计模式来设计的。当客户端注册监听它关心的目录节点时, 当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时, Zookeeper 会通知客 户端。 4、 安装 zookeeper

解压 Zookeeper 压缩包

[root@localhost temp]# tar -zxf zookeeper-3.6.0.tar.gz [root@localhost temp]# cp zookeeper-3.6.0 /usr/local/zookeeper -r

4.1  Zookeeper 目录结构  

1. bin :放置运行脚本和工具脚本, 2. conf : zookeeper 默认读取配置的目录,里面会有默认的配置文件 3. docs : zookeeper 相关的文档 4. lib : zookeeper 核心的 jar 5. logs : zookeeper 日志

4.2 配置 Zookeeper

这里要提前创建一个data用于作为zookeeper的缓存

Zookeeper 在启动时默认的去 conf 目录下查找一个名称为 zoo.cfg 的配置文件。 在 zookeeper 应用目录中有子目录 conf 。其中有配置文件模板: zoo_sample.cfg cp zoo_sample.cfg zoo.cfg 。 zookeeper 应用中的配置文件为 conf/zoo.cfg。修改配置文件 zoo.cfg - 设置数据缓存路径

 4.3 Zookeeper常用命令

默认加载配置文件: ./zkServer.sh start :默认的会去 conf 目录下加载 zoo.cfg 配置文件。 指定加载配置文件: ./zkServer.sh start 配置文件的路径。 停止: ./zkServer.sh stop 状态: ./zkServer.sh status 连接: 默认连接地址为本机地址,默认连接端口为 2181 bin/zkCli.sh 连接指定 IP 地址与端口 bin/zkCli.sh -server ip:port

5     Zookeeper 集群 5.1:Zookeeper 集群中的角色

Zooper主要角色有:

        领导者,学习者(跟随者,观察者),客服端

领导者:类似Redis中master,跟随者:类似client,

5.2: Zookkeeper集群安装: 5.2.1创建: 使用 3 个 Zookeeper 应用搭建一个伪集群。应用部署位置是: 192.168.233.130 。客户端 监听端口分别为: 2181 、 2182 、 2183 。投票选举端口分别为 2881/3881 、 2882/3882 、 2883/3883 。 tar -zxf zookeeper-3.6.0.tar.gz 将解压后的 Zookeeper 应用目录重命名,便于管理 mv zookeeper-3.6.0 zookeeper01 5.2.1:提供缓存目录 在 zookeeper01 应用目录中,创建 data 目录,用于缓存应用运行数据 cd zookeeper01 mkdir data 复制两份 Zookeeper 应用。用于模拟集群中的 3 个节点。 cp -r zookeeper01 zookeeper02 cp -r zookeeper01 zookeeper03 5.2.3创建并修改配置 在 zookeeper 应用目录中有子目录 conf。其中有配置文件模板: zoo_sample.cfg cp zoo_sample.cfg zoo.cfg zookeeper 应用中的配置文件为 conf/zoo.cfg 。 修改配置文件 zoo.cfg - 设置数据缓存路径 dataDir 参数值为应用运行缓存数据保存目录。 5.2.4  提供应用唯一标识 在 Zookeeper 集群中,每个节点需要一个唯一标识。这个唯一标识要求是自然数。且唯 一标识保存位置是:数据缓存目录 (dataDir=/usr/local/zookeeper/data) 的 myid 文件中。其中 “数据缓存目录”为配置文件 zoo.cfg 中的配置参数 在 data 目录中创建文件 myid : touch myid 为应用提供唯一标识。本环境中使用 1 、 2 、 3 作为每个节点的唯一标识。 vi myid 简化方式为: echo [ 唯一标识 ] >> myid 。 echo 命令为回声命令,系统会将命令发送的 数据返回。 '>>' 为定位,代表系统回声数据指定发送到什么位置。 此命令代表系统回声数 据发送到 myid 文件中。 如果没有文件则创建文件。 5.2.5修改配置文件 zoo.cfg - 设置监听客户端、投票、选举端口
clientPort= 2181 # 服务端口根据应用做对应修改 ,zk01-2181,zk02-2182,zk03-2183 server.1=192.168.233.130:2881:3881 server.2=192.168.233.130:2882:3882 server.3=192.168.233.130:2883:3883

 5.2.6测试启动

启动 Zookeeper 集群脚本 zookeeper01/bin/zkServer.sh start zookeeper02/bin/zkServer.sh start zookeeper03/bin/zkServer.sh start 可以使用任何节点中的客户端工具连接集群中的任何节点。 ./zkCli.sh -server 192.168.233.130:2183 6:zookeeper中的常用命令: ls 命令 二:Java中使用zookeeper 1、链接: 引入依赖 创建测试类:                  new 一个zookeeper对象,使用三参构造,ip路由端口,超时时间,事件通知对象(监听对象)         // 这里事件监听对象,我们直接使用测试类让其实现Watcher 接口,然后实现process方法即可,可以在process中设置当链接成功,失败等时候执行的回调方法                  创建一个Znode         调用zookeeper.create 使用其四参构造,创建路径,Znode值内容,权限,以及Znode节点类型         
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
    ZooKeeper zooKeeper = new ZooKeeper("192.168.8.129:2181",150000,new zookeeper_test());

    String path = zooKeeper.create("/wufan/zookeeper/test","oldlu".getBytes(), ZooDefs.Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT_SEQUENTIAL);
    System.out.println(path);
public void process(WatchedEvent watchedEvent) {

    if (watchedEvent.getState() == Event.KeeperState.SyncConnected){
        System.out.println("链接成功");
    }

}
2,获取、修改、删除 zookeeper值
        
byte[] b1 = zooKeeper.getData("/wufan/zookeeper/test/xxxd",new zookeeper_test(),new Stat());
System.out.println(new String(b1));

List list = zooKeeper.getChildren("/wufan/zookeeper/test/",new zookeeper_test(),null);
for(String paths : list){
    byte [] data = zooKeeper.getData("/wufan/zookeeper/test/"+paths,new zookeeper_test(),null);
    System.out.println(data);
}
Stat就是 当前节点的详细信息,修改次数,版本等
Stat stat = zooKeeper.setData("/bjsxt/test0000000001","bjsxt".getBytes(),-1);
//  -1  代表匹配任意版本
zooKeeper.delete( "/bjsxt/test0000000001" ,- 1 );

三 、远程登录项目 实战案例介绍:使用 Zookeeper 与 RMI 技术实现一个 RPC 框架。 1 基于 RMI 实现远程方法调用 1.1RMI 简 介 : 让java的刻意跨主机,跨内存,牛啤                  RMI(Remote Method Invocation) 远程方法调用。         RMI 是从 JDK1.2 推出的功能,它可以实现在一个 Java 应用中可以像调用本地方法一样 调用另一个服务器中 Java 应用(JVM)中的内容。

1.2 执行流程                  有一个注册表,放置所有服务器对象的命名空间,每次服务端创建一个对象时,它 都会使用 bind() 或 rebind() 方法注册该对象。 这些是使用称为绑定名称的唯一名称注册的。         要调用远程对象,客户端需要该对象的引用。即通过服务端绑定的名称从注册表中获取 对象 (lookup() 方法 ) 1.3 RMI接口介绍:                  Remote 接口 :表示可以被远程调用的接口(没什么需要实现的,就是一个标志)          RemoteException 类:  每一个实现Remote的方法需要抛出的异常类         UnicastRemoteObject 类:实现方法需要继承的类,并且会自动生成构造方法,需要吧protect改为public         LocateRegistry 类:  需要在本机上创建一个Registry,创建的时候需要给出一个被访问的端口         Naming 类: Naming 定义了发布内容可访问 RMI 名称。也是通过 Naming 获取到指定的远程方法,          1.3 创建开始,创建server                  首先构建一个接口继承Remote,在接口中创建方法         构建接口实现类,先继承UnicasRemoteObject,然后实现接口        使用继承生成无参构造类。将 protect改为public,然后实现接口方法,在返回的时候抛出异常RemoteException        创建 server层中DemoServer,在其中编写主类         实例化接口,通过LocalRigest中静态方法create创建注册表传入端口参数         使用Numing.bing绑定实例化的接口,第一参数为name需要唯一,一般格式为
Naming.bind("rmi://localhost:8888/xxxxx",xxxxx);

1.4 创建client

        复制其 要链接servfer的抽象类,这个是后面获取完的信息是Object为了让系统设别他本来是什么类有什么方法,所使用的

        创建server层,通过Naming.lockup(),参数为注册表中的标识,获取数据,然后转为抽象接口对象

public class ClientServer {

    public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {

        DemoService demoService = (DemoService) Naming.lookup("rmi://localhost:8810/demoService");

        String reslut = demoService.test1("aaa");
        System.out.println(reslut);
    }
}

1.5 通过Zookeeper实现注册中心:(这样就可以动态方法标识字段)

        前面的没有变化

       在server中需要创建zookeeper对象,然后创建节点,以存放url标识,

ZooKeeper zooKeeper = new ZooKeeper("192.168.8.129:2181",150000,new zk_Server());

zooKeeper.create("/bjsxt/zk_Server",url.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

System.out.println("服务发布成功");

客户端区别也不大:

        首先创建zookeeper对象,通过getdata拿取路径下url值,转换为字符串,

然后在通过Naming去拿取数据

完结撒花!!!!

补充两个bug:

org.apache.zookeeper.KeeperException$InvalidACLException: KeeperErrorCode = InvalidACL for

这类情况就是你的Znode要么是创建问题,要么是存值出现了问题:

首先检查防火墙关了没,然后看自己自己java的create中的参数值都对不

xception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss 

这个也是,自己自己java的create中的参数值都对不,尤其是权限,看清是ZooDefs.Ids.CREATOR_ALL_ACL 还是  ZooDefs.Ids.OPEN_ACL_UNSAFE

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671099.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号