当前位置:首页 » 操作系统 » 树选举算法

树选举算法

发布时间: 2023-02-23 12:50:50

⑴ 大数据Hadoop之ZooKeeper认识

Zookeeper字面上理解就是动物管理员,Hadoop生态圈中很多开源项目使用动物命名,那么需要一个管理员来管理这些“动物”。

在集群的管理中Zookeeper起到非常重要的角色,他负责分布式应用程序协调的工作。

Zookeeper管理集群会选举一个Leader节点(可参考FastLeader选举算法,即快速选举Leader节点),Leader节点主要负责整个Zookeeper集群的运行管理,Follower负责管理具体的数据存储与读取。

Zookeeper主要提供以下四点功能:统一命名服务、配置管理、集群管理、共享锁和队列管理,用于高效的管理集群的运行。

1. 统一命名服务

命名服务指通过指定的名字获取资源或者服务提供者的信息。分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于识别和记忆。通常情况下使用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,即对人友好又不会重复。

Zookeeper集群中统一由Leader节点(图中M节点)来管理所有Follower节点(图中的S1和S2节点)的命名空间。Zookeeper提供统一的命名服务,他不对外提供数据也不存储数据,他只提供一套统一的命名规则,运行在Zookeeper之上的服务需要遵循这一套命名规则。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的接口(API),能够很容易创建一个全局唯一的路径(path),这个path就可以作为一个名称。命名服务(NameService)已经是Zookeeper内置的功能,你只要调用Zookeeper的API就能实现。如调用create接口就可以很容易创建一个目录节点。

遵循Leader统一管理命名规则下,集群中数据读写的方式:

1.1.写数据,一个客户端进行写数据请求时,会指定Zookeeper集群节点,如果是Follower接收到写请求,会把请求转发给Leader,Leader通过内部的Zab协议进行原子广播,直到所有Zookeeper节点都成功写了数据,然后Zookeeper会给Client发回写完响应。

1.2.读数据,因为集群中Zookeeper按照统一的命名空间,所有Zookeeper节点呈现相同的命名空间视图(文件目录名称结构),所以读数据的时候请求任意一台Zookeeper节点都一样。

2. 配置管理

配置的管理在分布式应用环境中很常见,例如同一个应用需要在多台服务器上运行,但是它们的应用系统的某些配置相同的,如果要修改这些相同的配置项,就必须同时修改每台运行这个应用系统的PC Server,这样非常麻烦而且容易出错。像这样的配置信息完全可以交给Zookeeper来管理,处理起来非常便捷。

配置的管理包含发布和订阅两个过程,顾名思义就是将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中管理和动态更新。

如图所示,将配置信息保存在Zookeeper(Leader节点)的某一个目录中,然后将所有需要修改的应用机器订阅该Zookeeper(Leader节点)节点,一旦Leader节点发布新配置信息,每台订阅的机器就会收到Zookeeper的通知,然后从Zookeeper获取新的配置信息应用到系统中,完成配置的集中统一管理。

3. 集群管理

Zookeeper在集群管理中主要是集群监控和Leader选举。

3.1.集群管理

这通常用于那种对集群中机器状态、 , 机器在线率有较高要求的场景,能够快速对集群中机器变化做出响应。这样的场景中,往往有一个监控系统,实时检测集群机器是否存活。过去的做法通常是:监控系统通过某种手段(比如ping)定时检测每个机器,或者每个机器自己定时向监控系统汇报"我还活着"。

这种做法可行,但是存在两个比较明显的问题:

1).集群中机器有变动的时候,牵连修改的东西比较多。

2).有一定的延时。

利用ZooKeeper中两个特性,就可以实施另一种集群机器存活性监控系统:

1).客户端在示例节点A上注册一个监控者(Watcher),那么如果A的子节点变化了,会通知该客户端。

2).创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失。

3.2.Leader选举:

Leader选举即从大量集群节点中选举一个Leader节点,是zookeeper中最为经典的使用场景,在分布式环境中选举的Leader节点好快会直接影响集群的效率。Leader节点主要负责相同的业务应用分布在不同的机器上共用的逻辑模型和数据的调配,优秀的调配方案可以大大减少重复运算,提高性能降低集群的负载。

