精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入淺出Zookeeper(一)Zookeeper架構(gòu)及FastLeaderElection機制

開發(fā) 開發(fā)工具
Zookeeper是一個分布式協(xié)調(diào)服務(wù),可用于服務(wù)發(fā)現(xiàn),分布式鎖,分布式領(lǐng)導(dǎo)選舉,配置管理等。本文將介紹Zookeeper如何保證數(shù)據(jù)一致性,如何進行領(lǐng)導(dǎo)選舉,以及數(shù)據(jù)監(jiān)控/通知機制的語義保證。

一、Zookeeper是什么

Zookeeper是一個分布式協(xié)調(diào)服務(wù),可用于服務(wù)發(fā)現(xiàn),分布式鎖,分布式領(lǐng)導(dǎo)選舉,配置管理等。

這一切的基礎(chǔ),都是Zookeeper提供了一個類似于Linux文件系統(tǒng)的樹形結(jié)構(gòu)(可認為是輕量級的內(nèi)存文件系統(tǒng),但只適合存少量信息,完全不適合存儲大量文件或者大文件),同時提供了對于每個節(jié)點的監(jiān)控與通知機制。

既然是一個文件系統(tǒng),就不得不提Zookeeper是如何保證數(shù)據(jù)的一致性的。本文將介紹Zookeeper如何保證數(shù)據(jù)一致性,如何進行領(lǐng)導(dǎo)選舉,以及數(shù)據(jù)監(jiān)控/通知機制的語義保證。

二、Zookeeper架構(gòu)

1. 角色

Zookeeper集群是一個基于主從復(fù)制的高可用集群,每個服務(wù)器承擔如下三種角色中的一種

  • Leader 一個Zookeeper集群同一時間只會有一個實際工作的Leader,它會發(fā)起并維護與各Follwer及Observer間的心跳。所有的寫操作必須要通過Leader完成再由Leader將寫操作廣播給其它服務(wù)器。
  • Follower 一個Zookeeper集群可能同時存在多個Follower,它會響應(yīng)Leader的心跳。Follower可直接處理并返回客戶端的讀請求,同時會將寫請求轉(zhuǎn)發(fā)給Leader處理,并且負責(zé)在Leader處理寫請求時對請求進行投票。
  • Observer 角色與Follower類似,但是無投票權(quán)。

Zookeeper架構(gòu)

2. 原子廣播(ZAB)

為了保證寫操作的一致性與可用性,Zookeeper專門設(shè)計了一種名為原子廣播(ZAB)的支持崩潰恢復(fù)的一致性協(xié)議。基于該協(xié)議,Zookeeper實現(xiàn)了一種主從模式的系統(tǒng)架構(gòu)來保持集群中各個副本之間的數(shù)據(jù)一致性。

根據(jù)ZAB協(xié)議,所有的寫操作都必須通過Leader完成,Leader寫入本地日志后再復(fù)制到所有的Follower節(jié)點。

一旦Leader節(jié)點無法工作,ZAB協(xié)議能夠自動從Follower節(jié)點中重新選出一個合適的替代者,即新的Leader,該過程即為領(lǐng)導(dǎo)選舉。該領(lǐng)導(dǎo)選舉過程,是ZAB協(xié)議中最為重要和復(fù)雜的過程。

3. 寫操作

(1) 寫Leader

通過Leader進行寫操作流程如下圖所示

Zookeeper Leader Write

由上圖可見,通過Leader進行寫操作,主要分為五步:

  1. 客戶端向Leader發(fā)起寫請求
  2. Leader將寫請求以Proposal的形式發(fā)給所有Follower并等待ACK
  3. Follower收到Leader的Proposal后返回ACK
  4. Leader得到過半數(shù)的ACK(Leader對自己默認有一個ACK)后向所有的Follower和Observer發(fā)送Commmit
  5. Leader將處理結(jié)果返回給客戶端

這里要注意

  • Leader并不需要得到Observer的ACK,即Observer無投票權(quán)
  • Leader不需要得到所有Follower的ACK,只要收到過半的ACK即可,同時Leader本身對自己有一個ACK。上圖中有4個Follower,只需其中兩個返回ACK即可,因為(2+1) / (4+1) > 1/2
  • Observer雖然無投票權(quán),但仍須同步Leader的數(shù)據(jù)從而在處理讀請求時可以返回盡可能新的數(shù)據(jù)

(2) 寫Follower/Observer

通過Follower/Observer進行寫操作流程如下圖所示:

Zookeeper Follower/Observer Write

