zookeeper学习总结

原创 2015年11月19日 12:22:25
最近一两天,一直在看zookeeper,自己也感觉头昏脑涨的。
现记录一下,最近的所得:

安装与配置:

http://blog.csdn.net/morning99/article/details/40426133


几个知识点

集群与节点
我们知道,因为因为系统的不断扩张,我们一台物理机器已经满足不了需求,此时,我们用多台机器组成一个集群,他们上面运行的代码是一致的。
节点:在zookeeper中,数据的存储是以树状形式组织的。
加入我们有3个节点(a,b,c),4台机子(甲乙丙丁)组成集群。
那么一共有12个节点么?
不是的,这3个节点被4台机器所共用。
我再第甲机子上改了a节点,那么丙机子上的a节点也会实时同步。
上面的知识很简单,我自己却走了很大的弯路才认识到。


命令行

1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
6. 删除文件: delete /zk 将刚才创建的 znode 删除
7. 退出客户端: quit
8. 帮助命令: help
ZooKeeper 常用四字命令:
ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令
1. 可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
2. 使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
4. echo kill | nc 127.0.0.1 2181 ,关掉server
5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。
http://www.cnblogs.com/kunpengit/p/4045334.html
http://blog.csdn.net/gyflyx/article/details/18652913#t0
如果是windows下 启动的命令就是zkCli.cmd -server 10.1.39.43.4180


实验代码

我先说一下,如果我在实验的zookeeper集群里,增加了某个节点,代码正常运行完毕后,没有删除那个节点。那么即使你关闭zookeeper的服务,你下次启动的时候,那个节点的信息还在。
package com.hcr.web.controller;


import java.util.List;


import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;




/**
 * http://greemranqq.iteye.com/blog/2171449
 * @author Administrator
 *
 */
public class ZookeeperTest {

    // 根节点
    public static final String ROOT = "/root-ktv";




    public static void main(String[] args) throws Exception {
        // 创建一个与服务器的连接
        ZooKeeper zk = new ZooKeeper("localhost:2181", 30000, new Watcher() {
            // 监控所有被触发的事件
            public void process(WatchedEvent event) {
                System.out.println("状态:" + event.getState()+":"+event.getType()+":"+event.getWrapper()+":"+event.getPath());
            }
        });
        // 创建一个总的目录ktv,并不控制权限,这里需要用持久化节点,不然下面的节点创建容易出错
        zk.create(ROOT, "root-ktv".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);


        // 然后杭州开一个KTV ,       PERSISTENT_SEQUENTIAL 类型会自动加上 0000000000 自增的后缀
        zk.create(ROOT+"/杭州KTV", "杭州KTV".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);


        // 也可以在北京开一个,       EPHEMERAL session 过期了就会自动删除
        zk.create(ROOT+"/北京KTV", "北京KTV".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);


        // 同理,我可以在北京开多个,EPHEMERAL_SEQUENTIAL  session 过期自动删除,也会加数字的后缀
        zk.create(ROOT+"/北京KTV-分店", "北京KTV-分店".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);


        // 我们也可以 来看看 一共监视了多少家的ktv
        List<String> ktvs = zk.getChildren(ROOT, true);
        System.out.println("PPPP");
       
        for(String node : ktvs){
          System.out.println(node);
        }
        System.out.println("开始删除");
        for(String node : ktvs){
            // 删除节点
            zk.delete(ROOT+"/"+node,-1);
            Thread.sleep(3000);
            System.out.println("已经删除一个");
        }
        // 根目录得最后删除的 
        zk.delete(ROOT, -1);
        zk.close();
    }
}


以上摘自:
http://greemranqq.iteye.com/blog/2171449


这里还有一个包装了zookeeper增删改查的代码
http://www.oschina.net/code/snippet_1386372_46627


关于api
http://www.cnblogs.com/haippy/archive/2012/07/19/2600032.html


应用场景