利用ZooKeeper中两个特性,就可以实施另一种集群中Leader选举:

1).利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建Leader节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式环境中进行集群的Leader选举了。

2).另外,这种场景演化一下,就是动态Leader选举。这就要用到EPHEMERAL_SEQUENTIAL类型节点的特性了,这样每个节点会自动被编号。允许所有请求都能够创建成功,但是创建节点会为每个节点安排顺序,每次选取序列号最小的那个机器作为Leader。

小结

Zookeeper作为Hadoop主要的组件,在集群管理方面为我们提供了解决方案。通过对统一命名服务、配置管理和集群管理的阅读,我们能够清晰的理解Zookeeper的核心内容。针对共享锁和队列服务偏技术实现,有兴趣的可以进一步研究。

Zookeeper在大数据集群中解决集群管理的问题,磨刀不误砍柴工,了解完工具我们下一次分享一些具体的实效应用。

⑵ 发现公司里的大数据开发挣得很多,想转行,

转行这个词汇,一直是职场上此起彼伏的一个热门话题,相信很多朋友都想过或已经经历过转行。工作可谓是我们生存乃至生活的主要收入来源,谁都希望拥有一份高薪又稳定的工作,以此来改善自己的生活和实现自己的大大小小的梦想!但又担心转行后的工作待遇达不到自己的预期,顾虑重重……

不少想进入大数据分析行业的零基础学员经常会有这样一些疑问:大数据分析零基础应该怎么学习?自己适合学习大数据分析吗?人生,就是在不断地做选择,然后在这个选择过程中成长,让自己从一棵小树苗变成参天大树。就是我们每个对大数据充满幻想终于下定决心行动的学员的选择,我们给了自己4个月的时间,想要在大数据分析这个领域汲取养分,让自己壮大成长。

【明确方向】

通过国家的战略规划,看到BAT的大牛们都在大数据行业布局,新闻媒体追捧这大数据分析行业的项目和热点,我想如果我还没有能力独立判断的时候,跟着国家政策和互联网大佬们的步调走,这应该是错不了的。

【付诸行动】

明确了方向之后,我就整装待发,刚开始是在网络上购买了很多的视频教程,也买了很多书籍,但是最大的问题就在于,我不知道怎么入手,没关系,有信心有耐心肯定能战胜困难,我坚持了一个月,学习的节奏越来越乱,陆陆续续出现了很多的问题,没人指导,请教了几个业内的朋友,但对方工作繁忙,问了几次之后就不好意思了,自学陷入了死循环。

意识到我学习效率的低下,以及无人指导的问题想想未来的康庄大道,咬咬牙告诉自己,一定好好好学,不然就浪费太多时间最后还会是一无所获。最后找到组织(AAA教育)一起学习进步!

大数据分析零基础学习路线,有信心能坚持学习的话,那就当下开始行动吧!

一、大数据技术基础

1、linux操作基础

linux系统简介与安装

linux常用命令–文件操作

linux常用命令–用户管理与权限

linux常用命令–系统管理

linux常用命令–免密登陆配置与网络管理

linux上常用软件安装

linux本地yum源配置及yum软件安装

linux防火墙配置

linux高级文本处理命令cut、sed、awk

linux定时任务crontab

2、shell编程

shell编程–基本语法

shell编程–流程控制

shell编程–函数

shell编程–综合案例–自动化部署脚本

3、内存数据库redis

redis和nosql简介

redis客户端连接

redis的string类型数据结构操作及应用-对象缓存

redis的list类型数据结构操作及应用案例-任务调度队列

redis的hash及set数据结构操作及应用案例-购物车

redis的sortedset数据结构操作及应用案例-排行榜

4、布式协调服务zookeeper

zookeeper简介及应用场景

zookeeper集群安装部署

zookeeper的数据节点与命令行操作

zookeeper的java客户端基本操作及事件监听

zookeeper核心机制及数据节点

zookeeper应用案例–分布式共享资源锁

zookeeper应用案例–服务器上下线动态感知

zookeeper的数据一致性原理及leader选举机制

5、java高级特性增强