從上圖可見

  • Follower/Observer均可接受寫請求,但不能直接處理,而需要將寫請求轉(zhuǎn)發(fā)給Leader處理
  • 除了多了一步請求轉(zhuǎn)發(fā),其它流程與直接寫Leader無任何區(qū)別

4. 讀操作

Leader/Follower/Observer都可直接處理讀請求,從本地內(nèi)存中讀取數(shù)據(jù)并返回給客戶端即可。

Zookeeper Read

由于處理讀請求不需要服務(wù)器之間的交互,F(xiàn)ollower/Observer越多,整體可處理的讀請求量越大,也即讀性能越好。

三、FastLeaderElection原理

1. 術(shù)語介紹

(1) myid

每個Zookeeper服務(wù)器,都需要在數(shù)據(jù)文件夾下創(chuàng)建一個名為myid的文件,該文件包含整個Zookeeper集群唯一的ID(整數(shù))。例如某Zookeeper集群包含三臺服務(wù)器,hostname分別為zoo1、zoo2和zoo3,其myid分別為1、2和3,則在配置文件中其ID與hostname必須一一對應(yīng),如下所示。在該配置文件中,server.后面的數(shù)據(jù)即為myid

  1. server.1=zoo1:2888:3888 
  2. server.2=zoo2:2888:3888 
  3. server.3=zoo3:2888:3888 

(2) zxid

類似于RDBMS中的事務(wù)ID,用于標識一次更新操作的Proposal ID。為了保證順序性,該zkid必須單調(diào)遞增。因此Zookeeper使用一個64位的數(shù)來表示,高32位是Leader的epoch,從1開始,每次選出新的Leader,epoch加一。低32位為該epoch內(nèi)的序號,每次epoch變化,都將低32位的序號重置。這樣保證了zkid的全局遞增性。

2. 支持的領(lǐng)導(dǎo)選舉算法

可通過electionAlg配置項設(shè)置Zookeeper用于領(lǐng)導(dǎo)選舉的算法。

到3.4.10版本為止,可選項有

  • 基于UDP的LeaderElection
  • 基于UDP的FastLeaderElection
  • 基于UDP和認證的FastLeaderElection
  • 基于TCP的FastLeaderElection

在3.4.10版本中,默認值為3,也即基于TCP的FastLeaderElection。另外三種算法已經(jīng)被棄用,并且有計劃在之后的版本中將它們徹底刪除而不再支持。

3. FastLeaderElection

FastLeaderElection選舉算法是標準的Fast Paxos算法實現(xiàn),可解決LeaderElection選舉算法收斂速度慢的問題。

4. 服務(wù)器狀態(tài)

  • LOOKING 不確定Leader狀態(tài)。該狀態(tài)下的服務(wù)器認為當前集群中沒有Leader,會發(fā)起Leader選舉
  • FOLLOWING 跟隨者狀態(tài)。表明當前服務(wù)器角色是Follower,并且它知道Leader是誰
  • LEADING 領(lǐng)導(dǎo)者狀態(tài)。表明當前服務(wù)器角色是Leader,它會維護與Follower間的心跳
  • OBSERVING 觀察者狀態(tài)。表明當前服務(wù)器角色是Observer,與Folower唯一的不同在于不參與選舉,也不參與集群寫操作時的投票

5. 選票數(shù)據(jù)結(jié)構(gòu)

每個服務(wù)器在進行領(lǐng)導(dǎo)選舉時,會發(fā)送如下關(guān)鍵信息

  • logicClock 每個服務(wù)器會維護一個自增的整數(shù),名為logicClock,它表示這是該服務(wù)器發(fā)起的第多少輪投票
  • state 當前服務(wù)器的狀態(tài)
  • self_id 當前服務(wù)器的myid
  • self_zxid 當前服務(wù)器上所保存的數(shù)據(jù)的最大zxid
  • vote_id 被推舉的服務(wù)器的myid
  • vote_zxid 被推舉的服務(wù)器上所保存的數(shù)據(jù)的最大zxid

6. 投票流程

(1) 自增選舉輪次

Zookeeper規(guī)定所有有效的投票都必須在同一輪次中。每個服務(wù)器在開始新一輪投票時,會先對自己維護的logicClock進行自增操作。

(2) 初始化選票

每個服務(wù)器在廣播自己的選票前,會將自己的投票箱清空。該投票箱記錄了所收到的選票。例:服務(wù)器2投票給服務(wù)器3,服務(wù)器3投票給服務(wù)器1,則服務(wù)器1的投票箱為(2, 3), (3, 1), (1, 1)。票箱中只會記錄每一投票者的最后一票,如投票者更新自己的選票,則其它服務(wù)器收到該新選票后會在自己票箱中更新該服務(wù)器的選票。

