zookeeper分布式系统中面临的很多问题, 如分布式锁,统一的命名服务,配置中心,集群的管理Leader的选举等

环境准备

分布式系统中各个节点之间通信,Zookeeper保证了这个过程中 数据的唯一性,安全可靠

官网下载地址

  • 修改配置文件

将/conf/zoo_sample.cfg 修改成 zoo.cfg

配置文件解读

# zookeeper  服务器和客户端之间维持心跳的时间间隔,即每隔ticktime发送一个心跳包,单位是毫秒
# zookeeper 中session过期的时间是 ticktime*2
tickTime=2000
# Leader 允许Follower在initLimit时间内完成从Leader身上同步全部数据的工作, 随机集群的不断扩大,Follower从Leader上同步数据的时间就会变成,此时有必要,默认是0
initLimit=10
# Leader会和集群中的其他机器进行通信,在syncLimit时间内,都没有从Follower上获取返回数据,就认为这个节点挂了
syncLimit=5
# 存储快照文件的目录,默认情况下事务日志也在这里了,下面单独配置,因为因为日志的写性能影响zookeeper的性能
dataDir=E:\\zookeeper\\zookeeper-3.4.14\\data dataLogDir=E:\\zookeeper\\zookeeper-3.4.14\\log
# 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
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
  • 启动

启动的脚本在 /bin/目录下

linux启动 ./zkCli.sh -server localhost:2181


启动成功,进入客户端控制台

 # 默认的节点叫zookeeper
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
# 创建一个节点
[zk: localhost:2181(CONNECTED) 11] create /changwu1 "num1"
Created /changwu1
# 重新查看
[zk: localhost:2181(CONNECTED) 14] ls /
[zookeeper, changwu1]
# 获取节点的内容
[zk: localhost:2181(CONNECTED) 17] get /changwu1
num1
cZxid = 0x2
ctime = Mon Sep 16 15:56:27 CST 2019
mZxid = 0x2
mtime = Mon Sep 16 15:56:27 CST 2019
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0 # 退出
quit # 删除一个节点
[zk: localhost:2181(CONNECTED) 32] delete /changwu1
[zk: localhost:2181(CONNECTED) 33] ls /
[zookeeper] # 递归删除节点
rmr /path1/path2
这个path1 和 path2 其实是两个节点
# 修改节点数据
set /path "value" # 节点的状态
[zk: localhost:2181(CONNECTED) 50] stat /z1
cZxid = 0x5
ctime = Mon Sep 16 16:04:35 CST 2019
mZxid = 0x7
mtime = Mon Sep 16 16:06:31 CST 2019
pZxid = 0x6
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 1 # 创建永久有序节点
create -s /path

创建节点的形式,和我们mkdir,创建一个目录结构是相似的


集群搭建

  • 将zoo.cfg复制三份,并修改配置文件

第二个端口2887,用来同步Leader 和 Follower之间的数据, 第三个端口选举新的Leader使用

  • 在tmp目录创建六个目录 分别是 zoo_data_1-3 zoo_logs_1-3
  • 创建myid文件
[root@139 tmp]# echo 1 > zoo_data_1/myid
[root@139 tmp]# echo 2 > zoo_data_2/myid
[root@139 tmp]# echo 3 > zoo_data_3/myid

启动集群服务端

[root@139 bin]# ./zkServer.sh start ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Starting zookeeper ... STARTED
[root@139 bin]# ./zkServer.sh start ../conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo2.cfg
Starting zookeeper ... STARTED
[root@139 bin]# ./zkServer.sh start ../conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo3.cfg
Starting zookeeper ... STARTED

分别查看各个节点的状态

[root@139 bin]# ./zkServer.sh status ../conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo3.cfg
Mode: follower [root@139 bin]# ./zkServer.sh status ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Mode: leader [root@139 bin]# ./zkServer.sh status ../conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo2.cfg
Mode: follower

连接客户端

./zkCli -server localhost:服务端的端口号

zkCli.sh -server localhost:2181
zkCli.sh -server localhost:2182
zkCli.sh -server localhost:2183

添加观察者

  1. 和前三个一样,在tmp目录创建哨兵使用的目录 分别是 zoo_data_4 zoo_logs_4
  2. 在zoo_data_4目录下创建它myid文件,写入4
  3. 更改前三个节点的配置文件
tickTime=2000
initLimit=10
syncLimit=5 dataDir=/tmp/zoo_data_1
dataLogDir=/tmp/zoo_logs_1 clientPort=2181 # 第一个端用于Leader和Leanner之间同步, 第二个端口,用户选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer
  1. 添加观察者的配置文件
tickTime=2000
initLimit=10
syncLimit=5 dataDir=/tmp/zoo_data_4
dataLogDir=/tmp/zoo_logs_4 # 观察者的配置
peerType=observer clientPort=2184 # 第一个端用于Leader和Leanner之间同步, 第二个端口,用户选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer

集群中的角色

Leader

发起投票和决议,已经更新最终状态

Follower

接收处理客户端的请求,参与Leader发起的决议

Observer

接受客户端的连接,将请求转发给Leader字节,但是它不参加投票,而仅仅同步Leader的状态,它是zookeeper拓展的方式

为什么会添加Observer呢? 这和zookeeper的工作方式息息相关:

一个zookeeper集群由多个Server组成,每一个Server都可以去处理多个client的请求, 如果是读请求,用当前的Server的本地数据库分本直接相应,但是,如果请求是改变zookeeper状态的写请求,就变得麻烦起来, zookeeper的leader节点会发起投票这个机制就是zab协议,超过半数的节点同意时,才会把这个操作加载到内存中,并对client进行回复

在这个过程中,zookeeper担任两个职能,一方面接受客户端的连接,另一方面又得去发起投票决议, 这两个功能限制了zookeeper的扩展想支持更多的客户端连接,就得添加server,但是server越来越多每次发起投票就变的沉重,于是Observer应运而生

Observer,不会参加投票,在其他节点处于投票阶段时,Observer接收client的连接,把连接转发的leader,而且,它还会收到投票的处理结果,保证自己和其他机器是数据一致性,从而大大提高系统的吞吐量

Learner

和Leader一起同步状态的节点的统称,Observer和Follower统称为Learner

Zookeeper的CPA

CP: 当集群中的节点仅仅剩下Leader Follower时, Leader挂了,就得重新选举,选举的过程中系统不可用

AP: Leader Follower Observer ,这三者组成的就群,实现了AP, 当Leader挂了,同样进行选举, 但是Observer可以继续接受client的请求,只不过Observer中的数据可能不是最新的数据

zookeeper 单机. 集群环境搭建的更多相关文章

  1. ZooKeeper伪集群环境搭建

    1.从官网下载程序包. 2.解压. [dev@localhost software]$ tar xzvf zookeeper-3.4.6.tar.gz 3.进入zookeeper文件夹后创建data文 ...

  2. 【Zookeeper】集群环境搭建

    一.概述 1.1 Zookeeper的角色 1.2 Zookeeper的读写机制 1.3 Zookeeper的保证 1.4 Zookeeper节点数据操作流程 二.Zookeeper 集群环境搭建 2 ...

  3. Zookeeper的单机&集群环境搭建

    单机环境的安装 首先下载ZK的二进制安装包:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/ 将安装包上传到Linux上: 进行解 ...

  4. Hadoop+HBase+ZooKeeper分布式集群环境搭建

    一.环境说明 集群环境至少需要3个节点(也就是3台服务器设备):1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面举例说明,配置节点IP分配如下: Hostname IP ...

  5. zookeeper集群环境搭建详细图文教程

    zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装z ...

  6. 【Hadoop离线基础总结】zookeeper的介绍以及集群环境搭建、网络编程和RPC的简单了解

    ZooKeeper的介绍以及集群环境搭建.网络编程和RPC的简单了解 ZooKeeper介绍 概述 ZooKeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题.例如 ...

  7. ZooKeeper 系列(二)—— Zookeeper单机环境和集群环境搭建

    一.单机环境搭建         1.1 下载         1.2 解压         1.3 配置环境变量         1.4 修改配置         1.5 启动         1. ...

  8. ZooKeeper —— 单机环境和集群环境搭建

    一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...

  9. ZooKeeper学习之路(二)—— Zookeeper单机环境和集群环境搭建

    一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...

随机推荐

  1. Kotlin的特性

    time streams try-with-resources 函数扩展,给types.classes或者interfaces新增方法 null safe 不需要new,后缀声明类型 自动转换有get ...

  2. Spark 系列(八)—— Spark SQL 之 DataFrame 和 Dataset

    一.Spark SQL简介 Spark SQL 是 Spark 中的一个子模块,主要用于操作结构化数据.它具有以下特点: 能够将 SQL 查询与 Spark 程序无缝混合,允许您使用 SQL 或 Da ...

  3. 使用windows powershell ISE管理命令窗口,并集成git命令

    写于2018-09-03(基于win10) 开启 win + s 输入 ise 操作 主要使用新建的power shell选项卡 将git集成到power shell中 安装准备 确定你的power ...

  4. 分析android studio的项目结构

    以最简单的工程为例子,工程名为随意乱打的Exp5,新建好工程后将项目结构模式换成android: 1.manifests AndroidManifest.xml:APP的配置信息 <?xml v ...

  5. Mysql超详解

    Mysql超详解 一.命令框基本操作及连接Mysql 找到Mysql安装路径,查看版本 同时按快捷键win+R会弹出一个框,在框中输入cmd 点击确定后会出现一个黑框,这是命令框,我们的操作要在这命令 ...

  6. 浅谈python中文件和文件夹的相关操作

    文件操作 文件的打开与关闭 打开文件 使用open(文件名,访问方式)函数,可以打开一个已存在的文件,或者创建一个新的文件. 示例如下: f = open('test.txt') # 访问方式可以省略 ...

  7. LoRa硬件调试-前导码

    前言 已知LoRa数据包在负载之前会有一段前导码,接收端是先检测前导码,收到前导码之后才认为有数据发送过来. 那么不同的前导码的长度会有什么影响呢? 前导码长短的优劣势 - 前导码实际上是占符号的,也 ...

  8. mysql------explain工具

    基于mysql5.7,innodb存储引擎 使用explain关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL ...

  9. maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...

    项目结构是一个父项目,多个子项目目录: 例如: common --------------(父项目) fristDemo    ------------(子项目) 如果在子项目中调用了父项目,而对(子 ...

  10. 使用Makefile构建Docker

    使用Makefile构建Docker 刚开始学习docker命令的时候,很喜欢一个字一个字敲,因为这样会记住命令.后来熟悉了之后,每次想要做一些操作的时候就不得不 重复的输入以前的命令.当切换一个项目 ...