zookeeper之安装

版权声明:本文是作者在学习与工作中的总结与笔记,如有内容是您的原创,请评论留下链接地址,我会在文章开头声明。 https://blog.csdn.net/usagoole/article/details/82944170

Zookeeper

介绍

  1. ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护命名服务分布式同步组服务等。

  2. Zookeeper的核心是一个精简的文件系统,它提供一些简单的操作和一些额外的抽象操作,例如排序和通知。

  3. 理解Zookeeper的一种方法就是将其看作一个具有高可用性的文件系统,但这个文件系统中没有文件和目录,而是统一使用"节点"的概念,称为znode

  4. 分布式系统中的进程通信有两种选择:直接通过网络进行信息交换或读写某些共享存储,Zookeeper使用共享存储模型来实现应用间的协作和同步原语,对于共享存储本身,又需要在进程和存储间进行网络通信。

安装

单击安装

  1. 安装JDK6或者以上版本

  2. 安装Zookeeper

        $ tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/
        $ cd /usr/local/zookeeper-3.4.6/
        复制一份配置文件,Zookeeper默认会找名称为zoo.cfg的文件
        $ cp zoo_sample.cfg zoo.cfg 
    
  3. 配置详解

    • tickTime:这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。
    • dataDir:数据目录,可以是任意目录
    • dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
    • clientPort: 监听client连接的端口号.clientPort=2181
  4. 修改日志输出,默认Zookeeper的日志输出信息都打印到了zookeeper.out文件中,这样输出路径和大小没法控制。

    • 修改bin/zkEnv.sh文件
      zkEnv
    • 修改conf/log4j.properties
      log4j.properties
  5. 启动

    扫描二维码关注公众号,回复: 3717709 查看本文章
        $ cd  /usr/local/zookeeper-3.4.6/bin
        $ ./zkServer.sh start
    
  6. 客户端连接

        $ cd  /usr/local/zookeeper-3.4.6/bin
        $ ./zkCli.sh -server localhost:2181
    

集群安装

  1. 为了获得可靠的ZooKeeper服务,用户应该在一个集群上部署ZooKeeper。只要集群上大多数(过半)的ZooKeeper服务启动了,那么总的ZooKeeper服务将是可用的。另外,最好使用奇数台机器(仅仅是建议并非强制)。如果ZooKeeper拥有5台机器,那么它就能处理2台机器的故障了,2n+1=总数,n即为可容纳的故障节点

  2. 在服务器的data目录(dataDir参数所指定的目录)下创建一个名称为myid的文件,这个文件仅仅只有一行的内容(1-255之间的数字),指定的是自身的id(集群中所有节点的id都不一样)

  3. 集群环境准备,实际ip可以使用内网域名代替

    节点 ip地址 myid
    master 192.168.3.245 1
    slave1 192.168.3.243 2
    slav2 192.168.3.242 3
  4. server.id=host:port:port, server.id指示不同的Zookeeper服务器的自身标识,第一个port用于集群成员的信息交换,第二port是在当leader挂掉时用来进行选举leader的

  5. master节点配置文件(zoo.cfg)内容

        tickTime=2000
        initLimit=10
        syncLimit=5
        dataDir=/usr/local/zookeeper-3.4.6/data
        clientPort=2181
        server.1=192.168.3.245:2888:3888
        server.2=192.168.3.243:2888:3888
        server.3=192.168.3.242:2888:3888
    
  6. slave1节点配置文件(zoo.cfg)内容

        tickTime=2000
        initLimit=10
        syncLimit=5
        dataDir=/usr/local/zookeeper-3.4.6/data
        clientPort=2181
        server.1=192.168.3.245:2888:3888
        server.2=192.168.3.243:2888:3888
        server.3=192.168.3.242:2888:3888
    
  7. slave2节点配置文件(zoo.cfg)内容

        tickTime=2000
        initLimit=10
        syncLimit=5
        dataDir=/usr/local/zookeeper-3.4.6/data
        clientPort=2181
        server.1=192.168.3.245:2888:3888
        server.2=192.168.3.243:2888:3888
        server.3=192.168.3.242:2888:3888
    
  8. 启动,每个节点都执行启动脚本

        $ cd  /usr/local/zookeeper-3.4.6/bin
        $ ./zkServer.sh start
        如果指定配置文件
        $ ./zkServer.sh start ../conf/zoo.cfg
        启动后查看状态,会显示Mode:leader或者follower
        $ ./zkServer.sh status ../conf/zoo.cfg
    
  9. 启动过程日志会出现如下错误日志,这个不需要管它,等所有节点都启动完成就不会有错误输出了

        2015-11-22 23:36:14,814 [myid:1] - WARN  [WorkerSender[myid=0]:QuorumCnxManager@588] - Cannot open channel to 2 at election address /192.168.3.245:3888
        java.net.ConnectException: Connection refused
                at java.net.PlainSocketImpl.socketConnect(Native Method)
                at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
                at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
                at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
                at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
                at java.net.Socket.connect(Socket.java:589)
                at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562)
                at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:538)
                at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:452)
                at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:433)
                at java.lang.Thread.run(Thread.java:745)
        
    

开发环境docker部署

  1. 开发环境基于docker部署

        $ docker pull wurstmeister/zookeeper:3.4.6
        $ docker run -itd -p 2181:2181 -name zookeeper wurstmeister/zookeeper
    

客户端命令

  1. 连接服务器,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。

        ./zkCli.sh –server 127.0.0.1:2181
    
  2. 创建文件create [-s] [-e] $path $value,-s-e指定节点特性,顺序或者临时节点。创建一个新的znode节点/user关联的字符串值为jannal

        [zk: 127.0.0.1:2181(CONNECTED) 1] create /user "jannal"
        Created /user
    
  3. 获取节点get $path

        [zk: 127.0.0.1:2181(CONNECTED) 2] get /user
        'jannal'
        ... 省略剩余输出
    
  4. 修改节点set $path $value

        [zk: 127.0.0.1:2181(CONNECTED) 3] set /user 'jannal2'
    
    
  5. 删除节点delete $path

  6. 显示节点下的包含的内容

        [zk: 127.0.0.1:2181(CONNECTED) 26] ls /user
        [username, password]
    
  7. 帮助命令

        [zk: 127.0.0.1:2181(CONNECTED) 27] help
        ZooKeeper -server host:port cmd args
        	connect host:port
        	get path [watch]
        	ls path [watch]
        	set path data [version]
        	rmr path
        	delquota [-n|-b] path
        	quit
        	printwatches on|off
        	create [-s] [-e] path data acl
        	stat path [watch]
        	close
        	ls2 path [watch]
        	history
        	listquota path
        	setAcl path acl
        	getAcl path
        	sync path
        	redo cmdno
        	addauth scheme auth
        	delete path [version]
        	setquota -n|-b val path
    
  8. 退出客户端:quit

  9. 四字查询命令:ZooKeeper支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper服务的当前状态及相关信息。用户在客户端可以通过telnetncZooKeeper提交相应的命令。提前安装nc

        1. 可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
        2. 使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
        3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
        4. echo kill | nc 127.0.0.1 2181 ,关掉server
        5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
        6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
        7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
        8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
        9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
        10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
        11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。
    
  10. 使用telnet

        mac:~ jannal$ telnet 127.0.0.1 2181
        Trying 127.0.0.1...
        Connected to localhost.
        Escape character is '^]'.
        ## 使用stat进行服务器启动验证
        stat
        Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
        Clients:
         /172.17.0.1:56602[1](queued=0,recved=38,sent=38)
         /172.17.0.1:56608[0](queued=0,recved=1,sent=0)
        
        Latency min/avg/max: 0/0/21
        Received: 3390
        Sent: 3389
        Connections: 2
        Outstanding: 0
        Zxid: 0x51
        Mode: standalone
        Node count: 7
        Connection closed by foreign host.
    

猜你喜欢

转载自blog.csdn.net/usagoole/article/details/82944170
今日推荐