(3) 發(fā)送初始化選票

每個服務(wù)器最開始都是通過廣播把票投給自己。

(4) 接收外部投票

服務(wù)器會嘗試從其它服務(wù)器獲取投票,并記入自己的投票箱內(nèi)。如果無法獲取任何外部投票,則會確認自己是否與集群中其它服務(wù)器保持著有效連接。如果是,則再次發(fā)送自己的投票;如果否,則馬上與之建立連接。

(5) 判斷選舉輪次

收到外部投票后,首先會根據(jù)投票信息中所包含的logicClock來進行不同處理

  • 外部投票的logicClock大于自己的logicClock。說明該服務(wù)器的選舉輪次落后于其它服務(wù)器的選舉輪次,立即清空自己的投票箱并將自己的logicClock更新為收到的logicClock,然后再對比自己之前的投票與收到的投票以確定是否需要變更自己的投票,最終再次將自己的投票廣播出去。
  • 外部投票的logicClock小于自己的logicClock。當前服務(wù)器直接忽略該投票,繼續(xù)處理下一個投票。
  • 外部投票的logickClock與自己的相等。當時進行選票PK。

(6) 選票PK

選票PK是基于(self_id, self_zxid)與(vote_id, vote_zxid)的對比

  • 外部投票的logicClock大于自己的logicClock,則將自己的logicClock及自己的選票的logicClock變更為收到的logicClock
  • 若logicClock一致,則對比二者的vote_zxid,若外部投票的vote_zxid比較大,則將自己的票中的vote_zxid與vote_myid更新為收到的票中的vote_zxid與vote_myid并廣播出去,另外將收到的票及自己更新后的票放入自己的票箱。如果票箱內(nèi)已存在(self_myid, self_zxid)相同的選票,則直接覆蓋
  • 若二者vote_zxid一致,則比較二者的vote_myid,若外部投票的vote_myid比較大,則將自己的票中的vote_myid更新為收到的票中的vote_myid并廣播出去,另外將收到的票及自己更新后的票放入自己的票箱

(7) 統(tǒng)計選票

如果已經(jīng)確定有過半服務(wù)器認可了自己的投票(可能是更新后的投票),則終止投票。否則繼續(xù)接收其它服務(wù)器的投票。

(8) 更新服務(wù)器狀態(tài)

投票終止后,服務(wù)器開始更新自身狀態(tài)。若過半的票投給了自己,則將自己的服務(wù)器狀態(tài)更新為LEADING,否則將自己的狀態(tài)更新為FOLLOWING

四、幾種領(lǐng)導(dǎo)選舉場景

1. 集群啟動領(lǐng)導(dǎo)選舉

(1) 初始投票給自己

集群剛啟動時,所有服務(wù)器的logicClock都為1,zxid都為0。

各服務(wù)器初始化后,都投票給自己,并將自己的一票存入自己的票箱,如下圖所示。

集群啟動

在上圖中,(1, 1, 0)第一位數(shù)代表投出該選票的服務(wù)器的logicClock,第二位數(shù)代表被推薦的服務(wù)器的myid,第三位代表被推薦的服務(wù)器的最大的zxid。由于該步驟中所有選票都投給自己,所以第二位的myid即是自己的myid,第三位的zxid即是自己的zxid。

此時各自的票箱中只有自己投給自己的一票。

(2) 更新選票

服務(wù)器收到外部投票后,進行選票PK,相應(yīng)更新自己的選票并廣播出去,并將合適的選票存入自己的票箱,如下圖所示。

集群啟動

服務(wù)器1收到服務(wù)器2的選票(1, 2, 0)和服務(wù)器3的選票(1, 3, 0)后,由于所有的logicClock都相等,所有的zxid都相等,因此根據(jù)myid判斷應(yīng)該將自己的選票按照服務(wù)器3的選票更新為(1, 3, 0),并將自己的票箱全部清空,再將服務(wù)器3的選票與自己的選票存入自己的票箱,接著將自己更新后的選票廣播出去。此時服務(wù)器1票箱內(nèi)的選票為(1, 3),(3, 3)。

同理,服務(wù)器2收到服務(wù)器3的選票后也將自己的選票更新為(1, 3, 0)并存入票箱然后廣播。此時服務(wù)器2票箱內(nèi)的選票為(2, 3),(3, ,3)。

服務(wù)器3根據(jù)上述規(guī)則,無須更新選票,自身的票箱內(nèi)選票仍為(3, 3)。

