zookeeper

zookeeper简介
  1、曾经是Hadoop子项目,现为顶级项目
  2、是分布式应用程序协同服务
    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。     
3、为分布式应用提供一致性服务
    它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。   
4、支持Java和C的接口

ZooKeeper的目标
  就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

 

 

# ntpdate -s ntp1.aliyun.com

# cat /etc/hosts
192.168.0.83 node83  作为zclient
192.168.0.84 node84
192.168.0.85 node85
192.168.0.86 node86


统一部署java环境
# rpm -ivh jdk-8u111-linux-x64.rpm
# vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest/
export PATH=$JAVA_HOME:$PATH
# . /etc/profile.d/java.sh

#ls /home/tools

zookeeper-3.4.10.tar.gz
# tar -xf zookeeper-3.4.10.tar.gz -C /usr/local
# vi /etc/profile.d/zookeeper.sh
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
export PATH=$ZOOKEEPER_HOME/bin:$PATH
# . /etc/profile.d/zookeeper.sh
# cd /usr/local/zookeeper-3.4.10/conf/
# cp zoo_sample.cfg zoo.cfg

# vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000  心跳周期2000毫秒
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper  数据目录
# the port at which the clients will connect
clientPort=2181  客户端连接端口
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
server.1=node84:2888:3888
server.2=node85:2888:3888
server.3=node86:2888:3888

node84 node85 node86
# mkdir -p /data/zookeeper
# echo 1 >>/data/zookeeper/myid
# mkdir -p /data/zookeeper
# echo 2 >>/data/zookeeper/myid
# mkdir -p /data/zookeeper
# echo 3 >>/data/zookeeper/myid
# cat /etc/profile.d/zookeeper.sh
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
export PATH=$ZOOKEEPER_HOME/bin:$PATH
# . /etc/profile.d/zookeeper.sh








zookeeper集群模式配置(故障算法2n+1,即集群个数为奇数,集群生效条件为大于半数zkserver ok
server.n=hostname:port1:port2
     
#n必须是myid中的指定值,dataDir=/data/zookeeper下创建的myid文件指定

     #port1  leader端口,作为leader时,供follower连接的端口
     #port2  选举端口,选举leader时供其它fllower连接的端口
  
server.1=s1:2888:3888

  server.2=s2:2888:3888
  server.3=s3:2888:3888
zookeeper伪分布集群模式
zoo1.cnf zoo2.cnf zoo3.cnf
dataDir=/data/zookeeper/data1
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
dataDir=/data/zookeeper/data2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
dataDir=/data/zookeeper/data2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889







node84 node85 node86
[root@node84 local]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node84 local]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
[root@node84 local]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@node84 local]# jps
2130 QuorumPeerMain
2211 Jps
# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
# jps
2177 Jps
2118 QuorumPeerMain
[root@node86 tools]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node86 tools]# jps
26834 QuorumPeerMain
26859 Jps
[root@node84 local]# ls /data/zookeeper/
myid  version-2  zookeeper_server.pid
   






 

nc命令使用
[root@node84 ~]# nc -l 1234  启动监听
[root@node85 ~]# nc node84 1234  连接
==>可以实现字符聊天

文件传送
[root@node84 ~]# nc -l 1234 > nctest  启动监听,准备接受内容写入到nctest
[root@node85 ~]# nc node84 1234 </etc/hosts  发送host文件内容

端口扫描
[root@node84 ~]# nc 192.168.0.85 -z 15-22 -v -w 10
  -z 端口扫描 + 范围
  -w 超时时间
  -v 详细输出
nc: connect to 192.168.0.85 port 15 (tcp) failed: Connection refused
nc: connect to 192.168.0.85 port 16 (tcp) failed: Connection refused
nc: connect to 192.168.0.85 port 17 (tcp) failed: Connection refused
nc: connect to 192.168.0.85 port 18 (tcp) failed: Connection refused
nc: connect to 192.168.0.85 port 19 (tcp) failed: Connection refused
nc: connect to 192.168.0.85 port 20 (tcp) failed: Connection refused
nc: connect to 192.168.0.85 port 21 (tcp) failed: Connection refused
Connection to 192.168.0.85 22 port [tcp/ssh] succeeded!

[root@node84 ~]# nc 192.168.0.85 -z 2000-4000
Connection to 192.168.0.85 2181 port [tcp/eforward] succeeded!
Connection to 192.168.0.85 2888 port [tcp/spcsdlobby] succeeded!
Connection to 192.168.0.85 3888 port [tcp/ciphire-serv] succeeded!

 

[root@node83 ~]# echo conf | nc node84 2181  获取配置信息(也可以# nc node84 2181后输入)
clientPort=2181
dataDir=/data/zookeeper/version-2
dataLogDir=/data/zookeeper/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0

[root@node83 ~]# echo ruok | nc node84 2181
imok

[root@node83 ~]# echo envi | nc node84 2181  获取环境信息
//其他
    cons  连接信息
    dump  未处理会话节点
    reqs  未处理请求
    stat  统计信息
    wchs  服务watch的详细信息
    wchp  列出指定路径下的服务器信息


 

[root@node83 ~]# zkCli.sh -server node84:2181
..........
..........
..........
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: node84:2181(CONNECTED) 0] 等待输入

[zk: node84:2181(CONNECTED) 0] h  输入h获取帮助
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit
        getAcl path
        close
        connect host:port

[zk: node84:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: node84:2181(CONNECTED) 1] ls /zookeeper
[quota]
[zk: node84:2181(CONNECTED) 2]

[zk: node84:2181(CONNECTED) 3] create /dirtest1 hello   
Created /dirtest1
[zk: node84:2181(CONNECTED) 4] ls /
[zookeeper, dirtest1]
[zk: node84:2181(CONNECTED) 6] ls /dirtest1
[]
[zk: node84:2181(CONNECTED) 7] get /dirtest1
hello
cZxid = 0x100000004
ctime = Tue Jun 06 02:25:18 CST 2017
mZxid = 0x100000004
mtime = Tue Jun 06 02:25:18 CST 2017
pZxid = 0x100000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

[zk: node84:2181(CONNECTED) 8] set /dirtest1 helloworld
cZxid = 0x100000004
ctime = Tue Jun 06 02:25:18 CST 2017
mZxid = 0x100000005
mtime = Tue Jun 06 02:27:53 CST 2017
pZxid = 0x100000004
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0

[zk: node84:2181(CONNECTED) 9] create /dirtest1/secdir shanhgai  只能一层层创建
Created /dirtest1/secdir
[zk: node84:2181(CONNECTED) 10] ls /dirtest1
[secdir]
[zk: node84:2181(CONNECTED) 11] get /dirtest1/secdir
shanhgai
cZxid = 0x100000006
ctime = Tue Jun 06 02:29:32 CST 2017
mZxid = 0x100000006
mtime = Tue Jun 06 02:29:32 CST 2017
pZxid = 0x100000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

 

 

 

Simple API
One of the design goals of ZooKeeper is provide a very simple programming interface. As a result, it supports only these operations:

create 
  creates a node at a location in the tree
delete 
  deletes a node
exists 
  tests if a node exists at a location
get data 
  reads the data from a node
set data 
  writes data to a node
get children 
  retrieves a list of children of a node
sync 
  waits for data to be propagated

 

 

posted @ 2019-09-15 14:39  黑色月牙  阅读(336)  评论(0)    收藏  举报