zookeeper伪分布式集群安装

来源:互联网 发布:祁东农村淘宝招募电话 编辑:程序博客网 时间:2024/05/22 06:53

所谓 “伪分布式集群” 就是在,在一台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();
}
}






0 0
原创粉丝点击