day03 zookeeper筆記
高併發基礎
Day03
複習:
1. Concurrent
包
-
原子性操作。本質上就是對資料進行了加鎖。
2. NIO
:同步式阻塞式
IO
。在操作的時候基於選擇器,面向通道進行傳輸,利用緩衝區作為載體來儲存資料。
1. Buffer
:緩衝區。儲存資料,並且儲存的都是基本型別的資料,底層是以陣列來作為儲存結構
---
標記位
mark <=
操作位
position<=
限制位
limit<=
容量位
capacity ---
翻轉、重置、重繞、清空
2. Channel
:通道。用於傳輸資料,面向緩衝區進行操作。雙向傳輸。
3. Selector
:多路複用選擇器。針對事件進行選擇。保證使用少量的執行緒去處理大量的請求。
Zookeeper
是
Apache
開發的開源元件。是
Hadoop
的子間件之一,但是不只是支援
Hadoop
,支援常見的大部分的分散式框架。
分散式存在的問題
1.
需要設定管理節點
2.
如果管理節點只有一個,那麼就存在單點問題:即這臺伺服器一旦當機,那麼入口被封閉。
3.
為了解決單點問題,引入管理叢集,就會產生多個管理者的情況
4.
需要在管理叢集中選出一個
leader
5.
確定一套選舉機制
6.
管理節點之間實現資訊的共享
7.
需要一套機制來確定一個唯一的
leader
8.
分散式鎖:死鎖,活鎖
(
沒有把持資源,佔用
CPU)
。
搭建單機的
Zookeeper
1.
執行環境中必須安裝了
JDK1.6
及以上
2.
解壓
Zookeeper
的壓縮包
3.
開啟
conf
(配置)
4. cp zoo_sample.cfg zoo.cfg --- zookeeper
在啟動的時候需要自動尋找
zoo.cfg
5. cd ../bin
6.
啟動
Zookeeper
的伺服器:
sh zkServer.sh start
1. jps:
檢視
java
程式,如果是單機的,可以用這種方式檢視,如果是叢集版本,則不意味著叢集就搭建成功
2. sh zkServer.sh status Standalone
7. Zookeeper
進行啟動的時候,會在啟動的目錄下生成一個
zookeeper.out,
儲存的就是啟動的資訊日誌。
Zookeeper
的預設埠號是
2181
Zookeeper
的結構
1. Zookeeper
本身一個樹狀結構
2.
根節點是
/
3.
每一個節點都要儲存資料
4.
沒有相對路徑,只有絕對路徑
5.
每一個節點的路徑是唯一的
6.
任意一個持久節點都可以掛載子節點
7.
所有的臨時節點都不能掛載子節點
8.
所有節點儲存的資料是位元組形式
9. Zookeeper
構成的這棵樹是維繫在記憶體中
10.
每一個節點是一個
znode
節點
Zookeeper
的基本命令
1. ls
路徑 檢視指定路徑下的所有的子節點
2. create
路徑 資料 建立節點
3. create -e
路徑 資料 建立臨時節點
4. get
路徑 檢視指定節點的資訊
5. set
路徑 資料 修改指定節點的資料
6. delete
路徑 刪除指定節點,但是要求節點下沒有子節點
7. rmr
路徑 刪除這個節點及其子節點
節點資訊
Zookeeper
會對每一次發生的事務(建立、更新、刪除)進行一個編號,編號是依次遞增
1
個
cZxid
建立事務
id
ctime
建立時間
mZxid
修改事務
id
mtime
修改時間
pZxid
最大事務
id
cversion
建立版本
dataVersion
資料版本 節點的資料每修改依次,那麼資料版本就
+1
Zookeeper
節點的型別
持久節點
- 0
:可以掛載子節點
臨時節點
- 1
:不能掛載子節點,關機即沒
持久順序節點
- 2
:會對節點順次編號
臨時順序節點
- 3
:
-e -s
Zookeeper
本身是基於
Netty
的
Zookeeper
的
API
操作
pom
檔案需要加入的依賴:
Zookeeper
的叢集配置
1.
解壓壓縮包
2.
進入
conf
目錄
3. cp zoo_sample.cfg zoo.cfg
4.
編輯
zoo.cfg
,改變屬性
dataDir=/home/software/zookeeper-3.4.8/tmp
5. server.
編號
=ip
地址
:2888:3888 --- 2888
是原子廣播埠,
3888
是選舉埠,只要埠不衝突就可以使用
6.
需要在
dataDir
指定的目錄下來建立一個檔案
:myid,
檔案內容就是當前伺服器的編號
7.
其他伺服器依次做類似操作
scp -r
檔案
ip
地址
:
存放路徑
scp -r zookeeper-3.4.8 10.9.130.83:/home/software
注意:
如果在叢集中只啟動了一個節點,那麼這個節點預設是失敗的,至少出現一半以上的節點才能查
看狀態。
ZooKeeper
的選舉機制
1.
資料恢復階段:保證每一個節點都能找到當前節點的最大事務
id
2.
選舉階段:每一個節點都會提交自己的選舉資訊,並且推薦自己當
leader
。在選舉的時候比較每一個節點所提
交的選舉資訊(最大事務
id---pZxid
,選舉
id---myid,
邏輯時鐘
---
保證是同一輪選舉)
,
在選舉的時候是先比較
兩個節點的最大事務
id
,誰大誰就勝出。如果事務
id
一致,那麼就根據
myid
進行比較,誰大誰勝出。選舉的
時候不是一次勝出就能夠當
leader
,而是要滿足過半性原則。一旦選出
leader
,後續新增的節點無論事務
id
和
myid
是多少,都只能作為
follower
。每一個節點將會對應不同的狀態:
Looking
(選舉)
,Follower(
追隨
)
,
Leader
(管理)
,Observer(
觀察
)
3.
叢集要想對外提供服務,也需要滿足過半性:即至少有一半以上有選舉權的伺服器還存活。
4.
叢集在選舉過程中不對外提供服務。
Observer -
觀察者
和
follower
一樣具有對外提供事務的能力,但是不參加選舉。適用於網路不穩定條件下的事務處理。
過半性的意義
1.
選舉要滿足過半性
2.
處理事務的時候需要有過半的節點同意才能處理
3.
防止腦裂
---
通常都會將節點個數設定為奇數個
Zookeeper
根據
Paxos
來進行選舉的。
------------------------------------------------------------------------
其它:
zookeeper 3.4.7
1.setData()不會檢查節點是否存在,即使節點不存在也不會報錯
2.Watcher對當前操作註冊監聽,當發生當前事件的時候回撥用Watcher的方法
3.透過CountDownLatch的方法避免主執行緒先退出,無法看到測試結果
4.Observer角色,只參加事務的處理,不參加選舉,如果所有的observer都掛掉,
叢集依舊正常執行,只有屬於leader+follower的一半掛掉,叢集才會癱瘓
5.過半性,為了防止鬧裂(選舉的時候如果有兩個一半選出兩個leader)
6.有follower當機重啟後會將缺少的事務恢復
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2216949/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Java筆記]day03Java筆記
- Zookeeper學習筆記筆記
- ZooKeeper筆記(1):ZooKeeper特性與基本概念筆記
- Spring boot + Zookeeper + Dubbo學習筆記Springboot筆記
- ZooKeeper學習筆記一:叢集搭建筆記
- ZooKeeper學習筆記三:使用ZooKeeper實現一個簡單的配置中心筆記
- ZooKeeper學習筆記四:使用ZooKeeper實現一個簡單的分散式鎖筆記分散式
- Day03
- ZooKeeper一致性協議ZAB學習筆記協議筆記
- Zookeeper學習筆記(一)基本概念和簡單使用筆記
- day03 字串字串
- Javaweb——(day03)jQueryJavaWebjQuery
- Day03 陣列陣列
- 記一次zookeeper not connected
- 嵌入式day03
- Java 初學 day03Java
- day03 流程控制
- JAVA學習day03Java
- [異常筆記] zookeeper叢集啟動異常: Cannot open channel to 2 at election address ……筆記
- 學習日報 day03
- 多執行緒Day03執行緒
- 【zookeeper】zookeeper分散式鎖分散式
- 2-44鍾靜雯_day03
- 印象筆記 --- 方法分享筆記筆記
- 七張圖徹底講清楚ZooKeeper分散式鎖的實現原理【石杉的架構筆記】分散式架構筆記
- zookeeper
- 筆記筆記
- 【zookeeper之七】Zookeeper客戶端客戶端
- 【Zookeeper】zookeeper客戶端KeeperErrorCode = ConnectionLoss客戶端Error
- 自學老男孩pyhton-day02,day03
- Day03:檔案開啟;錯誤處理
- zookeeper學習04 zookeeper收尾+dubbo前瞻
- Zookeeper原始碼分析(二) —– zookeeper日誌原始碼
- Zookeeper原始碼分析(二) ----- zookeeper日誌原始碼
- Zookeeper系列一:Zookeeper基礎命令操作
- ZooKeeper 系列(一)—— ZooKeeper核心概念詳解
- ZooKeeper 06 - ZooKeeper 的常用命令
- zookeeper理解