服務(wù)器1與服務(wù)器2更新后的選票廣播出去后,由于三個服務(wù)器最新選票都相同,最后三者的票箱內(nèi)都包含三張投給服務(wù)器3的選票。

(3) 根據(jù)選票確定角色

根據(jù)上述選票,三個服務(wù)器一致認為此時服務(wù)器3應(yīng)該是Leader。因此服務(wù)器1和2都進入FOLLOWING狀態(tài),而服務(wù)器3進入LEADING狀態(tài)。之后Leader發(fā)起并維護與Follower間的心跳。

Cluster start election step 3

2. Follower重啟

(1) Follower重啟投票給自己

Follower重啟,或者發(fā)生網(wǎng)絡(luò)分區(qū)后找不到Leader,會進入LOOKING狀態(tài)并發(fā)起新的一輪投票。

Follower restart election step 1

(2) 發(fā)現(xiàn)已有Leader后成為Follower

服務(wù)器3收到服務(wù)器1的投票后,將自己的狀態(tài)LEADING以及選票返回給服務(wù)器1。服務(wù)器2收到服務(wù)器1的投票后,將自己的狀態(tài)FOLLOWING及選票返回給服務(wù)器1。此時服務(wù)器1知道服務(wù)器3是Leader,并且通過服務(wù)器2與服務(wù)器3的選票可以確定服務(wù)器3確實得到了超過半數(shù)的選票。因此服務(wù)器1進入FOLLOWING狀態(tài)。

Follower restart election step 2

3. Leader重啟

(1) Follower發(fā)起新投票

Leader(服務(wù)器3)宕機后,F(xiàn)ollower(服務(wù)器1和2)發(fā)現(xiàn)Leader不工作了,因此進入LOOKING狀態(tài)并發(fā)起新的一輪投票,并且都將票投給自己。

Leader restart election step 1

(2) 廣播更新選票

服務(wù)器1和2根據(jù)外部投票確定是否要更新自身的選票。這里有兩種情況

  • 服務(wù)器1和2的zxid相同。例如在服務(wù)器3宕機前服務(wù)器1與2完全與之同步。此時選票的更新主要取決于myid的大小
  • 服務(wù)器1和2的zxid不同。在舊Leader宕機之前,其所主導(dǎo)的寫操作,只需過半服務(wù)器確認即可,而不需所有服務(wù)器確認。換句話說,服務(wù)器1和2可能一個與舊Leader同步(即zxid與之相同)另一個不同步(即zxid比之小)。此時選票的更新主要取決于誰的zxid較大

在上圖中,服務(wù)器1的zxid為11,而服務(wù)器2的zxid為10,因此服務(wù)器2將自身選票更新為(3, 1, 11),如下圖所示。

Leader restart election step 2

(3) 選出新Leader

經(jīng)過上一步選票更新后,服務(wù)器1與服務(wù)器2均將選票投給服務(wù)器1,因此服務(wù)器2成為Follower,而服務(wù)器1成為新的Leader并維護與服務(wù)器2的心跳。

Leader restart election step 3

(4) 舊Leader恢復(fù)后發(fā)起選舉

舊的Leader恢復(fù)后,進入LOOKING狀態(tài)并發(fā)起新一輪領(lǐng)導(dǎo)選舉,并將選票投給自己。此時服務(wù)器1會將自己的LEADING狀態(tài)及選票(3, 1, 11)返回給服務(wù)器3,而服務(wù)器2將自己的FOLLOWING狀態(tài)及選票(3, 1, 11)返回給服務(wù)器3。如下圖所示。

Leader restart election step 4

(5) 舊Leader成為Follower

服務(wù)器3了解到Leader為服務(wù)器1,且根據(jù)選票了解到服務(wù)器1確實得到過半服務(wù)器的選票,因此自己進入FOLLOWING狀態(tài)。

Leader restart election step 5

五、一致性保證

ZAB協(xié)議保證了在Leader選舉的過程中,已經(jīng)被Commit的數(shù)據(jù)不會丟失,未被Commit的數(shù)據(jù)對客戶端不可見。

1. Commit過的數(shù)據(jù)不丟失

(1) Failover前狀態(tài)

為更好演示Leader Failover過程,本例中共使用5個Zookeeper服務(wù)器。A作為Leader,共收到P1、P2、P3三條消息,并且Commit了1和2,且總體順序為P1、P2、C1、P3、C2。根據(jù)順序性原則,其它Follower收到的消息的順序肯定與之相同。其中B與A完全同步,C收到P1、P2、C1,D收到P1、P2,E收到P1,如下圖所示。

