| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> zookeeper 学习 -> 正文阅读 |
|
[大数据]zookeeper 学习 |
1: zookeeper? 集群搭建这里使用三台虚拟机器完成zookeeper 集群的搭建 192.168.217.128? ?2181? 2888 3888? 192.168.217.135? 2181? 2888 3888? 192.168.217.136? ?2181? 2888 3888? 其中 2181 是 zookeeper 默认的服务通信端口, 2888? 和3888 是集群之间 节点通信的算口 和 节点选举使用的端口? 分别上传 zk 的 压缩包 到zookeeper 用户的家目录下 解压 重命名 ?然后 分别在三台机器在 zk 的安装目录下 新建 data 目录? mkdir data 然后 data 中分别 添加 myid 文件 并在其中分别追加值 1 ,2, 3? 这三个值对应下面将要配置集群信息的 server.x?? ? ?然后修改 conf 文件下的 配置? cp? zoo_sample.cfg zoo.cfg vim?zoo.cfg 然后 在三个机器都添加 如下配置 server.1=192.168.217.128:2888:3888 并且修改 默认的dataDir=/temp/data 为 dataDir=/home/zookeeper/zk3.6/data 分别启动 三个机器的 zk 服务 cd /home/zookeeper/zk3.6/bin ./zkServer.sh start? 启动服务
创建节点进行实验? 在 128 上进行节点创建 ,在 135 和136上获取系欸但数据 ? ??自此集群搭建完成 ./zkServer.sh stop 关闭集群 2:给普通linux用户 添加su 切换权限?使用root 用户登录 为 新建的 zookeeper 用户添加 su 权限 执行如下命令: cd root visudo 切换到root用户下, 找到如下图所示,标出红线的一行 并在这一行下添加? root ALL=(ALL) ALL zookeeper ALL=(ALL) ? ? ALL ?此时就可以切换了 ?如果想以后每次使用sudo的时候不再验证密码,可以在刚刚的sudoers文件做如下操作:? ? 3:安装zk 4字命令需要配合使用的nc命令服务?yum install nc.x86_64 使用这个安装如果找不到 可以执行如下命令 yum erase nc wget http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm rpm -iUv nc-1.84-22.el6.x86_64.rpm 安装完成之后 使用nc --help 查看是否安装成功 4:基础命令学习基本的增删改查 请自行查阅官网:?ZooKeeper: Because Coordinating Distributed Systems is a Zoo 主要将一些 操作多一点的命令: 注册事件监听命令 ,老的版本 使用 在命令末尾 添加 watch 命令 ?在 3.5.9 版本之后 使用 -w 参数 来表示 例如注册是一个监听时间 ,然后在另外一个 会话中 修改这个节点 ,将会监听到 该事件的变化 修改该节点 ? ?事件监听 ?这种事件监听是一次性的 对于节点的权限 使用 setAcl 和getAcl 来实现 ,如 ACL 权限控制,使用:schema:id:permission 来标识,主要?3 个部分组成:
ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限 每个znode支持设置多种权限控制方案和多个权限 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点 schema? 主要有以下几种:
permission: zookeeper目前支持下面一些权限:
权限相关命令
world方式 :? 命令语法 :?setAcl <path> world:anyone:<acl> [zk: localhost:2181(CONNECTED) 0] create /node1 1 ip 方式 : 语法?setAcl <path> ip:<ip>:<acl> [zk: localhost:2181(CONNECTED) 0] create /node2 1 Auth 方式: addauth digest <user>:<password> #添加认证用户 [zk: localhost:2181(CONNECTED) 0] create /node3 1 Digest 方式: 先将密码做成密文的 echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64 然后添加到命令中 setAcl <path> digest:<user>:<password>:<acl> echo -n tester:123456 | openssl dgst -binary -sha1 | openssl base64 [zk: localhost:2181(CONNECTED) 0] create /node4 1 注册权限之后,再获取 acl命令行super超级管理员 修改??zkServer.sh vim zkServer.sh # 找到nohup那一行,加入以下内容 "-Dzookeeper.DigestAuthenticationProvider.superDigest=user:HYGa7IZRm2PUBFiFFu8xY2pPP/s=" user是用户名,后面那一大串是加密后的密文密码 修改完之后,需要重启zookeeper服务才能生效?./zkServer.sh restart # zkCli.sh ==================================================== zookeeper 其他4 字命令: stat? 配合 nc 命令来执行 ,需要加入ip白名单 到?? zoo.cfg? ?中 ?在需要被远程 使用4 字命令的机器上.修改? zoo.cfg? 在末尾添加?4lw.commands.whitelist=* [root@study-01 ~]# echo wchc |nc 192.168.135.129 2181 此时 验证 在 128 的机器 去使用 4字命令 + nc 获取 节点状态 ? ?其他四字命令用法也一样 四字命令列表和用法请参考官网: ZooKeeper: Because Coordinating Distributed Systems is a Zoo?? 5: zookeeper java api? 和分布式锁??代码:? java api? 链接zk 集群 public static void main(String[] args) { 其他代码: GitHub - wanglei111000/zkOriginalJavaApi? ? ? ?未完待更新...... 6:curator? 封装的java apiCurator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等。 Curator 包含了几个包:
ZKClientBindings - Apache ZooKeeper - Apache Software Foundation? ? ?Curator? 的官方 文档 代码案例 : 依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.8</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> package org.zk.curator; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.cache.PathChildrenCache; import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.data.Stat; public class App { public static void main( String[] args ) throws Exception{ CuratorFramework curatorFramework = CuratorFrameworkFactory.builder() .connectString("192.168.217.128:2181,192.168.217.135:2181,192.168.217.136:2181"). sessionTimeoutMs(4000) .retryPolicy(new ExponentialBackoffRetry(1000,3)) //重试策略每个一秒重试一次 总共从试3次 //如果制定了命名空间 namespace 则所有的动作都在该链接下, 这里可以用作区分不同项目组的数据 .namespace("").build(); curatorFramework.start(); //创建监听 PathChildrenCache cache=new PathChildrenCache(curatorFramework,"/top",true); cache.start(); cache.rebuild(); cache.getListenable().addListener(new PathChildrenCacheListener() { @Override public void childEvent(CuratorFramework framwork, PathChildrenCacheEvent event) throws Exception { System.err.println("节点发生变化:"+event.getType()); } }); Stat stat = new Stat(); //查询节点数据 byte[] bytes = curatorFramework.getData().storingStatIn(stat).forPath("/hadoop"); System.out.println(new String(bytes)); System.out.println("准备创建【/top/ni】"); curatorFramework.create().withMode(CreateMode.PERSISTENT) .forPath("/top/ni", "李小龙".getBytes()); System.out.println("节点【/top/ni】创建成功"); stat = curatorFramework.checkExists().forPath("/top/ni"); if(stat!= null){ System.out.println("【/top/ni】节点存在,直接删除"); curatorFramework.delete().forPath("/top/ni"); } byte[] bs=curatorFramework.getData().forPath("/hadoop"); System.out.println("数据:"+new String(bs)); curatorFramework.close(); } } GitHub - wanglei111000/zkCurator? ? 代码路径 未完待续.... 7: 其他参考4.0 Zookeeper Java 客户端搭建 | 菜鸟教程? ? 菜鸟的案例 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:26:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |