zookeeper數據工具類介紹及編譯安裝過程

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章