zookeeper集群安装与配置

jopen 9年前

    1、解压zookeeper

    2、在$ZOOKEEPER_HOME/conf下创建zoo.cfg文件(参考配置文件:zoo_sample.cfg),内容为:

# CS通信心跳时间,Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位  tickTime=2000    # LF初始化通信时限,集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)  initLimit=10    # LF同步通信时限,集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。  syncLimit=5    #数据文件目录,Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。  dataDir=/root/app/zookeeper/data    #客户端连接端口,客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。  clientPort=2181    #服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)  #这个配置项的书写格式比较特殊,规则如下:  #server.N=YYY:A:B   server.1=hadoop.master:2888:3888  server.2=hadoop.slave:2888:3888  #端口  #2181:用于客户端的连接  #2888:follower与leader通信  #3888:leader选举端口

    3、根据zoo.cfg在dataDir配置的路径下创建myid文件,且输入server.N的N内容(例如:当前机器是server.1,那么在    myid中输入1)

    4、复制配置完毕的zookeepr到其他节点

scp -r $ZOOKEEPER_HOME root@hostname:/home

    5、复制完毕之后记得修改myid

    6、在各个节点上分别启动脚本:

$ZOOKEEPER_HOME/bin/zkServer.sh start

    7、检查命令

7.1、#zkServer.sh status  //如果出现Error contacting service. It is probably not running.错误,是因为节点只启动了一个,无法启动集群模式  7.2、#echo ruok | nc localhost 2181  //如果命令成功会返回imok(I'm ok)

    8、zk客户端

$ZOOKEEPER_HOME/bin/zkCli.sh -server hostname:2181  //启动一个zk客户端  //最终要记住一个help命令即可掌握其他命令的用法  (操作之前需要了解类似文件系统的znode,      简单描述:zk中所有节点都是znode节点,znode节点不仅可以作为目录还可以存储数据.)  CREATE 创建znode  SET 设置znode的数据  GET 查询znode  RMR 删除znode  ...等等自行查询

    9、Java客户端

    相关代码:

import org.apache.zookeeper.CreateMode;  import org.apache.zookeeper.WatchedEvent;  import org.apache.zookeeper.Watcher;  import org.apache.zookeeper.ZooDefs.Ids;  import org.apache.zookeeper.ZooKeeper;  public class ZKClient {      // 连接地址      private final static String CONN = "192.168.1.200:2181";      // client与zk超时时间(unit:ms)      private final static int SESSION_TIMEOUT = 5000;        public static void main(String[] args) throws Exception {            //1、持久节点:创建的节点成功时,节点便会持久化在zk上          //2、临时节点:创建节点过程中一旦发生有意或无意的客户端超时或者关闭,节点都被删除          ZooKeeper zk = new ZooKeeper(CONN, SESSION_TIMEOUT, new Watcher() {              @Override              public void process(WatchedEvent event) {                  //接收zk各个时间通知                  System.out.println("------------------------");                  System.out.println("Path:"+event.getPath());                  System.out.println("type:"+event.getType());                  System.out.println("state"+event.getState());                  System.out.println("wrapper:"+event.getWrapper());                  System.out.println("------------------------");              }          });          String path = "/hello";          byte[] data = "testhello!".getBytes();          zk.create(path,data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);          zk.close();      }  }