zookeeper介绍及集群的搭建(利用虚拟机)

ZooKeeper

  ZooKeeper是一个分布式的,开放源码(apache)的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase、dubbox、kafka的重要组件。它主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

  其本质是一个分布式的小文件存储系统,这个文件系统是树形的,每个节点叫做znode,每个znode都有路径和存储的值(也就是同时具有文件夹和文件的作用)。

 

ZooKeeper特性

  • 1. 全局数据一致:集群中每个服务器保存一份相同的数据副本,client 无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征。
  • 2. 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
  • 3. 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息 b 前被发布;偏序是指如果一个消息 b 在消息 a后被同一个发送者发布,a 必将排在 b 前面。
  • 4. 数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态。
  • 5. 实时性:Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

 

ZooKeeper集群的角色

Leader:
  Zookeeper 集群工作的核心,事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各个服务器的调度者。对于 create,setData,delete 等有写操作的请求,则需要统一转发给leader 处理,leader 需要决定编号、执行操作,这个过程称为一个事务。

Follower:
  处理客户端非事务(读操作)请求,转发事务请求给 Leader;参与集群 Leader 选举投票。

 

此外,针对访问量比较大的 zookeeper 集群,还可新增观察者角色。

Observer:
  观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给 Leader服务器进行处理。不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。

 

那么我们为什么要搭建zookeeper集群呢?

  zookeeper一般是作为dubbo的注册中心存在的,搭建集群一是为了高可用(一个zookeeper挂了,另外一个可以立即补上),二是为了应付高并发的情况提高效率。

  

  zookeeper在solrCloud中的作用

    主要用来管理solr集群中的相关配置信息和集群的运行状态, 协助solr进行主节点的选举。

 

准备:zookeeper的安装包  三台linux虚拟机  虚拟机的安装

修改三台虚拟机的hosts文件:vi /etc/hosts
添加如下内容:
192.168.44.28 node-01
192.168.44.29 node-02
192.168.44.30 node-03
注意: 添加时, 前面ip地址一定是自己的三台linux的ip地址 切记不要搞错了

上传zookeeper的压缩包(上传其中一台即可)

cd /export/software/
rz          #此时选择zookeeper的压缩包进行上传

解压zookeeper到指定的目录

tar -zxf zookeeper-3.4.9.tar.gz -C /export/servers/
cd /export/servers/

修改zookeeper的配置文件

cd /export/servers/zookeeper-3.4.9/conf
mv zoo_sample.cfg  zoo.cfg
vi zoo.cfg

修改后, 在配置文件的底部, 添加如下内容
server.1=node-01:2888:3888
server.2=node-02:2888:3888
server.3=node-03:2888:3888

更改后配置文件整体内容如下:(如果担心修改错误, 可以直接将zoo.cfg中的内容全部删除, 复制以下内容即可)

# 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=/export/data/zk
# 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#zookeeper集群配置
server.1=node-01:2888:3888
server.2=node-02:2888:3888
server.3=node-03:2888:3888

将配置好的zookeeper发送到其他两台主机上

cd /export/servers/
scp -r zookeeper-3.4.9/ root@node-02:$PWD   //将zookeeper复制到node-02的同级目录下
scp -r zookeeper-3.4.9/ root@node-03:$PWD   //将zookeeper复制到node-03的同级目录下

发送完成后,在其他两台主机查看, 是否已经成功接收到

cd /export/servers
ll

分别在三台主机输入如下命令给zookeeper设置id

node-01:执行的命令
mkdir -p  /export/data/zk            //这个路径和上面修改配置文件dataDir一致
echo "1" > /export/data/zk/myid 
cat /export/data/zk/myid             //此命令用于查看此文件有没有正确写入 1node-02:执行的命令
mkdir -p  /export/data/zk
echo "2" > /export/data/zk/myid 
cat /export/data/zk/myid             //此命令用于查看此文件有没有正确写入 2node-03:执行的命令
mkdir -p  /export/data/zk
echo "3" > /export/data/zk/myid 
cat /export/data/zk/myid            //此命令用于查看此文件有没有正确写入 3