Java多线程基本知识

Java同步关键词详解

java并发包线程池及在开源软件中的应用

Java并发包消息队里及在开源软件中的应用

Java JMS技术

Java动态代理反射

6、轻量级RPC框架开发

RPC原理学习

Nio原理学习

Netty常用API学习

轻量级RPC框架需求分析及原理分析

轻量级RPC框架开发

二、离线计算系统

1、hadoop快速入门

hadoop背景介绍

分布式系统概述

离线数据分析流程介绍

集群搭建

集群使用初步

2、HDFS增强

HDFS的概念和特性

HDFS的shell(命令行客户端)操作

HDFS的工作机制

NAMENODE的工作机制

java的api操作

案例1:开发shell采集脚本

3、MAPREDUCE详解

自定义hadoop的RPC框架

Maprece编程规范及示例编写

Maprece程序运行模式及debug方法

maprece程序运行模式的内在机理

maprece运算框架的主体工作流程

自定义对象的序列化方法

MapRece编程案例

4、MAPREDUCE增强

Maprece排序

自定义partitioner

Maprece的combiner

maprece工作机制详解

5、MAPREDUCE实战

maptask并行度机制-文件切片

maptask并行度设置

倒排索引

共同好友

6、federation介绍和hive使用

Hadoop的HA机制

HA集群的安装部署

集群运维测试之Datanode动态上下线

集群运维测试之Namenode状态切换管理

集群运维测试之数据块的balance

HA下HDFS-API变化

hive简介

hive架构

hive安装部署

hvie初使用

7、hive增强和flume介绍

HQL-DDL基本语法

HQL-DML基本语法

HIVE的join

HIVE 参数配置

HIVE 自定义函数和Transform

HIVE 执行HQL的实例分析

HIVE最佳实践注意点

HIVE优化策略

HIVE实战案例

Flume介绍

Flume的安装部署

案例:采集目录到HDFS

案例:采集文件到HDFS

三、流式计算

1、Storm从入门到精通

Storm是什么

Storm架构分析

Storm架构分析

Storm编程模型、Tuple源码、并发度分析

Storm WordCount案例及常用Api分析

Storm集群部署实战

Storm+Kafka+Redis业务指标计算

Storm源码下载编译

Strom集群启动及源码分析

Storm任务提交及源码分析

Storm数据发送流程分析

Storm通信机制分析

Storm消息容错机制及源码分析

Storm多stream项目分析

编写自己的流式任务执行框架

2、Storm上下游及架构集成

消息队列是什么

Kakfa核心组件

Kafka集群部署实战及常用命令

Kafka配置文件梳理

Kakfa JavaApi学习

Kafka文件存储机制分析

Redis基础及单机环境部署

Redis数据结构及典型案例

Flume快速入门

Flume+Kafka+Storm+Redis整合

四、内存计算体系Spark

1、scala编程

scala编程介绍

scala相关软件安装

scala基础语法

scala方法和函数

scala函数式编程特点

scala数组和集合

scala编程练习(单机版WordCount)

scala面向对象

scala模式匹配

actor编程介绍

option和偏函数

实战:actor的并发WordCount

柯里化

隐式转换

2、AKKA与RPC

Akka并发编程框架

实战:RPC编程实战

3、Spark快速入门

spark介绍

spark环境搭建

RDD简介

RDD的转换和动作

实战:RDD综合练习

RDD高级算子

自定义Partitioner

实战:网站访问次数

广播变量

实战:根据IP计算归属地

自定义排序

利用JDBC RDD实现数据导入导出

WorldCount执行流程详解

4、RDD详解

RDD依赖关系

RDD缓存机制

RDD的Checkpoint检查点机制

Spark任务执行过程分析

RDD的Stage划分

5、Spark-Sql应用

Spark-SQL

Spark结合Hive

DataFrame

实战:Spark-SQL和DataFrame案例

6、SparkStreaming应用实战

Spark-Streaming简介

Spark-Streaming编程

实战:StageFulWordCount

Flume结合Spark Streaming

Kafka结合Spark Streaming

窗口函数

ELK技术栈介绍

ElasticSearch安装和使用

Storm架构分析

