AmosCloud

Library

Have a Question?

If you have any question you can ask below or enter what you are looking for!

zookeeper

zookeeper

是什么

  • zookeeper是一个开源的分布式集群协调服务

  • 应用场景

    1. 实现HA(高可用)分布式架构的主备切换管理
      例如实现HDFS的高可用

    2. 管理配置文件
      zk实现了观察者模式和回调机制,任何监听zk数据的客户端,都可以实时的获取数据改动的事件
      通常用于大规模集群的配置统一管理

    3. 分布式锁
      多线程程序在访问一个资源时,可以使用编程语言中提供的同步机制实现线程的同步,但是如果多个应用程序运行在多个机器上,编程语言无法实现跨机器的线程同步
      zk提供了一类节点(znode),每次创建都会被分配一个单调递增的序号,将来来自多台机器的多个线程,每个线程使用自己的编号与其他线程进行对比,始终保持最小编号线程占用资源

安装zookeeper

  1. 准备3台机器
  2. 设置主机名
  3. 添加ip和主机名映射
  4. ssh免密
  5. 安装JDK

单机运行模式

集群模式搭建

  • 关于版本
  1. 下载解压
  2. 修改配置文件

    zoo.cfg

# 修改zk保存数据使用的路径
dataDir=/opt/zookeeper-3.4.14/data
# server.A=B:C:D
# A id  集群中每个zk服务,需要设置一个全局唯一的整数作为id号
# B  id对应的服务的主机名
# C 集群通信的端口 数据同步
# D 集群通信的端口 选举投票

server.91=bd0901:2888:3888
server.92=bd0902:2888:3888
server.93=bd0903:2888:3888
  1. 分发

    • 为每台机器分别设置myid
    • 在dataDir目录中创建一个文件名为myid,文件内写上当前机器的id
  2. 添加环境变量

echo 'export ZK_HOME=/opt/zookeeper-3.4.14' >> /etc/profile
echo 'export PATH=$ZK_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
  1. 启动
# 启动服务
zkServer.sh start
# 查看状态
zkServer.sh status
# 关闭服务
zkServer.sh stop

zookeeper操作

zk命令行操作

# 使用命令行工具连接到zk服务器集群
# 默认使用localhost:2181连接
zkCli.sh [-server host:port]
# 查看znode列表
ls path
# 创建znode
create [-s] [-e] path data
# 查看znode数据
get path
# 更新znode数据
set path
# 删除znode
rmr path
# 退出zkCli
quit

zk可视化工具

  • zooinspector

zk核心原理

zk的选举机制

  • 半数以上选id最大作为leader
  • 当leader宕机后,会根据通信先后顺序重新选举leader

zk znode分类

file