Zookeeper学习1:概述、安装、应用场景、集群配置

文章目录

概述

Zookeeper: 为分布式框架组件提供协调服务的中间件 == 【类似:文件系统+通知机制】== 负责存储上下层应用关系的数据以及接收观察者注册监听,一旦观察查关心的数据发生变化,则Zookeeper会将数据变化推送给观察者

官网: https://zookeeper.apache.org/

组成: Zookeeper由一个领导者(Leader),多个跟随者(Follower)组成的集群 == 半数以上的节点存活,集群才能正常工作,并且建议安装奇数台服务器集群

全局数据一致: 每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

实时性: 客户端A更新信息到服务端A,则客户端B能在一定很快的时间范围内也同步回最新服务端A数据

Zookeeper内部数据结构: 树结构,每个节点最多存储1MB,并且每个数据节点有节点唯一标识进行识别区分

Zookeeper集群同步逻辑: 客户端向ZooKeeper集群发送写请求时,请求 首先会发送给Leader节点 ,Leader节点会将该请求广播给所有Follower节点,只有当大多数节点(包括Leader节点)都写入成功后,写操作才会被确认为成功(并通知客户端,客户端收到写入成功响应无需等待集群中所有机器都写入成功,只需过半机器写入成功即可,后续慢慢会执行同步,最终达到zxid一致) ,从而保证数据的一致性
身份证 修改数据的次数 投票的轮数 专有名词 SID:每个zookeeper的唯一标识,则dataDir下面的myid里面的值 ZXID:事务ID、标识依次服务器状态的变更 == 最终Zookeeper集群中ZXID会保持一致 Epoch:每个Leader的任期代号 == Zookeeper机器每完成一次投票则+1

java 复制代码
//奇数台解释,以及半数以上人同意才可进行一致性读写操作
举个通俗易懂的例子,就好比开会需要做决定,
如果有5个人参与讨论,只要有3个人同意,就可以做出决定。
但如果只有4个人参与讨论,那么如果有2个人持不同意见,就无法做出决定
因此,为了确保能够做出决定,最好让参与讨论的人数为奇数。这样就能够确保在发生分歧时,仍然能够做出决定。

架构图

Zookeeper内部数据结构

1个 多个 Zookeeper集群 领导者 跟随者
Zookeeper应用场景 统一命名服务 统一配置管理 统一集群管理 服务器节点动态上下线 软负载均衡

安装

Linux

下载地址: https://archive.apache.org/dist/zookeeper/

java 复制代码
//解压
mkdir /opt/module/ && tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /opt/module && cd /opt/module/



//修改目录名
mv apache-zookeeper-3.9.1-bin  zookeeper-3.9.1

//创建zookeeper数据目录
cd zookeeper-3.9.1 && mkdir zkData


//修改配置文件 == 数据目录改为zkData
cp conf/zoo_sample.cfg conf/zoo.cfg 
sed -i '/^dataDir=/c\dataDir=/opt/module/zookeeper-3.9.1/zkData' conf/zoo.cfg


//查看配置文件
more conf/zoo.cfg

//==============服务端======================
//启动zookeeper服务端 == 注意确保2181、39306、8080 这三个端口不会被占用,否则启动失败
// zookeeper服务端启动
cd /opt/module/zookeeper-3.9.1/bin && sh zkServer.sh start
// zookeeper服务端状态查看
cd /opt/module/zookeeper-3.9.1 && sh bin/zkServer.sh status
// zookeeper服务端状态停止
cd /opt/module/zookeeper-3.9.1 && sh bin/zkServer.sh stop




//查看zookeeper服务端是否启动成功 == 出现QuorumPeerMain说明启动成功
jps -l

//查看zookeeper服务端占用的端口号
netstat -anlp |grep $(jps -l | grep QuorumPeerMain |  awk '{print $1}') | grep tcp


//==============客户端======================
cd /opt/module/zookeeper-3.9.1 && sh bin/zkCli.sh 


//查看zookeeper客户端占用的端口号
netstat -anlp |grep $(jps -l | grep ZooKeeperMain | awk '{print $1}') | grep tcp

服务端相关

客户端相关

Windows

配置参数

配置文件路径: /opt/module/zookeeper-3.9.1/conf/zoo.cfg

java 复制代码
//tickTime
默认2000
通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒

//initLimit
默认10
【建立连接】
Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
LF初始通信时限(tickTime * initLimit时间范围内未通信成功,则认为失败)、zookeeper集群Leader与Follower的通信时限

//syncLimit
默认5
【建立连接之后的通信】
Leader和Follower.之间通信时间如果超过syncLimit*tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。

//dataDir
保存Zookeeper中的数据

//clientPort
客户端连接端口,通常不做修改。

集群

参考配置文件

properties 复制代码
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/opt/module/zookeeper-3.9.1/zkData
# 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.
#
# https://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

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

# 集群配置
server.107=192.168.19.107:2888:3888
server.108=192.168.19.108:2888:3888
server.109=192.168.19.109:2888:3888

配置步骤流程

测试: 准备三台虚拟机107、108、109

java 复制代码
//===========================
// 在107里面运行下面的命令

//集群必须中每台zookeeper必须设置一个唯一的身份证号
 echo 107 > /opt/module/zookeeper-3.9.1/zkData/myid 

//将107里面的zookeeper同步到另外两台服务器上

rsync -avz /opt/module/ root@192.168.19.108:/opt/module

rsync -avz /opt/module/ root@192.168.19.109:/opt/module


// 在108里面运行下面的命令
echo 108 > /opt/module/zookeeper-3.9.1/zkData/myid


// 在109里面运行下面的命令
echo 109 > /opt/module/zookeeper-3.9.1/zkData/myid

//================================================
//=================
//================================================





//配置文件添加集群信息 == opt/module/zookeeper-3.9.1/conf/zoo.cfg
server.zookeeper的身份证号=zookeeper的ip:集群间的通信端口号:集群leader挂了重新选举新Leader的端口号
//配置文件添加的信息
# 集群配置
server.107=192.168.19.107:2888:3888
server.108=192.168.19.108:2888:3888
server.109=192.168.19.109:2888:3888



//同步文件过去
rsync -avz /opt/module/zookeeper-3.9.1/conf/zoo.cfg root@192.168.19.108:/opt/module/zookeeper-3.9.1/conf
rsync -avz /opt/module/zookeeper-3.9.1/conf/zoo.cfg root@192.168.19.109:/opt/module/zookeeper-3.9.1/conf

启动

107服务器

108服务器

107服务器

109服务器

相关推荐
Charles Ray33 分钟前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
我要吐泡泡了哦2 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1232 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
贾saisai4 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫4 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
铁匠匠匠5 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
架构文摘JGWZ7 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
小齿轮lsl7 小时前
PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述
笔记·学习·matlab
Aic山鱼7 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
qq11561487077 小时前
Java学习第八天
学习