Storm编程模型、Tuple源码、并发度分析

Storm WordCount案例及常用Api分析

7、Spark核心源码解析

Spark源码编译

Spark远程debug

Spark任务提交行流程源码分析

Spark通信流程源码分析

SparkContext创建过程源码分析

DriverActor和ClientActor通信过程源码分析

Worker启动Executor过程源码分析

Executor向DriverActor注册过程源码分析

Executor向Driver注册过程源码分析

DAGScheler和TaskScheler源码分析

Shuffle过程源码分析

Task执行过程源码分析

五、机器学习算法

1、python及numpy库

机器学习简介

机器学习与python

python语言–快速入门

python语言–数据类型详解

python语言–流程控制语句

python语言–函数使用

python语言–模块和包

phthon语言–面向对象

python机器学习算法库–numpy

机器学习必备数学知识–概率论

2、常用算法实现

knn分类算法–算法原理

knn分类算法–代码实现

knn分类算法–手写字识别案例

lineage回归分类算法–算法原理

lineage回归分类算法–算法实现及demo

朴素贝叶斯分类算法–算法原理

朴素贝叶斯分类算法–算法实现

朴素贝叶斯分类算法–垃圾邮件识别应用案例

kmeans聚类算法–算法原理

kmeans聚类算法–算法实现

kmeans聚类算法–地理位置聚类应用

决策树分类算法–算法原理

决策树分类算法–算法实现

时下的大数据分析时代与人工智能热潮,相信有许多对大数据分析师非常感兴趣、跃跃欲试想着转行的朋友,但面向整个社会,最不缺的其实就是人才,对于是否转行大数据分析行列,对于能否勇敢一次跳出自己的舒适圈,不少人还是踌躇满志啊!毕竟好多决定,一旦做出了就很难再回头了。不过如果你已经转行到大数据分析领域,就不要后悔,做到如何脱颖而出才是关键。因此本文给出一些建议,针对想要转行大数据分析行列且是零基础转行的小伙伴们,希望对你们有所裨益,也希望你们将来学有所成,不后悔,更不灰心!

相关推荐:

《转行大数据分析师后悔了》、《ui设计培训四个月骗局大爆料》、《零基础学大数据分析现实吗》、《大数据分析十八般工具》

⑶ 分布式计算的目录

第1章引言
1.1分布式系统
1.2分布式计算理论
1.3内容概要
1.4理论和实践的关系
本章注释
第一部分
第2章消息传递系统中的基本算法
2.1消息传递系统的形式化模型
2.2生成树上的广播和敛播
2.3洪泛算法及构造生成树
2.4构造指定根的深度—优先搜索生成树
2.5构造不指定根的深度—优先搜索生成树
练习
本章注释
第3章环中领导者选举算法
3.1领导者选举问题
3.2匿名环
3.3异步环
练习
本章注释
第4章共享存储器中的互斥
第5章容错一致性
第6章因果关系和时间
第7章模拟的形式化模型
第8章广播与多播
第9章分布式共享存储器
第10章读/写对象的容错模拟
第11章模拟同步
第12章改进算法的容错性
第13章容错的时钟同步
第14章随机化
第15章任意对象的无等待模拟
第16章异步系统中的可解问题
参考文献
……

⑷ 1、回答当STP生成树根端口中断时,如何选举重新根端口,请使用word作答

STP(Spanning Tree Protocol)是生成树协议的英文缩写。该协议可应用于在网络中建立树形拓扑,消除网络中的环路,并且可以通过一定的方法实现路径冗余,但不是一定可以实现路径冗余。生成树协议适合所有厂商的网络设备,在配置上和体现功能强度上有所差别,但是在原理和应用效果是一致的。
生成树协议运行生成树算法(STA).生成树算法很复杂,但是其过程可以归纳为以下3个步骤:
(1)选择根网桥
(2)选择根端口
(3)选择指定端口
关于选择根网桥:选择根网桥的依据是网桥ID,网桥ID由网桥优先级和网桥MAC地址组成。网桥的默认优先级是32768.使用show mac-address-table时,显示在最前面的MAC地址就是计算时所使用的MAC地址。网桥ID值小的为根网桥,当优先级相同时,MAC地址小的为根网桥。
关于选择根端口:每个非根交换机选择一个根端口。选择顺序为:到根网桥最低的根路径成本→发送BPDU的网桥ID较小→端口ID较小的。端口ID由端口优先级与端口编号组成。默认的端口优先级为128。
关于选择指定端口:每个网段上选择一个指定端口。选择顺序为:根路径成本较低→发送BPDU的交换机的网桥ID值较小→本端口的ID值较小。另外,根网桥的接口皆为指定端口,因为根网桥上端口的根路径成本为0。

⑸ 计算机网络 STP

STP (Spanning Tree Protocol)是生成树协议的英文缩写。
生成树协议 运行生成树算法(STA). 生成树 算法很复杂,但是其过程可以归纳为以下3个步骤:

(1)选择根网桥
(2)选择根端口
(3)选择指定端口

First:BID(Bridge ID,网桥ID),因为根交换机的选举是基于BID的,BID由三部分组成——优先级、发送交换机的MAC地址、Extended System ID(扩展系统ID,可选项)
BID = 网桥ID=网桥优先级+网桥MAC地址组成的

First:(PID)=端口ID等于优先级加上端口编号,默认端口优先级是128。
P:每个非根交换机有且只有一个根端口。

选举根端口依照下面的顺序:
首先,最低花费的端口将成为根端口;在花费相同的情况下比较发送者的BID,BID小的将成为根端口。--->
即:到根网桥最低的根路径成本→发送BPDU的网桥ID(BID)较小→端口ID(PID)较小的。端口ID由端口优先级与端口编号组成。

请看下面这张拓扑图:

特殊的: 如果 发送者的BID相同,则比较发送者的PID:

关于选择指定端口:每个网段上选择一个指定端口。
P:每个网段有且只有一个指派端口
选择顺序为:根路径成本较低(花费较低)→发送BPDU的网桥ID值较小→本端口的PID值较小。
根网桥的接口皆为指定端口,因为根网桥上端口的根路径成本为0

第一种情况:假设路径花费不同的情况下 :

既不是根端口也不是指派端口的端口将被阻塞。看上图

⑹ bbo和zookeeper