分别启动三台zookeeper(建议启动顺序 node1>>node2>>node3 依次启动)

cd /export/servers/zookeeper-3.4.9/bin/
./zkServer.sh start

一个leader 其余的为follower

 

zookeeper的选举机制

初始化集群: 采取投票机制, 选举过半即为leader

1. 当第一台(id=1),启动后, 由于目前自有自己,故会把票投给自己
2. 当第二台(id=2),启动后, 由于目前已经又二台启动, 这时候会将票投给id最大的机器, 此时三台中已经有二台启动, 数量过半, 第二台理所应当的成为了leader
3. 当第三台(id=3),启动后, 虽然id=3为最大, 但是由于leader已经产生, 故只能担任follower

当下一次在重新启动时, 又会恢复选举,此时谁的数据多, 谁为leader, 如果数据都一样, 那么看id谁最大,同时一般选举过半,就会产生leader

 

还有一种选举方式是非全新集群选举:

对于运行正常的 zookeeper 集群,中途有机器 down 掉,需要重新选举时,选举过程就需要加入数据 ID、服务器 ID 和逻辑时钟。
数据 ID:数据新的 version 就大,数据每次更新都会更新 version。
服务器 ID:就是我们配置的 myid 中的值,每个机器一个。
逻辑时钟:这个值从 0 开始递增,每次选举对应一个值。 如果在同一次选举中,这个值是一致的。
这样选举的标准就变成:
1、逻辑时钟小的选举结果被忽略,重新投票;
2、统一逻辑时钟后,数据 id 大的胜出;
3、数据 id 相同的情况下,服务器 id 大的胜出;
根据这个规则选出 leader。

 

 

在zookeeper集群的基础上,搭建solrCloud

zookeeper伪集群的搭建

转载于:https://www.cnblogs.com/blazeZzz/p/9442709.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

标准库类型String

定义和初始化string对象 初始化string对象方式 string s1 默认初始化,s1是一个空串 string s2(s1) s2是s1的副本 string s2 s1 等价于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本,除了字面值最后的那个…

轻量级数据库中间件利器Sharding-JDBC深度解析(有彩蛋)

讲师介绍张亮 当当架构部总监 负责分布式中间件和私有云平台建设 目前主导开源项目:Elastic-Job及Sharding-JDBC 主题简介: 1、关系型数据库中间件核心功能介绍 2、Sharding-JDBC架构及内核解析 3、Sharding-JDBC未来展望 一、关系型数据库中间件核心功…

const 常量_条款03:尽可能使用const

const 允许你指定一个语义约束(也就是指定一个“不该被改动”的对象),而编译器会强制实施这项约束。1、const指针如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量&…

javascript高级程序设计---js事件思维导图

绘制思维软件与平时用的笔记,以及导出功能,这三个问题综合起来,于是我把思维导图分开画 1、js事件的基本概念 2、js事件的事件处理程序 3、js事件的事件对象 转载于:https://www.cnblogs.com/Jamie1032797633/p/10567419.html

和 Thrift 的一场美丽邂逅

一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的。每次搜索 “java序列化” “方式”、“对比” 或 “性能” 等关键字时,搜索引擎总是会返回一大堆有关各种序列化方式的使用方法或者性能对比的结果给你,而其中必定少不了 Thrift&#…

弹出框 每次打开 滚动条置顶_微信置顶文字怎么弄?微信置顶一句话教程

今日支付宝红包支付宝首页搜索511501453马上领取红包(支付宝双十二活动,瓜分15亿红包)(领取后一定要记得使用,不然会浪费的呦,更会影响第二天的领取!)奶思靓机“ 一 个 有 用 的 公 众 号 の ”嗨,最近很流行在微信上面…

python 3 面向过程编程

python 3 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就像设计好一条工业流水线,是一种机械式的思维方式。 1、优点:程序结构清晰,可以把复杂的问题简单化&…

在ionic/cordova中使用百度地图插件

在ionic项目中,如果想实现定位功能,可以使用ng-cordova提供的cordova-plugin-geolocation。 但由于高墙的缘故,国内andorid环境下,此插件不起作用(ios环境下可用)。 国内比较好的是现实使用百度地图提供的A…