在分布式应用中, 我们经常同时启动多个server, 调用方(client)选择其中之一发起请求.
分布式应用必须考虑高可用性和可扩展性: server的应用进程可能会崩溃, 或者server本身也可能会宕机. 当server不够时, 也有可能增加server的数量. 总而言之, server列表并非一成不变, 而是一直处于动态的增减中.
那么client如何才能实时的更新server列表呢? 解决的方案很多, 本文将讲述利用ZooKeeper的解决方案.
解决方案如下:
http://coolxing.iteye.com/blog/1871520/


其他应用场景

http://nileader.blog.51cto.com/1381108/1040007

其他参考资料

http://blog.csdn.net/xinguan1267/article/details/38422149


感谢glt
glt是谁?
我女朋友
她人很好的
我们关系也很好的
即使在我写博客的时候 我偶尔也会想她
我很喜欢她



版权声明:本文为博主原创文章,未经博主允许不得转载。

zookeeper命令行

3 常用命令 3.1. 启动ZK服务:        bin/zkServer.cmd start 3.2. 查看ZK服务状态:  bin/zkServer.cmd status 3.3  停止ZK服...
  • masterShaw
  • masterShaw
  • 2016年11月03日 11:27
  • 2165

由注册用户名不能使用单引号和双引号引发的思考

机房收费系统敲完很久了,也很久没有在CSDN上写博客了。关于机房收费系统能写的东西很多,同期的也写了很多。在测试机房收费系统时如果用户名里含有单引号或者双引号时,每次系统都会报错或者崩溃。      ...
  • Senior_lee
  • Senior_lee
  • 2013年11月17日 20:39
  • 1985

zookeeper windows 下配置和基础命令

1, 解压zookeeper ,在目录下建立文件夹 data 和log 2,在conf文件夹下 修改zoo_sample.cfg 改名为  zoo.cfg 添加 # 存储内存中数据库快照的位置,如...
  • woshioosm
  • woshioosm
  • 2015年05月07日 14:09
  • 8667

zookeeper总结

zk集群运维经验 一、配置如下 1、先解压 2、改名: 服务器 1:  # mv zookeeper-3.4.6 node-01  服务器 2:  # mv zookeeper-3.4.6 node...
  • chang_li
  • chang_li
  • 2016年10月27日 14:32
  • 784

Zookeeper和Hbase安装总结手册.

  • 2017年08月07日 17:11
  • 162KB
  • 下载

zookeeper的学习小结

1.zookeeper简介 ZooKeeper(ZK) 是一个高可用分布式应用协调系统(A Distributed Coordination Service forDistributed Applic...
  • wangjianno2
  • wangjianno2
  • 2016年02月27日 01:58
  • 421

Zookeeper 客户端源码吐血总结

**目录 一、几个重要的类 2 二、JAVA的基础知识 2 三、大致了解 2 四 从入门到放弃的讲解 3 Code1:ZK 3 Code2:创建 Zookeeper实例,实例...
  • cnh294141800
  • cnh294141800
  • 2016年11月04日 21:34
  • 3980

ZooKeeper学习总结(3)——ZooKeeper常见面试题

Zookeeper是什么框架 分布式的、开源的分布式应用程序协调服务,原本是Hadoop、HBase的一个重要组件。它为分布式应用提供一致性服务的软件,包括:配置维护、域名服务、分布式同步、组服务等...
  • u012562943
  • u012562943
  • 2017年07月26日 10:46
  • 5183

ZooKeeper典型使用场景总结

ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得zookeeper能够应用于很多场景。网上...
  • derekjiang
  • derekjiang
  • 2013年04月02日 13:51
  • 2570

Zookeeper学习总结

经过几天的学习剖解了下zookeeper学习,包含zookeeper的特点、角色 、优点、为什么要使用zookeeper、zookeeper的单机运行及集群搭建、主要配置文件zoo.cfg的参数简单解...
  • liu_yulong
  • liu_yulong
  • 2015年12月08日 14:04
  • 499
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:zookeeper学习总结
举报原因:
原因补充:

(最多只允许输入30个字)