樹選舉演算法
⑴ 大數據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協議採用路由器間建立和維護鄰接關系,維護鏈路狀態信息資料庫,採用最短生成樹演算法,避免了路由自環。同時,又採用了一些特殊的機制,保證了它在大規模網路中的可用性。