zookeeper僞分佈式集羣安裝

所謂 “僞分佈式集羣” 就是在,在一臺PC中,啓動多個ZooKeeper的實例。“完全分佈式集羣” 是每臺PC啓動一個ZooKeeper實例。


在一臺PC中,啓動3個ZooKeeper的實例。

[root@master zookeeper-3.4.6]# mkdir zoo

[root@master zookeeper-3.4.6]# cd zoo
[root@master zoo]# mkdir zk1
[root@master zoo]# mkdir zk2
[root@master zoo]# mkdir zk3
[root@master zoo]# ll
total 12
drwxr-xr-x. 2 root root 4096 Dec 21 00:43 zk1
drwxr-xr-x. 2 root root 4096 Dec 21 00:43 zk2
drwxr-xr-x. 2 root root 4096 Dec 21 00:43 zk3

#新建myid文件

[root@master zoo]# echo 1 > zk1/myid
[root@master zoo]# echo 2 > zk2/myid 
[root@master zoo]# echo 3 > zk3/myid 

分別修改配置文件

[root@master conf]# cp zoo.cfg zk1.cfg
[root@master conf]# cp zoo.cfg zk2.cfg
[root@master conf]# cp zoo.cfg zk3.cfg

[root@master conf]# vim zk1.cfg 

dataDir=/root/cloud/zookeeper-3.4.6/zoo/zk1
clientPort=2181
server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890


[root@master conf]# vim zk2.cfg

dataDir=/root/cloud/zookeeper-3.4.6/zoo/zk2
clientPort=2182
server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890


[root@master conf]# vim zk3.cfg

dataDir=/root/cloud/zookeeper-3.4.6/zoo/zk3
clientPort=2183
server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890


3個節點的ZooKeeper集羣配置完成,接下來我們的啓動服務。
啓動集羣

[root@master zookeeper-3.4.6]# bin/zkServer.sh start conf/zk1.cfg 
JMX enabled by default
Using config: conf/zk1.cfg
Starting zookeeper ... STARTED
[root@master zookeeper-3.4.6]# bin/zkServer.sh start conf/zk2.cfg  
JMX enabled by default
Using config: conf/zk2.cfg
Starting zookeeper ... STARTED
[root@master zookeeper-3.4.6]# bin/zkServer.sh start conf/zk3.cfg  
JMX enabled by default
Using config: conf/zk3.cfg
Starting zookeeper ... STARTED
[root@master zookeeper-3.4.6]# jps
2502 QuorumPeerMain
2529 QuorumPeerMain
2602 Jps
2571 QuorumPeerMain


#查看節點狀態

[root@master zookeeper-3.4.6]# bin/zkServer.sh status conf/zk1.cfg 
JMX enabled by default
Using config: conf/zk1.cfg
Mode: follower
[root@master zookeeper-3.4.6]# bin/zkServer.sh status conf/zk2.cfg  
JMX enabled by default
Using config: conf/zk2.cfg
Mode: leader
[root@master zookeeper-3.4.6]# bin/zkServer.sh status conf/zk3.cfg  
JMX enabled by default
Using config: conf/zk3.cfg
Mode: follower

我們可以看到zk2是leader,zk1和zk3是follower

zookeeper命令行操作
我們通過客戶端連接ZooKeeper的集羣,我們可以任意的zookeeper是進行連接。