Leader Failover step 1

這里要注意

  • 由于A沒有C3,意味著收到P3的服務(wù)器的總個數(shù)不會超過一半,也即包含A在內(nèi)最多只有兩臺服務(wù)器收到P3。在這里A和B收到P3,其它服務(wù)器均未收到P3
  • 由于A已寫入C1、C2,說明它已經(jīng)Commit了P1、P2,因此整個集群有超過一半的服務(wù)器,即最少三個服務(wù)器收到P1、P2。在這里所有服務(wù)器都收到了P1,除E外其它服務(wù)器也都收到了P2

(2) 選出新Leader

舊Leader也即A宕機后,其它服務(wù)器根據(jù)上述FastLeaderElection算法選出B作為新的Leader。C、D和E成為Follower且以B為Leader后,會主動將自己最大的zxid發(fā)送給B,B會將Follower的zxid與自身zxid間的所有被Commit過的消息同步給Follower,如下圖所示。

Leader Failover step 2

在上圖中

  • P1和P2都被A Commit,因此B會通過同步保證P1、P2、C1與C2都存在于C、D和E中
  • P3由于未被A Commit,同時幸存的所有服務(wù)器中P3未存在于大多數(shù)據(jù)服務(wù)器中,因此它不會被同步到其它Follower

(3) 通知Follower可對外服務(wù)

同步完數(shù)據(jù)后,B會向D、C和E發(fā)送NEWLEADER命令并等待大多數(shù)服務(wù)器的ACK(下圖中D和E已返回ACK,加上B自身,已經(jīng)占集群的大多數(shù)),然后向所有服務(wù)器廣播UPTODATE命令。收到該命令后的服務(wù)器即可對外提供服務(wù)。

Leader Failover step 3

2. 未Commit過的消息對客戶端不可見

在上例中,P3未被A Commit過,同時因為沒有過半的服務(wù)器收到P3,因此B也未Commit P3(如果有過半服務(wù)器收到P3,即使A未Commit P3,B會主動Commit P3,即C3),所以它不會將P3廣播出去。

具體做法是,B在成為Leader后,先判斷自身未Commit的消息(本例中即P3)是否存在于大多數(shù)服務(wù)器中從而決定是否要將其Commit。然后B可得出自身所包含的被Commit過的消息中的最小zxid(記為min_zxid)與最大zxid(記為max_zxid)。C、D和E向B發(fā)送自身Commit過的最大消息zxid(記為max_zxid)以及未被Commit過的所有消息(記為zxid_set)。B根據(jù)這些信息作出如下操作

  • 如果Follower的max_zxid與Leader的max_zxid相等,說明該Follower與Leader完全同步,無須同步任何數(shù)據(jù)
  • 如果Follower的max_zxid在Leader的(min_zxid,max_zxid)范圍內(nèi),Leader會通過TRUNC命令通知Follower將其zxid_set中大于Follower的max_zxid(如果有)的所有消息全部刪除

上述操作保證了未被Commit過的消息不會被Commit從而對外不可見。

上述例子中Follower上并不存在未被Commit的消息。但可考慮這種情況,如果將上述例子中的服務(wù)器數(shù)量從五增加到七,服務(wù)器F包含P1、P2、C1、P3,服務(wù)器G包含P1、P2。此時服務(wù)器F、A和B都包含P3,但是因為票數(shù)未過半,因此B作為Leader不會Commit P3,而會通過TRUNC命令通知F刪除P3。如下圖所示。

Leader Failover step 4

六、總結(jié)

  • 由于使用主從復(fù)制模式,所有的寫操作都要由Leader主導(dǎo)完成,而讀操作可通過任意節(jié)點完成,因此Zookeeper讀性能遠好于寫性能,更適合讀多寫少的場景
  • 雖然使用主從復(fù)制模式,同一時間只有一個Leader,但是Failover機制保證了集群不存在單點失敗(SPOF)的問題
  • ZAB協(xié)議保證了Failover過程中的數(shù)據(jù)一致性
  • 服務(wù)器收到數(shù)據(jù)后先寫本地文件再進行處理,保證了數(shù)據(jù)的持久性

【本文為51CTO專欄作者“郭俊”的原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2022-03-23 18:58:11

ZookeeperZAB 協(xié)議

2018-01-25 19:01:47

Zookeeper分布式數(shù)據(jù)

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2016-10-14 13:53:05

JavascriptDOMWeb

2023-11-12 00:10:07

Redis高可用

2020-05-27 20:25:47

SpringSpringBoot數(shù)據(jù)