bbo 是一个远程调用服务的分布式框架,可以实现远程通讯、动态配置、地址路由等等功能。比如在入门demo里的暴露服务,使得远程调用的协议可以使用dobbo协议( bbo://x.x.x.x )或者其它协议,可以配置zookeeper集群地址,实现软负载均衡并配置均衡方式等。在不搭配注册中心的时候,它也是可以实现服务端和调用端的通信的,这种方式是点对点通信的,所谓“没有中间商”。但是如果配置服务发布和调用端过多特别是集群的方式提供服务的时候,就会暴露许多的问题:增加节点需要修改配置文件、服务端机器宕机后不能被感知等。它可以通过集成注册中心,来动态地治理服务发布和服务调用。相当于把服务注册和发布推送的功能分摊给了(zookeeper)注册中心。

Dubbo实现服务调用是通过RPC的方式,即客户端和服务端共用一个接口(将接口打成一个jar包,在客户端和服务端引入这个jar包),客户端面向接口写调用,服务端面向接口写实现,中间的网络通信交给框架去实现。

咱们来看下Spring 配置声明暴露服务,provider.xml文件

再来看服务消费者,consumer.xml文件

这就是典型的点对点的服务调用。当然我们为了高可用,可以在consumer.xml中配置多个服务提供者,并配置响应的负载均衡策略。

配置多个服务调用者在comsumer.xml的bbo:reference标签的url属性中加入多个地址,中间用分号隔开即可;配置负载均衡策略在comsumer.xml的bbo:reference标签中增加loadbalance属性即可,值可以为如下四种类型:

那么目前的架构有什么问题呢?
1.当服务提供者增加节点时,需要修改配置文件。
2.当其中一个服务提供者宕机时,服务消费者不能及时感知到,还会往宕机的服务发送请求。

这个时候就需要引入注册中心了,Dubbo目前支持4种注册中心(multicast、zookeeper、redis、simple)推荐使用Zookeeper注册中心,要使用注册中心,只需要将provider.xml和consumer.xml更改为如下:

如果zookeeper是一个集群,则多个地址之间用逗号分隔即可

把consumer.xml中配置的直连的方式去掉

注册信息在zookeeper中如何保存?
启动上面服务后,我们观察zookeeper的根节点多了一个bbo节点及其他,图示如下

最后一个节点中服务的地址,为什么把最后一个节点标成绿色?因为最后一个节点是临时节点,而其他节点是持久节点,这样,当服务宕机时,这个节点就会自动消失,不再提供服务,服务消费者也不会再请求。如果部署多个DemoService,则providers下面会有好几个节点,一个节点保存一个DemoService的服务地址。
其实一个zookeeper集群能被多个应用公用,因为不同的框架会在zookeeper上建不同的节点,互不影响。如bbo会创建一个/bbo节点,storm会创建一个/storm节点。

zookeeper 介绍:
zookeeper是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。

流程说明:

支持以下功能:

补充:
bbo的协议使用什么序列化框架?
bbo有多种协议,不同的协议默认使用不同的序列化框架。比如bbo协议默认使用 Hessian2 序列化(说明:Hessian2 是阿里在 Hessian 基础上进行的二次开发,起名为Hessian2)。rmi协议默认为 java 原生序列化,http协议默认为为 json。

bbo的通信方式?
采用单一长连接和NIO异步通信,基于Hessian2作为序列化协议。适合于小数据量(每次请求在100kb以内)大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。具体实现是消费者使用 NettyClient,提供者使用 NettyServer,Provider 启动的时候,会开启端口监听,使用我们平时启动 Netty 一样的方式。而 Client 在 Spring getBean 的时候,会创建 Client,调用远程方法的时候,将数据通过DubboCodec编码发送到 NettyServer,然后 NettServer 收到数据后解码,并调用本地方法,并返回数据,完成一次完美的 RPC 调用。

zookeeper选举机制?
zookeeper选举算法默认的是FastLeaderElection,选举机制的概念:
1.服务器ID:比如有三台服务器,编号分别是1、2、3,编号越大在选择算法中的权重越大。
2.事务ID:服务器中存放的最大数据ID(致使ZooKeeper节点状态改变的每一个操作都将更新事务id,即时间戳),值越大说明数据越新,在选举算法中数据越新权重越大。
3.逻辑时钟,或者叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断。
选举状态:LOOKING:竞选状态;FOLLOWING:随从状态,同步leader状态,参与投票;OBSERVING:观察状态,同步leader状态,不参与投票;LEADING:领导者状态。
初次选举简述:
目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:
1.服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。
2.服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
3.服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数为3正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
4.服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
5.服务器5启动,后面的逻辑同服务器4成为小弟。
如果中间有节点挂掉,只要有半数以上节点存活,就可以正常服务,如果leader挂掉,则所有节点处于Looking状态 ,各自依次发起投票,投票包含自己的服务器ID和最新事务ID,如果发现别人的事务id比自己大,也就是数据比自己新,那么就重新发起投票,投票给目前已知最大的事务id所属节点(事务id一样,则数据id大的胜出)。每次投票后,服务器都会统计投票数量,判断是否有某个节点得到半数以上的投票。如果存在这样的节点,该节点将会成为准Leader,状态变为Leading。其他节点的状态变为Following。

引用:
https://www.cnblogs.com/iisme/p/10620125.html

⑺ STP的工作原理和作用

STP的基本原理是通过在交换机之间传递一种特殊的协议报文,网桥协议数据单元(简称BPDU),来确定网络的拓扑结构。BPDU有两种,配置BPDU(和TCNBPDU。前者是用于计算无环的生成树的,后者则是用于在二层网络拓扑发生变化时产生用来缩短MAC表项的刷新时间的。

STP的作用:可应用于计算机网络中树形拓扑结构建立,主要作用是防止网桥网络中的冗余链路形成环路工作,即能解决了核心层网络需要冗余链路的网络健壮性要求,又能解决因为冗余链路形成的物理环路导致“广播风暴”问题。

(7)树选举算法扩展阅读:

STP的潜在故障

1、生成树算法不稳定

STP协议工作在第二层,在交换机端口之间传递网络协议单元获取网络拓扑,并通过STA算法阻断环路形成树形逻辑网络拓扑。但如果网络拓扑过于复杂,STA算法有时会存在失效的情况,这时根桥、根端口和指定端口的选举失败,导致环路的产生,使网络瘫痪。

2、端口工作方式导致端口工作模式不匹配

工作在全双工模式下的端口在发送数据前不载波侦听链路是否处于空闲状态,直接发送数据,而工作在半双工模式下的端口在发送数据前先执行载波侦听且当链路处于空闲状态时才发送数据,此时,全双工端口持续性的有大量数据需要发送,那么半双工状态的端口将不会有数据传送给对端。

3、单向链路故障

在采用光纤为通信介质的网络中,往往采用两组光纤收发链路来保证网络的可靠性和稳定性。单链路故障影响了STP的网桥协议单元的发送,致使STA计算出现错误码,将本应处于阻断状态的端口转变为转发状态,从而导致环路的产生。

⑻ 我也已经25岁其实就有转行的打算了,想转数据分析大数据行业,我大学本科是和这个专业相关的,

读研期间多跟着导师做项目,有些导师手上有很多横向项目,是参与实践的良好途径,其实有人读研期间跟上班一样忙,不要让学校时光虚度。另外,你年龄不小了,可以在读书期间思考以后就业的问题,读书时成家政策也支持,当然有合适的结婚对象才行。

⑼ 对于OSPF协议中路由器之间的邻接关系(adjacency),你有什么理解

在RIP等距离向量路由协议中,路由信息的交互是通过周期性地传送整张路由表的机制来完成的,该机制使距离向量路由协议无法高效地进行路由信息的交换。在OSPF协议中,为了提高传输效率,在进行链路状态通告(LSA)数据包传输时,使用包含LSA头(Head)的链路状态数据库描述数据包进行传输,因为每个LSA头中不包含具体的链路状态信息,它只含有各LSA的标识(该标识唯一代表一个LSA),所以,该报文非常小。邻接路由器间使用这种字节数很小的数据包,首先确认在相互之间哪些LSA是对方没有的,而哪些LSA在对方路由器中也存在,邻接路由器间只会传输对方没有的LSA。对于自己没有的LSA,路由器会发送一个LS Request报文给邻接路由器来请求对方发送该LSA,邻接路由器在收到LS Request报文后,回应一个LS Update报文(包含该整条LSA信息),在得到对方确认后(接收到对方发出的LS ACK报文),这两台路由器完成了本条LSA信息的同步。

由此可见,OSPF协议采用增量传输的方法来使邻接路由器保持一致的链路状态数据库(LSDB)。

小结

综上所述,我们可以归纳出在OSPF协议中使用到的五种协议报文,并简单介绍了它们的作用,我们作个简单的小结:

◆ Hello报文,通过周期性地发送来发现和维护邻接关系;

◆ DD(链路状态数据库描述)报文,描述本地路由器保存的LSDB(链路状态数据库);

◆ LSR(LS Request)报文,向邻居请求本地没有的LSA;

◆ LSU(LS Update)报文,向邻居发送其请求或更新的LSA;

◆ LSAck(LS ACK)报文,收到邻居发送的LSA后发送的确认报文。

OSPF协议采用的特殊机制

指定路由器和备份指定路由器

在OSPF协议中,路由器通过发送Hello报文来确定邻接关系,每一台路由器都会与其他路由器建立邻接关系,这就要求路由器之间两两建立邻接关系,每台路由器都必须与其他路由器建立邻接关系,以达到同步链路状态数据库的目的,在网络中就会建立起n×(n-1)/2条邻接关系(n为网络中OSPF路由器的数量),这样,在进行数据库同步时需要占用一定的带宽。

为了解决这个问题,OSPF采用了一个特殊的机制:选举一台指定路由器(DR),使网络中的其他路由器都和它建立邻接关系,而其他路由器彼此之间不用保持邻接。路由器间链路状态数据库的同步,都通过与指定路由器交互信息完成。这样,在网络中仅需建立n-1条邻接关系。备份指定路由器(BDR)是指定路由器在网络中的备份路由器,它会在指定路由器关机或产生问题后自动接替它的工作。这时,网络中的其他路由器就会和备份指定路由器交互信息来实现数据库的同步。图4是选举指定路由器前后网络中的邻接关系对比。

图1 邻接关系对比

要被选举为指定路由器,该路由器应符合以下要求:

◆ 该路由器是本网段内的OSPF路由器;

◆ 该OSPF路由器在本网段内的优先级(Priority)>0;

◆ 该OSPF路由器的优先级最大,如果所有路由器的优先级相等,路由器号(Router ID)最大的路由器(每台路由器的Router ID是唯一的)被选举为指定路由器。

满足以上条件的路由器被选举为指定路由器,而第二个满足条件的路由器则当选为备份指定路由器。

指定路由器和备份指定路由器的选举,是由路由器通过发送Hello数据报文来完成的。

OSPF协议中的区域划分

OSPF协议在大规模网络的使用中,链路状态数据库比较庞大,它占用了很大的存储空间。在执行最小生成数算法时,要耗费较长的时间和很大的CPU资源,网络拓扑变化的概率也大大增加。这些因素的存在,不仅耗费了路由器大量的存储空间,加重了路由器CPU的负担,而且,整个网络会因为拓扑结构的经常变化,长期处于“动荡”的不可用的状态。

OSPF协议之所以能够支持大规模的网络,进行区域划分是一个重要的原因。

OSPF协议允许网络方案设计人员根据需要把路由器放在不同的区域(Area)中,两个不同的区域通过区域边界路由器(ABR)相连。在区域内部的路由信息同步,采取的方法与上文提到的方法相同。在两个不同区域之间的路由信息传递,由区域边界路由器(ABR)完成。它把相连两个区域内生成的路由,以类型3的LSA向对方区域发送。此时,一个区域内的OSPF路由器只保留本区域内的链路状态信息,没有其他区域的链路状态信息。这样,在两个区域之间减小了链路状态数据库,降低了生成数算法的计算量。同时,当一个区域中的拓扑结构发生变化时,其他区域中的路由器不需要重新进行计算。OSPF协议中的区域划分机制,有效地解决了OSPF在大规模网络中应用时产生的问题。

OSPF协议使用区域号(Area ID)来区分不同的区域,其中,区域0为骨干区域(根区域)。因为在区域间不再进行链路状态信息的交互(实际上,在区域间传递路由信息采用了可能导致路由自环的递归算法),OSPF协议依靠维护整个网络链路状态来实现无路由自环的能力,在区域间无法实现。所以,路由自环可能会发生在OSPF的区域之间。解决这一问题的办法是,使所有其他的区域都连接在骨干区域(Area 0)周围,即所有非骨干区域都与骨干区域邻接。对于一些无法与骨干区域邻接的区域,在它们与骨干区域之间建立虚连接。

结束语

本文对OSPF动态路由协议的主要原理和特性作了简单的介绍,没有涉及到自治系统(AS)以外的路由及路由聚合。

OSPF协议采用路由器间建立和维护邻接关系,维护链路状态信息数据库,采用最短生成树算法,避免了路由自环。同时,又采用了一些特殊的机制,保证了它在大规模网络中的可用性。

热点内容
linux查看arp 发布:2025-08-13 07:53:30 浏览:477
为什么刷机还要弄以前的解锁密码 发布:2025-08-13 07:47:14 浏览:273
acfun如何上传 发布:2025-08-13 07:35:10 浏览:272
ftp共享服务器需要什么配置 发布:2025-08-13 07:33:00 浏览:545
主要数据库 发布:2025-08-13 07:15:27 浏览:180
压缩包漫画 发布:2025-08-13 07:15:25 浏览:133
服务器空岛原版如何获得矿物 发布:2025-08-13 07:08:22 浏览:439
购车时哪些是必备的配置 发布:2025-08-13 06:42:33 浏览:695
宝塔添加脚本 发布:2025-08-13 06:41:56 浏览:504
ios数据库存储 发布:2025-08-13 06:28:10 浏览:977