ZooKeeper【集群模式】

这篇具有很好参考价值的文章主要介绍了ZooKeeper【集群模式】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ZooKeeper命令基本操作

cd /opt/module/zookeeper-3.5.7/bin
#启动服务端
./zkServer.sh start
#启动客户端
./zkCli.sh
#查看zookeeper状态
./zkServer.sh status
#退出客户端
quit
#关闭zookeeper
./zkServer.sh stop
#查看当前进程的全限定名
./jps -l

配置文件说明

# 通信心跳时间,zookeeper服务器和客户端心跳时间(单位ms)
tickTime=2000
# LF初始化通信时限,Leader和Flower初始连接时最长的等待时间(10*tickTime),也就是20s还未建立连接则认为通信失败
initLimit=10
# LF同步通信时限,Leader和Flower建立连接后仍然保持心跳联系,超过(5*syncLimit)认为Flower死亡,从服务器目录删除Flower。
syncLimit=5
# 保存zookeeper数据的目录
dataDir=/opt/module/zookeeper-3.5.7/zkData
# 客户端端口号
clientPort=2181

集群配置

        在zookeeper的zkData目录(我们自己指定的存放zookeeper数据的目录)下创建一个名为"myid"的文件(必须为myid)。

        在myid中添加与服务器对应的数字编号,比如hadoop102就配置数字编号 "2" (在整个zookeeper集群中唯一,所以分发zookeeper后,必须修改自己的myid)。我们需要在zoo.cfg的末行增加配置信息:

server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
#server.2代表myid=2的服务器
#hadoop102对应我们hadoop102的地址:192.168.88.134
#2888: Leader和Flower的通信端口
#3888: 如果集群中唯一的Leader挂了,通过这个端口来重新选举Leader

        因为我们配置了三台服务器,所以根据上一节说到的要求,我们必须启动半数以上(至少两台)的服务器zookeeper才能启动成功。

ZooKeeper的选举机制

三个属性

SID

        服务器ID。用来唯一标识每一台ZooKeeper集群中的机器,和myid一致。

ZXID

        它可以用来确保ZooKeeper的数据一致性。zxid是一个单调递增的计数器,它是由ZooKeeper服务器在处理每个事务时生成。

Epoch

        每个Leader任期的代号。

第一次启动时

以我们的集群为例(三台服务器hadoop102、hadoop103、hadoop104)

  1. hadoop102启动,发起选举,hadoop102投自己一票。但是此时hadoop102只有一票,不够半数以上(1<3/2=1.5),选举无法完成,hadoop102保持LOOKING状态(观望状态);
  2. hadoop103启动,此时zookeeper集群中服务器节点数量(2)>半数(1.5),zookeeper启动成功,这时候就需要选举出一个Leader了。
  3. 于是再次发起选举,hadoop102已经投过了(投给了自己),hadoop103也投自己一票,此时hadoop102和hadoop103各自一票。为了避免僵持状态,hadoop102和hadoop103互相交换选票信息,此时hadoop102发现hadoop103的myid (3) 比自己 (2) 大,于是hadoop102将自己的选票投给hadoop103,此时hadoop103票数=2,hadoop102票数=0,hadoop103成功选为Leader,状态改为LEADING,而hadoop102自动变为Flower,状态改为LEADING。
  4. 这时候,hadoop104姗姗来迟,才刚刚启动,于是又发起一次选举,hadoop104同样投给自己,但这时候已经存在Leader了,所以自己只能做Flower了。

zookeeper的选举机制是:只要投票过半数,服务器 id(myid)大的 直接胜出

        比如这个案例,尽管hadoop104比hadoop102和hadoop103的myid和服务器id都要大,但是因为当hadoop102和hadoop103启动的时候,已经超过了半数的要求,直接就开始选举并且hadoop103胜出,所以即使hadoop104的myid比hadoop103更大也没用。

非第一次启动

除了服务器初始化启动,当服务器节点无法和Leader保持连接的时候,也会进行Leader选举。

集群中确实不存在Leader(比如 Leader挂掉了) 

选举Leader的规则:

前提:节点数达到一半以上

比较优先级

  1. Epoch大的直接胜出
  2. Epoch相同,ZXID大的胜出
  3. ZXID相同,SID大的胜出

集群中存在Leader,但是节点没有连接上

        这种情况下,某个节点自认为Leader不存在,想要试图去选举Leader,当它向其它节点交换选票的时候,会被告知Leader是存在的并告诉Leader的信息,该节点只需要与Leader建立连接即可。

安装ZooKeeper服务器的个数

基本原则是安装奇数台。

生产经验:

  • 10 台服务器:3 台 zk;
  • 20 台服务器:5 台 zk;
  • 100 台服务器:11 台 zk;
  • 200 台服务器:11 台 zk;

服务器台数多:好处:提高可靠性;坏处:提高通信延时。所以不见得越多越好。