2022-01-12 08:54:52

Spring編程架構(gòu)設(shè)計

2021-07-20 15:20:02

FlatBuffers阿里云Java

2017-07-02 18:04:53

塊加密算法AES算法

2012-05-21 10:06:26

FrameworkCocoa

2019-01-07 15:29:07

HadoopYarn架構(gòu)調(diào)度器

2023-02-14 08:00:00

MySQL索引查詢

2022-09-26 09:01:15

語言數(shù)據(jù)JavaScript

2020-07-29 10:10:37

HTTP緩存前端

2022-01-13 09:38:25

Android架構(gòu)設(shè)計

2017-07-17 11:52:54

jQuery源碼分析前端框架類庫

2023-05-18 08:54:22

OkHttp源碼解析

2019-11-11 14:51:19

Java數(shù)據(jù)結(jié)構(gòu)Properties

2009-11-30 16:46:29

學(xué)習(xí)Linux
點贊
收藏

51CTO技術(shù)棧公眾號

国产乱女淫av麻豆国产| 亚洲一区二区在线观| 日韩黄色精品视频| 亚洲电影男人天堂| 欧美日韩国产美| 91传媒免费视频| 欧美亚洲日本| 极品尤物av久久免费看| 久久91亚洲人成电影网站| 亚洲一区二区三区综合| 国产精品亚洲成在人线| 亚洲va欧美va人人爽午夜| 色涩成人影视在线播放| 亚洲av无码一区二区三区dv| 久久亚洲综合| 欧美高清视频在线| 91精品国自产在线| 卡通动漫国产精品| 在线播放日韩导航| 欧美 国产 小说 另类| 在线heyzo| 中文字幕乱码亚洲精品一区| 国产一区二区三区高清视频| 国产精品久久久久久久免费| 久久婷婷影院| 韩国精品美女www爽爽爽视频| 欧美视频一区二区在线| 综合亚洲自拍| 精品欧美一区二区三区精品久久| 91看片在线免费观看| 激情黄产视频在线免费观看| 亚洲精品视频自拍| 一区二区三区观看| 大乳在线免费观看| 91色综合久久久久婷婷| 国产精品10p综合二区| 国产又大又黑又粗| 另类的小说在线视频另类成人小视频在线| 9.1国产丝袜在线观看| 麻豆国产尤物av尤物在线观看| 色135综合网| 中文欧美日本在线资源| 欧美图片第一页| 啪啪激情综合网| 亚洲白拍色综合图区| 久久久久亚洲av片无码v| 欧美黄页免费| 欧美日韩一本到| 奇米影音第四色| 成人涩涩视频| 欧美日韩另类一区| 久热精品在线播放| 国产精品亚洲成在人线| 欧美在线影院一区二区| 激情视频综合网| 成人线上视频| 91国偷自产一区二区使用方法| 极品美女扒开粉嫩小泬| 日本а中文在线天堂| 岛国av一区二区三区| 日日碰狠狠添天天爽超碰97| 天堂√8在线中文| 欧美性69xxxx肥| 国产精品亚洲a| 日韩一级二级| 欧美日韩的一区二区| 中文字幕一区二区在线观看视频 | 亚洲中无吗在线| 久久亚洲欧美日韩精品专区| 成年人午夜剧场| 欧美日韩免费| 97精品久久久中文字幕免费| 国产超碰人人爽人人做人人爱| 9久re热视频在线精品| 国产69久久精品成人| 免费看av在线| 国产在线不卡一区| 成人动漫视频在线观看免费| 手机看片福利在线| 国产亚洲一二三区| 黄色a级在线观看| 青草影视电视剧免费播放在线观看| 亚洲福利视频导航| 18岁视频在线观看| 色综合视频一区二区三区日韩| 欧美一卡在线观看| 制服丝袜第一页在线观看| 午夜a一级毛片亚洲欧洲| 中文字幕日韩在线视频| 九九热国产在线| 水野朝阳av一区二区三区| 国产欧美日韩精品丝袜高跟鞋| av中文字幕播放| 久久综合999| 成人性做爰片免费视频| 性国裸体高清亚洲| 91精品国产综合久久精品| 中文字幕免费高清视频| 欧美丝袜激情| 久久久亚洲国产天美传媒修理工| 国产农村妇女aaaaa视频| 激情五月激情综合网| 久久国产一区| www在线视频| 欧美最猛性xxxxx直播| 久久久久久久久久影视| 精品色999| 97av在线影院| 国产激情视频在线播放| 久久久久久久久久美女| 996这里只有精品| 日本精品网站| 日韩av在线免费| 国模无码国产精品视频| 久久久人人人| www.久久艹| 日本亚洲精品| 日本高清不卡在线观看| 国产在线不卡av| 仙踪林久久久久久久999| 欧美壮男野外gaytube| 精品人妻久久久久一区二区三区| 欧美国产视频在线| 国产女女做受ⅹxx高潮| 大奶在线精品| 美日韩丰满少妇在线观看| 国产精品sm调教免费专区| 91偷拍与自偷拍精品| 黄色网在线视频| 成人97精品毛片免费看| 夜夜嗨av色一区二区不卡| 一级黄色免费网站| 成人高清视频免费观看| 69精品丰满人妻无码视频a片| 成人免费网站www网站高清| 亚洲女在线观看| 亚洲天堂一区在线观看| 99久久99精品久久久久久| 免费在线黄网站| 亚洲日本一区二区三区在线| 精品国产欧美一区二区三区成人| 日韩xxx视频| 国产日韩欧美在线一区| 日韩少妇内射免费播放18禁裸乳| 第四色在线一区二区| 欧美福利小视频| 午夜精品一区二区三| 亚洲激情男女视频| 巨乳女教师的诱惑| 综合一区在线| 亚洲free性xxxx护士hd| 性欧美videos高清hd4k| 精品美女在线播放| 国产在线免费视频| 成人综合婷婷国产精品久久免费| 丰满人妻一区二区三区53号| 日本免费一区二区三区视频| 色综合老司机第九色激情| 亚洲AV无码成人片在线观看| 亚洲一区二区视频在线观看| 性感美女一区二区三区| 亚洲三级视频| 欧美一二三四五区| 精品女同一区二区三区在线观看| 日韩中文娱乐网| 国产精品呻吟久久| 亚洲国产视频网站| av鲁丝一区鲁丝二区鲁丝三区| 欧美一级网站| 亚洲蜜桃av| 日韩区一区二| 91av在线免费观看| 成人亚洲综合天堂| 欧美一级高清大全免费观看| 欧美一级高潮片| 91视频免费观看| 天天综合网日韩| 欧美国产精品| 精选一区二区三区四区五区| 中文另类视频| 久久国产精品影片| 丝袜+亚洲+另类+欧美+变态| 欧美日韩一区二区在线观看视频| 东方av正在进入| 99re这里只有精品6| wwww.国产| 国产精品黄色| 欧美亚洲另类在线一区二区三区| 日韩在线电影| 韩剧1988免费观看全集| 99riav在线| 亚洲国产精品va在线看黑人| 中文天堂在线资源| 亚洲最快最全在线视频| av网站免费在线看| 国产精品77777竹菊影视小说| 欧美精品99久久| 亚洲精品一区二区妖精| 狠狠久久综合婷婷不卡| 国产精品一区二区三区av| 45www国产精品网站| 久久精品视频观看| 亚洲免费影视第一页| 国产成年妇视频| 欧美影院一区二区三区| 免费在线视频观看| 国产精品天干天干在线综合| 国产伦精品一区二区免费| 精品一区二区在线视频| 成人综合视频在线| 一本一本久久a久久综合精品| 欧美日产一区二区三区在线观看| 日韩成人18| 国产精品视频午夜| 松下纱荣子在线观看| 欧美激情视频网| 欧美精品hd| 一区二区欧美日韩视频| 色综合视频在线| 91精品国产一区二区三区| 懂色av中文字幕| 天天色图综合网| 国产一级在线观看视频| 亚洲天堂精品在线观看| 人妻熟人中文字幕一区二区| 99久久精品国产麻豆演员表| 成人三级做爰av| 极品销魂美女一区二区三区| 丰满少妇在线观看| 久久综合激情| 亚洲中文字幕久久精品无码喷水| 99精品视频免费观看| 欧美高清中文字幕| 欧美日韩免费| 国产爆乳无码一区二区麻豆| 亚洲a一区二区三区| 亚洲一区二区精品在线| 不卡av一区二区| 视频一区视频二区视频三区高| 亚洲+变态+欧美+另类+精品| 国产视频不卡| 久久99精品国产自在现线| 99精品在线直播| 深夜福利一区| 99电影网电视剧在线观看| 一区中文字幕| 国产精品xxxx| 人人香蕉久久| 久久99导航| 蜜桃国内精品久久久久软件9| 久久久com| 尤物tv在线精品| 日韩av电影在线观看| 国产欧美日韩在线观看视频| 偷拍视频一区二区| 欧美电影免费播放| 麻豆md0077饥渴少妇| 欧美日韩 国产精品| 久久综合久久网| 亚洲欧美日韩在线观看a三区| 久久久久久久久久久久久国产精品| 欧美专区在线| 免费看涩涩视频| 久久精品国产亚洲一区二区三区| 五月六月丁香婷婷| 成人性生交大片免费| 日本xxxx裸体xxxx| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩女同一区二区三区| 亚洲欧洲精品一区二区精品久久久 | 很污的网站在线观看| 日韩五码在线| 国产免费999| 国产主播一区二区三区| 久久久久亚洲AV成人网人人小说| 99精品视频在线免费观看| 久久久久久久毛片| 亚洲精品国产一区二区精华液| 男人天堂中文字幕| 欧美在线小视频| 超碰在线观看av| 亚洲免费一在线| av在线free| 秋霞av国产精品一区| av在线精品| 国精产品一区二区| 欧美超碰在线| 欧美 日本 亚洲| 狠狠色狠狠色合久久伊人| 又黄又爽的网站| 国产精品乱子久久久久| 激情五月色婷婷| 56国语精品自产拍在线观看| 天堂在线视频网站| 久久精品99国产精品酒店日本| 24小时免费看片在线观看| 国产精品91在线| 精品精品国产毛片在线看| 亚洲欧美成人一区| 亚洲一区二区免费看| 人妻少妇偷人精品久久久任期| 久久影院午夜论| 国产亚洲欧美精品久久久www| 在线视频你懂得一区二区三区| 亚洲av无码国产精品永久一区 | 5566av亚洲| 欧美日中文字幕| 欧美深夜福利视频| 国产伦精品一区二区三区免费 | 大色综合视频网站在线播放| 久久亚洲精品无码va白人极品| 美女网站在线免费欧美精品| www.88av| 亚洲一区国产视频| 国产精品久久婷婷| 国产一区二区动漫| av电影一区| 成人羞羞视频免费| 欧美精品videos另类| 天天综合天天综合色| 亚洲激情五月婷婷| 国产成人在线播放视频| 欧美一区二区三区四区五区| 免费在线观看污视频| 欧美精品久久久久久久免费观看| 青青久久精品| 日韩色妇久久av| 久久久蜜桃一区二区人| 免费的av网站| 婷婷成人综合网| 丰满人妻一区二区三区免费| 久久精品亚洲一区| 外国成人毛片| 一本一道久久久a久久久精品91 | 中文字幕在线播放不卡一区| 中文字幕高清在线免费播放| 亚洲激情第一页| 24小时免费看片在线观看| 成人91视频| 欧美一区在线看| 夜夜爽久久精品91| 亚洲天堂免费看| 99精品视频免费看| 欧美精品手机在线| 日韩精品视频一区二区三区| 久久久久久久久久久久久国产| 精品制服美女丁香| 永久免费看mv网站入口| 在线播放一区二区三区| 国产欧美久久久久久久久| 成人a在线观看| 中文字幕午夜精品一区二区三区| av在线网址导航| 自拍偷在线精品自拍偷无码专区| 91国内精品久久久| 久热99视频在线观看| 亚洲午夜精品| 免费不卡av在线| 91农村精品一区二区在线| 男人天堂2024| 在线免费观看羞羞视频一区二区| 国产精品伦一区二区| 自拍偷拍视频在线| 国产xxx精品视频大全| 日韩av男人天堂| 亚洲人成电影网站色xx| 欧美成人福利| 久久久久久久久网| 97久久精品人人做人人爽| 午夜影院免费在线观看| 中文字幕久热精品视频在线| 国产精品视频首页| 国产精品久久国产| 久久久久久久久久久久久夜| 一区二区视频网站| 欧美人与性动交| 天堂俺去俺来也www久久婷婷 | 国产裸体歌舞团一区二区| 久久中文字幕无码| 亚洲人成绝费网站色www| 日韩精品第二页| 久久99久久99精品| 国产日韩欧美一区二区三区综合 | 韩国理伦片一区二区三区在线播放| 久久久久久久久久久久久女过产乱| 精品久久人人做人人爽| 亚洲精品一级二级| 国产激情在线看| 久久久无码精品亚洲日韩按摩| 国产精品嫩草影院桃色| 992tv在线成人免费观看| 国产精品成人一区二区不卡| 中文字幕乱码在线| 欧美精三区欧美精三区| 草美女在线观看| 影音先锋在线亚洲| 久久综合狠狠综合| 亚洲高清视频在线播放| 国产精品夜间视频香蕉| 亚洲尤物在线|