ZKEssentials读书笔记(一) - 18965050/ZookeeperEssentials GitHub Wiki

定义分布式系统(distribute system)

一个分布式系统应该具有的几个特性:

  • 资源共享
  • 扩展性
  • 并发操作
  • 性能和可测性
  • 容灾
  • 接口抽象

ZooKeeper

什么是ZooKeeper

Apache ZooKeeper is an effort to develop a highly scalable, reliable, and robust centralized service to implement coordination in distributed systems that developers can straightaway use in their applications through a very simple interface to a centralized coordination service.

Apache Zookeeper是一个高可扩展的,可靠的,健壮的分布式协调处理器.开发者可直接使用简单的接口来使用这些应用

Zookeeper可做什么

  • 配置管理(Configuration Management)
  • 名称服务(Name Service)
  • 分布式同步,比如锁(Lock),屏障(Barrier)
  • 集群成员操作.比如节点存活检测/成员节点加入

配置,运行ZooKeeper

Standalone配置方式

  • 由于zookeeper由Java开发,运行JVM. 确认JDK安装,并配置$JAVA_HOME环境变量 panel
  • 下载zookeeper 运行包(目前我使用的是zookeeper-3.4.5.tar.gz), 并解压
  • 配置$ZK_HOME环境变量, 并将$ZK_HOME/bin 目录添加到$PATH环境变量中 panel
  • 进入$ZK_HOME/conf 目录下, 创建zoo.cfg配置文件(可重命名zoo_sample.cfg为zoo.cfg),并修改如下配置项:
    • tickTime: 用于client端心跳检测的会话超时.单位:ms. 最小的会话超时是tickTime的2倍
    • dataDir: 数据存储目录.包括数据库快照(snapshot)和数据库更新的事务(transaction)日志.注意: 如果目录不存在, 需要预先创建
    • clientPort: client连接端口号
  • 运行$ZK_HOME/bin/zkServer.sh start, 启动zookeeper server panel
  • 执行$ZK_HOME/bin/zkServer.sh status, 查看状态 panel
  • 运行$ZK_HOME/bin/zkServer.sh stop, 停止zookeeper server panel
  • 执行$ZK_HOME/bin/zkServer.sh status, 查看状态 panel

Client连接及操作

  • 通过${ZK_HOME}/bin/zkCli.sh –server zk_server:port连接zk server(也可以直接运行${ZK_HOME}/bin/zkCli.sh连接默认配置) zkcli-connect
  • 命令运行 zkcli-oper

MultiNode Cluster配置方式

  • 前面配置同Standalone的配置

  • zoo.cfg添加如下配置:

    • syncLimit:follower同步leader的超时时长. 单位: tickTime个数
    • server.[x]=[hostname]:[syncPort]:[electPort]: x表示server对应的编号.要求在dataDir 目录下创建一个myid文件, 里面放置对应的x编号. hostname为对应的域名, 需要在hosts文件中配置. 第一个端口(syncPort)为follower节点和leader节点通信的端口,第二个端口(electPort)为leader选举时用的端口

    multinode-config

  • dataDir 目录下创建myid文件, 里面填入配置的[x]的数字

  • /etc/hosts中添加相应的域名配置:

    host-config

  • 启动不同节点的server, 可看到如下不同的信息: multinode-server-leader

    multinode-server-follower

  • client运行zkCli.sh -server server21:2181,server25:2181,server26:2181 multinode-client-connect

⚠️ **GitHub.com Fallback** ⚠️