ZooKeeper群起脚本

#!/bin/bash

case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
	do
		echo "========== zookeeper $i 启动 ============"
		ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
	done
}
;;
"stop"){
	for i in hadoop102 hadoop103 hadoop104
	do
		echo "========== zookeeper $i 关闭 ============"
		ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
	done
}
;;
"status"){
	for i in hadoop102 hadoop103 hadoop104
	do
		echo "========== zookeeper $i 状态 ============"
		ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
	done
}
;;
esac

注意

        不能直接从windows复制脚本文件过去,会报错文件中有windows的换行符。

        可以从windows复制脚本内容,然后粘贴到linux的vim编辑器这样是没问题的。文章来源地址https://www.toymoban.com/news/detail-481348.html

到了这里,关于ZooKeeper【集群模式】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HDFS基本操作命令

    hdfs shell cli支持操作多种文件系统,包括本地文件系统(file:///),分布式文件系统(hdfs:nn:8020)等 操作的是什么文件系统取决于URL种的前缀协议 如果没有指定前缀,则将会读取环境变量汇总的fs.defaultFS属性,以该属性作为默认文件系统 hdfs dfs -ls file:/// #操作本地文件系统 hdfs dfs

    2024年02月16日
    浏览(33)
  • Git基本操作命令

    目录 一、简介 二、基本命令使用 (1) git add ---将该文件添加到暂存区 (2) git status --- 命令用于查看在上次提交之后是否有对文件进行再次修改 (3) git diff -- 比较文件在暂存区和工作区的差异 (4) git commit  --- 将暂存区内容添加到本地仓库中 (5) git reset --指定退回某一次提交的版

    2024年02月05日
    浏览(42)
  • Docker基本操作命令(一)

    docker search命令搜索存放在 Docker Hub中的镜像,此命令默认Docker会在Docker Hub中搜索镜像,可以配置了其他镜像仓库 [root@zch01 ~]# docker search centos NAME:镜像仓库名称 DESCRIPTION:镜像仓库描述 STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于 GitHub的 stars OFFICAL: 表示是否为

    2024年02月12日
    浏览(39)
  • HBase的基本命令操作

    所有命令来源帮助文档; processlist – 查看当前正在执行的任务 status – 查看服务器的状态信息 table_help – 查看表操作帮助信息。 version – 显示版本信息。 whoami – 用户信息。 create_namespace – 创建命名空间 describe_namespace – 显示指定命名空间的详细信息 alter_namespace – 修改命

    2024年04月14日
    浏览(39)
  • redis操作基本命令

    Redis —— Remote Dictionary Server ,它是一个开源的使用ANSI C语言编写、 支持网络 、可基于 内存亦可持久化 的日志型、 Key-Value 数据库,并提供多种语言的API,我们可使用它构建高性能,可扩展的Web应用程序。 具有以下特点: 异常快速:  Redis数据库完全在 内存 中,因此处理速

    2024年02月09日
    浏览(33)
  • MYSQL基本命令和操作

    🖊作者 : D. Star. 📘专栏 : JAVA 😆今日提问 : 你好,我的朋友,在你的人生途中,会面临很多选择,不管选什么样的结果,我们都多少会有些后悔。如果是你,你会选择爱你的,还是懂你的? Oracle(最好),Mysql( 最广泛–免费 ),SQL Server(好用不火),SQLite(轻量级) MongoDB,Redis,

    2024年02月12日
    浏览(42)
  • 命令行hive的基本操作

    使用SQL语句在命令行创建Hive库: 其中, database_name 是要创建的数据库的名称。例如: 这将在Hive中创建一个名为\\\"mydatabase\\\"的数据库。 使用SQL语句在命令行创建Hive表: 其中, table_name 是要创建的表的名称, column1_name 和 column2_name 是表的列名, column1_type 和 column2_type 是对应列

    2024年03月11日
    浏览(35)
  • FFMPEG基本操作命令指南(二)

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。 接上第一篇基础的几个命令,下面介绍几个看起来比较复杂的 一:视频剪切 命令示例: ffmpeg -

    2023年04月24日
    浏览(33)
  • Git 的基本操作 ——命令行

    详解如下: 本地仓库: 是在开发人员自己电脑上的Git仓库,存放我们的代码(.git 隐藏文件夹就是我们的本地仓库) 远程仓库: 是在远程服务器上的Git仓库,存放代码(可以是github.com或者gitee.com 上的仓库,或者自己该公司的服务器) 工作区: 我们自己写代码(文档)的地方 暂存区:

    2024年02月05日
    浏览(44)
  • Linux学习笔记——基本操作命令

      Linux 操作系统的 Shell 作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言系统。   Shell 是用户和 Linux 内核之间的接口程序,如果把 Linux 内核想象成一个球体的中心,Shell 就是围绕内核的外层。当从 Shell 或其他程序向

    2024年03月12日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包