【星海随笔】分布式管理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的命令行,
相关推荐
predisw4 小时前
Kafka如何实现高性能
分布式·kafka
joker D8887 小时前
【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希
c++·分布式·哈希算法
CET中电技术8 小时前
“光伏+储能+智能调控”,CET中电技术分布式智能微网方案如何实现?
分布式·储能·光伏
Akamai中国9 小时前
分布式AI推理的成功之道
人工智能·分布式·云原生·云计算·云服务·云平台·云主机
川石教育9 小时前
测试工程师如何学会Kubernetes(k8s)容器知识
云原生·容器·kubernetes·kubernetes容器·kubernetes教程
星星点点洲9 小时前
【RabbitMQ】消息丢失问题排查与解决
分布式·rabbitmq
小白学大数据11 小时前
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
javascript·redis·分布式·scrapy
Kookoos11 小时前
Redis + ABP vNext 构建分布式高可用缓存架构
redis·分布式·缓存·架构·c#·.net
漂流瓶66666612 小时前
运行Spark程序-在shell中运行 --SparkConf 和 SparkContext
大数据·分布式·spark
匆匆z213 小时前
AWS EC2 微服务 金丝雀发布(Canary Release)方案
微服务·云原生·金丝雀部署