【星海随笔】分布式管理Zookeeper

高可用集群

地址:https://archive.apache.org/dist/zookeeper
TPS既每秒系统吞吐量

QPS即每秒查询率

Zookeeper的选举机制

确保所有节点对外表现为一个统一的服务。

选举机制分为两个阶段:Leader选举和投票确认

Zookeeper 的选举机制确保集群中的所有节点对外表现为一个统一的服务。选举机制分为两个阶段:Leader 选举和投票确认。

  1. 服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上票),选举无法完成,服务器1状态保持为LOOKING;
  2. 服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0 票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
  3. 服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。 服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
  4. 服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态FOLLOWING;
  5. 服务器5启动,同4一样当小弟。但是如果sever3没有选举的时候(不是leader的时候),server4就进来选举,那结果就不一样了(突发状态)

安装篇

bash 复制代码
tar  -xzvf  apache-zookeeper-x.x.x-bin.tar.gz  -C  /export/servers/
cd  /export/servers/ 切换到/export/servers/ 目录

配置
mv  ./apache-zookeeper-x.x.x-bin/  /usr/zookeeper

配置环境变量: vim /etc/profile
export ZK_HOME=/usr/zookeeper
export JAVA_HOME=/path_to_your/java/jdkx.x.x_xxx/
export PATH=$JAVA_HOME/bin:$ZK_HOME/bin:$PATH

cp  /export/servers/conf/zoo_sample.cfg  /export/servers/conf/zoo.cfg
tickTime=2000  ##Client-Server通信心跳时间,单位是毫秒
initLimit=10   ##集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数
syncLimit=5    ##集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数
clientPort=2181   ## 监听端口
maxClientCnxns=100  ## 最大连接数
dataDir=/export/servers/zookeeper-x.x.x/data ## 数据目录
dataLogDir=/export/servers/zookeeper-x.x.x/log  ## 日志目录
# 添加如下内容
server.1=<IP1>:2881:3881  ## zk节点1
server.2=<IP1>:2881:3881  ## zk节点2
server.3=<IP3>:2881:3881  ## zk节点3
bash 复制代码
在/export/servers/zookeeper-x.x.x 下创建两个文件夹,分别是data和log
bash 复制代码
然后分别在zk节点,/export/servers/zookeeper-x.x.x/data目录下,创建文本myid,内容分别是1、2、3序号
bash 复制代码
IP1  写入1
IP2  写入2
IP3  写入3
bash 复制代码
对分节点去分发
scp -r /export/servers/zookper-x.x.x  hadoop02:$PWD
scp -r /export/servers/zookper-x.x.x  hadoop03:$PWD
bash 复制代码
启动之前,jdk7以上的版本一定要安装合适,然后在环境变量里配置ZK_HOME
zookeeper bin目录下的脚本

执行 zkServer.sh  start  启动
执行 zkServer.sh  status 查看各个zk节点的状态

jps #查看是否启动了zk
zkServer.sh stop 是停掉zk节点服务
启动zk之后,在任意一台服务上,运行:zkCli.sh进入zk的命令行模式

zk创建的节点叫znode,znode四种节点类型:持久节点、持久序列节点、暂时节点、暂时序列节点。

bash 复制代码
create   -e /app   111  创建一个暂时的znode节点
create   -s /app/test1  222  创建一个持久的,带有序列号的znode节点
get  /app/test  得到创建的节点中的数据
执行ls  /可以看到根节点下面所有子节点
ls /app/test watch  监听这个节点下的变化,我在另一个服务器下也打开了zk的命令行,
相关推荐
IvanCodes3 分钟前
Zookeeper & Hbase安装教程
大数据·zookeeper·hbase
仗剑_走天涯15 分钟前
hadoop reduce阶段 对象重用问题
大数据·hadoop·分布式
AI攻城狮30 分钟前
Anthropic 开源了 Claude 的 Agent Skills 仓库:文档技能的底层实现全公开了
人工智能·云原生·aigc
电磁脑机41 分钟前
无总线场同步:意识本质、AGI困境与脑机革命的核心理论重构
分布式·神经网络·架构·信号处理·agi
半桶水专家1 小时前
kafka数据删除策略详解
分布式·kafka
一个有温度的技术博主1 小时前
Lua语法进阶:函数封装与条件控制的艺术
redis·分布式·缓存·lua
无心水1 小时前
2、5分钟上手|PyPDF2 快速提取PDF文本
java·linux·分布式·后端·python·架构·pdf
Jackyzhe1 小时前
从零学习Kafka:位移与高水位
分布式·学习·kafka
roman_日积跬步-终至千里1 小时前
【系统架构师-案例题-分布式数据缓存架构】22年下(3)分布式仓储货物管理系统
分布式·缓存·系统架构
星河耀银海1 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops