您的位置:首页 > 其它

zookeeper数据工具类介绍及编译安装过程

2017-11-10 20:08 351 查看
1.ACL

传统的文件系统中,ACL分为两个维度,一个是所属组,一个是权限,子目录/文件默认继承父目录的ACL。在zookeeper中,它利用一个三元组来定义客户端的访问权限:(scheme:expression, perms) 。Perms:标识了操作权限, scheme:定义了expression的含义。如:(host:host1.corp.com,READ),标识了一个名为host1.corp.com的主机,有该数据节点的读权限;(ip:19.22.0.0/16, READ),表示IP地址以19.22开头的主机,有该数据节点的读权限。

private int perms;

private org.apache.zookeeper.data.Id id;

( private String scheme; private String id;)

当然也可以从三个维度来理解:一是scheme; 二是user; 三是permission,scheme对应于采用哪种方案来进行权限管理。zookeeper-3.4.4缺省支持下面几种scheme:

world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的
auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)
digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication
ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段
super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)


客户端使用方式:

List<ACL> acls = new ArrayList<ACL>(2);

Id id1 = new Id("digest", DigestAuthenticationProvider.generateDigest("admin:admin123"));
ACL acl1 = new ACL(ZooDefs.Perms.ALL, id1);

Id id2 = new Id("digest", DigestAuthenticationProvider.generateDigest("guest:guest123"));
ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);

acls.add(acl1);
acls.add(acl2);

ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 10000, new DefaultWatcher());
zk.create("/test", new byte[0], acls, CreateMode.PERSISTENT);


2.Stat

private long czxid;
private long mzxid;
private long ctime;
private long mtime;
private int version;
private int cversion;
private int aversion;
private long ephemeralOwner;
private int dataLength;
private int numChildren;
private long pzxid;


cZxid: 是节点的创建时间所对应的Zxid格式时间戳。

mZxid:是节点的修改时间所对应的Zxid格式时间戳。

zxid是一个64为的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个 新的epoch。低32位是个递增计数。

version 节点数据版本号

cversion 子节点版本号

aversion 节点所拥有的ACL版本号

ctime 节点被创建的时间

mtime 节点被修改的时间

如果节点为临时节点,该值为这个节点拥有者的会话id,否则为0

最新修改的zxid

ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id, 该id称为zxid. 由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2发生. 创建任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加.

3.zookeeper源码编译

a. 下载Zookeeper源码包https://github.com/apache/zookeeper

b. ant eclipse进行编译,直至出现BUILD SUCCESSFUL Total time: 20 seconds等文字。

c. 导入至eclipse,找到项目中的build.xml文件,右健,选择Run As -> Ant Build,出现 BUILD SUCCESSFUL, Total time: 8 seconds.

注意点,ant安装,java安装。 本人使用Apache Ant(TM) version 1.9.2 compiled on June 10 2014, java version “1.8.0_111”, 编译起来很顺利,没有错误。

之后进入到编译目录里面,conf目录下面将zoo_sample.cfg改名为zoo.cfg,在bin目录下,运行zkServer.sh命令,启动zookeeper。单机模式启动,log信息如下。