汉诺塔问题递归算法python代码_[python]汉诺塔问题递归实现

一、问题描述及算法步骤 汉诺塔问题的大意是有三根柱子a, b, c,现在a柱有N个盘子从下往上尺寸递减排列,要求: 1. 将a上的盘子移动到c柱上; 2. 每次移动一个盘子; 3. 柱子上的盘子始终必须是大的在下面image.png 汉诺塔问题的经典实现算法步骤…

plsql 批量调存储过程_数控双端开榫机:批量铣榫头真牛气

数控双端开榫机主要用于实木家具批量化铣榫头专用,因为其本身的优势逐渐被家具厂老板们所接受,是目前家具生产不可缺少的一款自动化设备,给企业节约了生产成本,今天又焦峰小编来给大家讲解一下。主要技术参数:知乎视频…

python时间差怎么转换为数字_pandas进行时间数据的转换和计算时间差并提取年月日...

#pd.to_datetime函数 #读取数据 import pandas as pd data pd.read_csv(police.csv) #将stop_date转化为datetime的格式的dataframe,存到stop_datetime data[stop_datetime] pd.to_datetime(data.stop_date) #自定义一个时间,计算时间差 data_new pd.…

人脸识别html5效果,用HTML5实现人脸识别

注:今天 HTML5 小组沙龙《论道 HTML5 》分享时有朋友问到一个问题, getUserMedia 是否会支持人脸识别,我当时的答案是这应该是应用来实现的功能,而不是规范要完成的工作。而我之前在网上看到过一篇关于 getUserMedia 和人脸识别的…

华为mate40会不会有鸿蒙系统,鸿蒙OS系统正式推送,拿华为Mate40更新后,发现了优缺点...

自从鸿蒙系统正式推送之后,笔者一直都带着好奇心在体验着HarmonyOS 2带来的变化,生怕错过惊喜,也担心系统本身会出现不足。因为鸿蒙系统就像是年轻人一样,才刚刚出炉,需要时间去磨练,然后才能发挥出真正强大…

jstack使用

jstack主要用来查看某个Java进程内的线程堆栈信息,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多,语法格式如下: jstack [option] pid jstack [option] executable core jstack [option] [server-id]rem…

删除目录软链接注意事项

2019独角兽企业重金招聘Python工程师标准>>> 实验环境: 在root 目录下创建一个目录 1 ,并在该目录下创建一个2.txt 的文件,写入内容 1.txt: [rootserver ~]# mkdir 1 [rootserver ~]# echo 1.txt > 1/2.txt [rootserver ~]# tree 1 1 └─…

html如何模拟点击,Javascript 模拟点击事件(点击链接与html点击) 兼容IE/Firefox

一把情况下模拟点击一般两个方面,模拟点击超级连接事件firefox的兼容的函数为对HTMLAnchorElement 加入onclick事件try {// create a element so that HTMLAnchorElement is accessibledocument.createElement(a);HTMLElement.prototype.click function () {if (ty…

mvn编写主代码与测试代码

maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/…

打印速度快点的打印机_SLM推出了功能强大的新型金属3D打印机,速度快20倍

德国金属3D打印机制造商SLM Solutions在Formnext Connect贸易展览会上推出了功能强大的新系统NXG XII 600。SLM的大幅面机器配备了十二个可同时运行的1 KW激光器,使其速度比该公司自己的单激光SLM 280快20倍。NXG XII 600经过定制设计,可大量生产大型零件…

1.7Oob 继承关系中构造方法的使用

1:父类中最好要有一个空参数的构造方法,因为默认的构造方法在自定义了构造方法后就不存在了,需要显示的写出来。 若父类中没有空参数的构造方法,则子类必须有自定义的构造方法,且用super()调用父…

JavaScript浮点运算0.2+0.1 !== 0.3

浮点运算JavaScript 本文主要讨论JavaScript的浮点运算,主要包括 JavaScript number基本类型二进制表示十进制浮点数的精度number 数字类型 在JavaScript中,数字只有number这一种类型; var intS 2,floatA 0.1; typeof intS; // number typeof floatA…