[root@master zookeeper-3.4.6]# bin/zkCli.sh -server master:2181
Connecting to master:2181
2016-12-21 01:00:27,857 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
2016-12-21 01:00:27,861 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=master
2016-12-21 01:00:27,861 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.7.0_79
2016-12-21 01:00:27,863 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2016-12-21 01:00:27,863 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/cloud/jdk1.7.0_79/jre
2016-12-21 01:00:27,863 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/root/cloud/zookeeper-3.4.6/bin/../build/classes:/root/cloud/zookeeper-3.4.6/bin/../build/lib/*.jar:/root/cloud/zookeeper-3.4.6/bin/../lib/slf4j-log4j12-1.6.1.jar:/root/cloud/zookeeper-3.4.6/bin/../lib/slf4j-api-1.6.1.jar:/root/cloud/zookeeper-3.4.6/bin/../lib/netty-3.7.0.Final.jar:/root/cloud/zookeeper-3.4.6/bin/../lib/log4j-1.2.16.jar:/root/cloud/zookeeper-3.4.6/bin/../lib/jline-0.9.94.jar:/root/cloud/zookeeper-3.4.6/bin/../zookeeper-3.4.6.jar:/root/cloud/zookeeper-3.4.6/bin/../src/java/lib/*.jar:/root/cloud/zookeeper-3.4.6/bin/../conf:
2016-12-21 01:00:27,864 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2016-12-21 01:00:27,864 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2016-12-21 01:00:27,864 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2016-12-21 01:00:27,864 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2016-12-21 01:00:27,865 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2016-12-21 01:00:27,865 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.32-431.el6.x86_64
2016-12-21 01:00:27,865 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2016-12-21 01:00:27,866 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2016-12-21 01:00:27,866 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/root/cloud/zookeeper-3.4.6
2016-12-21 01:00:27,870 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=master:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4b4bc1e
Welcome to ZooKeeper!
2016-12-21 01:00:27,930 [myid:] - INFO  [main-SendThread(master:2181):ClientCnxn$SendThread@975] - Opening socket connection to server master/172.31.30.24:2181. Will not attempt to authenticate using SASL (unknown error)
2016-12-21 01:00:27,948 [myid:] - INFO  [main-SendThread(master:2181):ClientCnxn$SendThread@852] - Socket connection established to master/172.31.30.24:2181, initiating session
2016-12-21 01:00:27,971 [myid:] - INFO  [main-SendThread(master:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server master/172.31.30.24:2181, sessionid = 0x1591d2590d00001, negotiated timeout = 30000
JLine support is enabled


WATCHER::


WatchedEvent state:SyncConnected type:None path:null
[zk: master:2181(CONNECTED) 0] 

集羣已連接,下面我們要使用一下,ZooKeeper的命令行操作。


#ls,查看/目錄內容

[zk: master:2181(CONNECTED) 0] ls /
[zookeeper]

#create,創建一個znode節點
[zk: master:2181(CONNECTED) 1] create /node conan
Created /node
[zk: master:2181(CONNECTED) 2] ls /
[node, zookeeper]

#get,查看/node的數據信息
[zk: master:2181(CONNECTED) 3] get /node
conan
cZxid = 0x100000004
ctime = Wed Dec 21 01:01:47 CST 2016
mZxid = 0x100000004
mtime = Wed Dec 21 01:01:47 CST 2016
pZxid = 0x100000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

#set,修改數據

[zk: master:2181(CONNECTED) 4] set /node fens.me
cZxid = 0x100000004
ctime = Wed Dec 21 01:01:47 CST 2016
mZxid = 0x100000005
mtime = Wed Dec 21 01:04:20 CST 2016
pZxid = 0x100000004
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

#get,再查看/node的數據信息,已改爲fens.me
[zk: master:2181(CONNECTED) 5] get /node
fens.me
cZxid = 0x100000004
ctime = Wed Dec 21 01:01:47 CST 2016
mZxid = 0x100000005
mtime = Wed Dec 21 01:04:20 CST 2016
pZxid = 0x100000004
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

#delete,刪除/node

[zk: master:2181(CONNECTED) 6] delete /node
[zk: master:2181(CONNECTED) 7] ls /
[zookeeper]

#quit,退出客戶端連接

[zk: master:2181(CONNECTED) 9] quit
Quitting...
2016-12-21 01:06:06,279 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
2016-12-21 01:06:06,279 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x1591d2590d00001 closed
[root@master zookeeper-3.4.6]# 


Java編程現實命令行操作

public class Demo {
public static void main(String[] args) throws Exception {
// 創建一個與服務器的連接
ZooKeeper zk = new ZooKeeper("master:2181", 60000, new Watcher() {
// 監控所有被觸發的事件
public void process(WatchedEvent event) {
System.out.println("event:" + event.getType());
}
});
// 查看根節點     ls /
System.out.println(zk.getChildren("/", true));

// 創建一個目錄節點    create /node conan
               if (zk.exists("/node", true) == null) {
                   zk.create("/node", "conan".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
                   
                   // 查看/node節點數據    get /node
                   System.out.println(new String(zk.getData("/node", false, null)));
                   // 查看根節點    ls /
                   System.out.println(zk.getChildren("/", true));
              }
              // 創建一個子目錄節點    create /node/sub1 sub1
              if (zk.exists("/node/sub1", true) == null) {
                     zk.create("/node/sub1", "sub1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
                      // 查看node節點     ls /node
                     System.out.println(zk.getChildren("/node", true));
              }
              // 修改節點數據
              if (zk.exists("/node", true) != null) {
                    zk.setData("/node", "changed".getBytes(), -1);
                    // 查看/node節點數據
                    System.out.println("get /node => " + new String(zk.getData("/node", false, null)));
              }
              // 刪除節點
              if (zk.exists("/node/sub1", true) != null) {
                    zk.delete("/node/sub1", -1);
                    zk.delete("/node", -1);
                     // 查看根節點
                     System.out.println("ls / => " + zk.getChildren("/", true));
             }
             // 關閉連接
            zk.close();
}
}






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