2017-11-10 07:00:56,156 [myid:] - INFO  [main:QuorumPeerConfig@118] - Reading configuration from: /home/cheung/workspace/zookeeper/zookeeper/bin/../conf/zoo.cfg
2017-11-10 07:00:56,161 [myid:] - INFO  [main:QuorumPeerConfig@331] - clientPortAddress is 0.0.0.0/0.0.0.0:2181
2017-11-10 07:00:56,162 [myid:] - INFO  [main:QuorumPeerConfig@335] - secureClientPort is not set
2017-11-10 07:00:56,164 [myid:] - INFO  [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2017-11-10 07:00:56,165 [myid:] - INFO  [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
2017-11-10 07:00:56,165 [myid:] - INFO  [main:DatadirCleanupManager@101] - Purge task is not scheduled.
2017-11-10 07:00:56,165 [myid:] - WARN  [main:QuorumPeerMain@124] - Either no config or no quorum defined in config, running  in standalone mode
2017-11-10 07:00:56,166 [myid:] - INFO  [main:ManagedUtil@46] - Log4j found with jmx enabled.
2017-11-10 07:00:56,177 [myid:] - INFO  [main:QuorumPeerConfig@118] - Reading configuration from: /home/cheung/workspace/zookeeper/zookeeper/bin/../conf/zoo.cfg
2017-11-10 07:00:56,177 [myid:] - INFO  [main:QuorumPeerConfig@331] - clientPortAddress is 0.0.0.0/0.0.0.0:2181
2017-11-10 07:00:56,177 [myid:] - INFO  [main:QuorumPeerConfig@335] - secureClientPort is not set
2017-11-10 07:00:56,177 [myid:] - INFO  [main:ZooKeeperServerMain@117] - Starting server
2017-11-10 07:00:56,189 [myid:] - INFO  [main:Environment@109] - Server environment:zookeeper.version=3.6.0-SNAPSHOT-1392a8b3d8ac3d042a51dac18e33e144674b1b5b, built on 11/10/2017 11:52 GMT
2017-11-10 07:00:56,190 [myid:] - INFO  [main:Environment@109] - Server environment:host.name=localhost
2017-11-10 07:00:56,190 [myid:] - INFO  [main:Environment@109] - Server environment:java.version=1.8.0_111
2017-11-10 07:00:56,190 [myid:] - INFO  [main:Environment@109] - Server environment:java.vendor=Oracle Corporation
2017-11-10 07:00:56,192 [myid:] - INFO  [main:Environment@109] - Server environment:java.home=/home/jdk1.8.0_111/jre
2017-11-10 07:00:56,192 [myid:] - INFO  [main:Environment@109] - Server environment:java.class.path=/home/cheung/workspace/zookeeper/zookeeper/bin/../build/classes:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/slf4j-log4j12-1.7.5.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/slf4j-api-1.7.5.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/netty-3.10.5.Final.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/log4j-1.2.17.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jline-2.11.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jetty-util-9.2.18.v20160721.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jetty-servlet-9.2.18.v20160721.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jetty-server-9.2.18.v20160721.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jetty-security-9.2.18.v20160721.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jetty-io-9.2.18.v20160721.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jetty-http-9.2.18.v20160721.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/javax.servlet-api-3.1.0.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jackson-mapper-asl-1.9.11.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/jackson-core-asl-1.9.11.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/commons-cli-1.2.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../build/lib/audience-annotations-0.5.0.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../lib/*.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../zookeeper-*.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../src/java/lib/ivy-2.4.0.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../src/java/lib/ant-eclipse-1.0-jvm1.2.jar:/home/cheung/workspace/zookeeper/zookeeper/bin/../conf:.:/home/jdk1.8.0_111/lib/dt.jar:/home/jdk1.8.0_111/lib/tools.jar
2017-11-10 07:00:56,192 [myid:] - INFO  [main:Environment@109] - Server environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2017-11-10 07:00:56,192 [myid:] - INFO  [main:Environment@109] - Server environment:java.io.tmpdir=/tmp
2017-11-10 07:00:56,192 [myid:] - INFO  [main:Environment@109] - Server environment:java.compiler=<NA>
2017-11-10 07:00:56,192 [myid:] - INFO  [main:Environment@109] - Server environment:os.name=Linux
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:os.arch=amd64
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:os.version=3.10.0-514.2.2.el7.x86_64
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:user.name=cheung
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:user.home=/home/cheung
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:user.dir=/home/cheung/workspace/zookeeper/zookeeper/bin
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:os.memory.free=109MB
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:os.memory.max=889MB
2017-11-10 07:00:56,193 [myid:] - INFO  [main:Environment@109] - Server environment:os.memory.total=117MB
2017-11-10 07:00:56,195 [myid:] - INFO  [main:ZooKeeperServer@911] - minSessionTimeout set to 4000
2017-11-10 07:00:56,195 [myid:] - INFO  [main:ZooKeeperServer@920] - maxSessionTimeout set to 40000
2017-11-10 07:00:56,196 [myid:] - INFO  [main:ZooKeeperServer@159] - Created server with tickTime 2000 minSessionTimeout 4000 maxSessionTimeout 40000 datadir /tmp/zookeeper/version-2 snapdir /tmp/zookeeper/version-2
2017-11-10 07:00:56,215 [myid:] - INFO  [main:Log@186] - Logging initialized @462ms
2017-11-10 07:00:56,268 [myid:] - WARN  [main:ContextHandler@1339] - o.e.j.s.ServletContextHandler@58ceff1{/,null,null} contextPath ends with /*
2017-11-10 07:00:56,269 [myid:] - WARN  [main:ContextHandler@1350] - Empty contextPath
2017-11-10 07:00:56,284 [myid:] - INFO  [main:Server@327] - jetty-9.2.18.v20160721
2017-11-10 07:00:56,324 [myid:] - INFO  [main:ContextHandler@744] - Started o.e.j.s.ServletContextHandler@58ceff1{/,null,AVAILABLE}
2017-11-10 07:00:56,343 [myid:] - INFO  [main:AbstractConnector@266] - Started ServerConnector@fad3bac{HTTP/1.1}{0.0.0.0:8080}
2017-11-10 07:00:56,344 [myid:] - INFO  [main:Server@379] - Started @593ms
2017-11-10 07:00:56,345 [myid:] - INFO  [main:JettyAdminServer@112] - Started AdminServer on address 0.0.0.0, port 8080 and command URL /commands
2017-11-10 07:00:56,351 [myid:] - INFO  [main:ServerCnxnFactory@135] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory
2017-11-10 07:00:56,355 [myid:] - INFO  [main:NIOServerCnxnFactory@673] - Configuring NIO connection handler with 10s sessionless connection timeout, 1 selector thread(s), 8 worker threads, and 64 kB direct buffers.
2017-11-10 07:00:56,357 [myid:] - INFO  [main:NIOServerCnxnFactory@686] - binding to port 0.0.0.0/0.0.0.0:2181
2017-11-10 07:00:56,375 [myid:] - INFO  [main:ZKDatabase@118] - zookeeper.snapshotSizeFactor = 0.33
2017-11-10 07:00:56,386 [myid:] - INFO  [main:FileTxnSnapLog@347] - Snapshotting: 0x0 to /tmp/zookeeper/version-2/snapshot.0
2017-11-10 07:00:56,390 [myid:] - INFO  [main:FileTxnSnapLog@347] - Snapshotting: 0x0 to /tmp/zookeeper/version-2/snapshot.0
2017-11-10 07:00:56,414 [myid:] - INFO  [main:ContainerManager@64] - Using checkIntervalMs=60000 maxPerMinute=10000


参考文献

1. http://blog.csdn.net/xinguan1267/article/details/38423019

2. http://nettm.iteye.com/blog/1721778

3. http://blog.csdn.net/tswisdom/article/details/41522069
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: