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

實現分布式共識算法-Raft算法

開發 前端 分布式 算法
C(一致性)A(可用性)P(分區容忍性)原理是分布式系統永遠繞不開的話題,在任何的分布式系統中,可用性、一致性和分區容忍性這三個方面都是相互矛盾的,三者不可兼得,最多只能取其二。

[[385285]]

筆者開源了自己實現的Java版Raft算法框架raft-core

項目鏈接:https://github.com/wujiuye/delay-scheduler/tree/main/raft/raft-core

該項目代碼是delay-scheduler(分布式延遲調度中間件)的子模塊,水平有限,建議只學習使用。

關于CAP原理

C(一致性)A(可用性)P(分區容忍性)原理是分布式系統永遠繞不開的話題,在任何的分布式系統中,可用性、一致性和分區容忍性這三個方面都是相互矛盾的,三者不可兼得,最多只能取其二。

AP:如果要求系統高可用(A)和分區容錯(P),那么就必須放棄一致性(C);

CP:如果要求數據強一致(C),由于網絡分區會導致同步時間無限延長(P),可用性就得不到保障,那么就要放棄可用性(A);

CA:如果不存在網絡分區(分區指不同機房/國家/地區)(P),那么強一致性(C)和可用性(A)可以同時滿足。

Raft一致性算法簡介

在Raft集群中,每個節點都對應一個角色,要么是Leader(領導節點),要么是Follower(跟隨節點),在未選舉出Leader之前,每個節點都可以是Candidate(候選節點)。

Raft算法約定Raft集群只能有一個Leader節點,并且只能由Leader節點處理客戶端的讀寫請求,將寫請求轉譯為操作日記,由Leader節點將操作日記復制給其它Follower節點,當Leader節點成功將一條操作日記同步到多數節點上時(包括自己在內的多數節點),就可以將操作日記應用到狀態機,由狀態機執行寫操作(執行命令),以此保證數據的最終一致性。

我們可以把Binlog看成Mysql數據庫執行的寫操作的命令,而MyISAM存儲引擎是Binlog的狀態機,用于執行命令。

實現Raft算法需要實現的兩個RPC接口:

  • RequestVoteRpc:選舉時由當前候選節點向其它節點發起拉票請求;
  • AppendEmtriesRpc:由Leader節點向其它Follower節點發送日記復制請求、心跳請求以及提交日記請求。

定時心跳計時器

Leader節點需要定時向其它Follower節點發送心跳包,以刷新其它Follower節點上的選舉超時計時。

心跳計時器在節點成為Leader節點時啟動,而在節點變為Follower節點時停止。要求心跳超時時間間隔要比超時選舉時間間隔長,即Heartbeat Timeout(心跳包廣播時間)< Election Timeout(選舉超時時間)。

超時選舉計時器

當計時達到超時(Election Timeout)閾值時觸發Leader選舉,當前節點將任期號+1,并嘗試給自己投一票(如果還未將票投給其它候選人),給自己投票成功則將自己變成候選人,并向其它節點發起拉票請求。

超時選舉計時器的當前計時可被重置,在接收到AppendEntriesRPC(含心跳請求)請求時重新計時。要求每個節點的超時閾值要不一樣,避免同時發起拉票請求,導致多輪選舉都未能選出Leader的情況發生。

Leader選舉流程

Leader通過投票選舉機制選舉,每個任期號每個節點都只能有一票,每個節點都優先考慮投給自己,獲得多數選票的節點將成為Leader節點,因此Raft集群要求至少3個節點,并且Raft集群節點總數最好是奇數。

RequestVoteRpc請求數據包(拉票數據包):

  1. public class RequestVote { 
  2.     private long term; 
  3.     private int candidateId; 
  4.     private long lastLogIndex; 
  5.     private long lastLogTerm; 
  • term:拉票方(候選節點)的當前任期號;
  • candidateId:拉票方的節點ID;
  • lastLogIndex:拉票方最新日記條目的索引值;
  • lastLogTerm:拉票方最新日記條目對應的任期號。

RequestVoteRpc響應數據包(投票數據包):

  1. public class RequestVoteResp { 
  2.     private long term; 
  3.     private boolean voteGranted; 
  • term:投票方的當前任期號,用于告知拉票方更新term值;
  • voteGranted:如果投票方將選票投給拉票方,則voteGranted為true,否則為false。

在選舉計時器超時時發起拉票請求流程如下:

1)將自己本地維護的當前任期號(term)加1;

2)為自己投票,投票成功再將自己的狀態切換到候選節點(Candidate),因此每個候選節點的第一張選票來自于它自己;

3)向其所在集群中的其他節點發送RequestVoteRPC請求(拉票請求),要求它們投票給自己。

每個節點接收到其它候選節點發來的拉票請求時需根據節點當前任期號、日記同步情況、是否已經將當前期的一票投給了其它節點(包括自己)等作出如下反應:

1)、如果拉票方的term小于自身的當前term,返回false,提醒拉票方term過時,并明確告訴拉票方,這張選票不會投給它;

2)、如果拉票方的term大于自身的當前term,且如果之前沒有把選票投給任何人(包括自己),則將選票投給該節點,返回拉票方的term和true;

3)、否則如果拉票方的term等于自身的當前term,如果已經把選票投給了拉票方(重復發起請求場景),并且請求方的日記和自己的日記一樣新,則返回拉票方的term和true;

4)、否則,如果在此之前,已經把選票投給了其他人,則這張選票不能投給請求方,并明確告訴請求方,這張選票不會投給它。

候選節點廣播發起拉票請求后需根據最終投票結果作出如下反應:

1)、如果多數節點連接異常,則繼續當前期重新發起一次拉票,即多數節點掛掉選舉異常;

2)、得到大多數節點的選票成為Leader,包括自己投給自己的一票,但每個節點只有一票,投給了自己就不能投給其它節點;

3)、發現其它節點贏得了選舉(當拉票請求響應的term大于當前候選節點的term時,認為其它節點贏得了選舉)則主動切換回Follower;

4)、當超時選舉計時器又觸發超時選舉時,說明沒有接收到Leader的心跳包,最后一次選舉沒有節點贏得選舉成為Leader,那么繼續發起選舉。

如果是其它節點成為當前期的Leader,Leader會通過發送心跳包告知自己,要留給Leader足夠時間發送心跳包給自己,因此選舉超時要大于心跳超時,也就是:Heartbeat Timeout(心跳包廣播時間)< Election Timeout(選舉超時時間)。

在選舉結束后,每個Follower節點必須記錄當前期的Leader節點是哪個,Leader節點必須記錄其它所有Follower節點。Leader節點需要向其它Follower節點發送心跳包以及日記同步請求,而其它Follower節點在接收到客戶端請求時需要告知客戶端重定向到Leader節點發送請求。

Raft日志復制流程

在Raft集群中,Leader節點負責接收客戶端的讀寫請求,如果是Follower接收請求,則需要將請求重定向到Leader節點。

如果Leader節點接收的是讀請求,則Leader節點可直接查詢數據響應給客戶端;如果Leader節點接收的是寫請求,則Leader節點先將寫請求轉譯為一條操作日記,并將操作日記Append到本地,同時向其它節點發起AppendEntriesRPC調用,將該操作日記復制給其它節點,在成功復制多數節點后,Leader節點提交該操作日記,提交成功則應用到狀態機,再異步的向其它節點發起AppendEntriesRPC調用,告知其它Follower節點該日記已經提交,Follower節點接收提交請求后,先將日記改為已提交狀態,再將日記應用到狀態機。

AppendEntriesRPC請求數據包(Leader節點向其它Follower節點發起rpc請求,要求其它Follower節點復制這個日記條目):

  1. public class AppendEntries implements Cloneable { 
  2.     private long term; 
  3.     private int leaderId; 
  4.     private long prevLogIndex; 
  5.     private long prevLogTerm; 
  6.     private long leaderCommit; 
  7.     private CommandLog[] entries; 
  • term:Leader節點創建該日記條目時的任期號;
  • leaderId:Leader節點的ID,為了其它Follower節點能夠重定向客戶端請求到Leader節點;
  • prevLogIndex:Leader節點已提交的日記中最新一條日記的索引;
  • prevLogTerm:Leader節點已提交的日記中最新一條日記的任期號;
  • leaderCommit:Leader節點為每個Follower都維護一個leaderCommit,表示Leader節點認為Follower已經提交的日記條目索引值;
  • entries:將要追加到Follower上的日記條目,如果是心跳包,則entries為空。

AppendEntriesRPC響應數據包(AppendEntries RPC響應):

  1. public class AppendEntriesResp { 
  2.     private long term; 
  3.     private boolean success; 

term:當前任期號,取值為Max(AppendEntries請求攜帶的term,Follower本地維護的term),用于Leader節點更新自己的任期號,一旦Leader節點發現任期號比自己的要大,就表明自己是一個過時的Leader,需要停止發送心跳包,主動切換為Follower;

success:接收者(Follower)是否能夠匹配prevLogIndex和prevLogTerm,匹配即說明請求成功。

Leader節點處理客戶端寫請求以及將寫請求日記復制給Follower的流程:

0)、客戶端向Leader發送寫請求;

1)、Leader將寫請求解析成操作指令日記追加到本地日志文件中;

2)、Leader異步向其它Follower節點發送AppendEntriesRPC請求;

3)、阻塞等待多數節點響應成功,多數節點至少是節點總數除以2加1,由于Leader節點自己也算一個,因此只需要節點總數除以2個節點響應成功即可;

4)、如果多數節點響應成功:Leader將該日志條目提交并應用到本地狀態機,異步告知其它Follower節點日記已經提交,之后立即向客戶端返回操作結果;

5)、否則:響應失敗給客戶端。

Follower節點處理日記復制請求流程:

0)、接收到任何AppendEntriesRPC請求(包含心跳包請求、提交日記請求、追加日記請求),都重置選舉超時計時器的當前計時;

1)、如果自身的term大于請求參數term,另本地記錄的Leader的任期號小于自身,則返回自身的term,且success為false(告知請求方:你已經是過期的Leader);

2)、否則如果Follower自身在prevLogIndex日記的任期號與請求參數prevLogTerm不匹配,返回自身的term,且success為false(當前Follower節點的日記落后了);

3)、否則如果當前只是一個心跳包,說明是接收到Leader的心跳,說明自己已經是Follower,如果需要則將自己從候選節點切換為Follower節點,返回自身的term,且success為true;

4)、否則,Follower進行日記一致性檢查,刪除已經存在但不一致的日記,添加任何在已有的日記中不存在的條目,刪除多余的條目,并且,如果是復制已經提交的條目,復制成功時直接提交;

5)、如果請求參數的leaderCommit大于自身的當前commitIndex,則將commitIndex更新為Max(leaderCommit,commitIndex),樂觀地將本地已提交日記的commitIndex躍進到領導人為該Follower跟蹤記得的值,用于Follower剛從故障中恢復過來的場景。

如果Follower節點向Leader節點響應日記追加失敗且Follower節點的當前期號小于等于Leader的當前期號,Leader節點將請求參數prevLogIndex遞減,然后重新發起AppendEntriesRPC請求,直到AppendEntriesRPC返回成功為止,這才表明在prevLogIndex位置的日志條目中領導人與追隨者的保持一致。這時,Follower節點上prevLogIndex位置之前的日志條目將全部保留,在prevLogIndex位置之后(與Leader有沖突)的日志條目將被Follower全部刪除,并且從該位置起追加Leader上在prevLogIndex位置之后的所有日志條目。因此,一旦AppendEntriesRPC返回成功,Leader和Follower的日志就可以保持一致了。

一致性

由于一個候選節點必須是得到多數節點投票才能成為Leader,且投票時節點不會把票投給沒有自己的日志新的候選節點,再者Leader只在已經將日記成功同步給多數節點(包括自己)才提交日記(將日記變成已提交狀態,同時應用到狀態機),因此每次選舉出來的Leader就都是包含所有已提交日志的節點。

當新的Leader節點將新日記同步給某個Follower節點時,如果該Follower節點的日記落后很多,該Follower節點會主動移除Leader上沒有的日記,并且同步Leader節點日記給Follower。對于Leader節點已經標志為已提交的日記,Follower在接收時就可以直接應用到狀態機,以保持數據最終一致性。

Multi Raft

假設有三臺機器,每臺機器部署一個Raft節點服務,由于讀寫請求都由Leader節點處理,那么不就只能有一臺機器工作?

我們可以給一個節點服務啟動多個Raft服務(注意不是多個進程),構造成多個Raft集群,即Multi Raft,這樣每個Raft集群的Leader節點就可能均勻分布在多臺機器上。例如:

機器 Raft節點 Raft節點 Raft節點
機器1 Raft服務A節點1Leader Raft服務B節點1Follower Raft服務C節點1Follower
機器2 Raft服務A節點2Follower Raft服務B節點2Leader Raft服務C節點2Follower
機器3 Raft服務A節點3Follower Raft服務B節點3Follower Raft服務C節點3Leader

在分布式數據庫TiDB中,就采用了Multi Raft,將數據進行分片處理,讓每個Raft集群單獨負責一部分數據。

參考文獻

華為云容器服務團隊.《云原生分布式存儲基石:etcd深入解析》 (云計算技術系列叢書)

Raft論文地址

Raft論文中文版:https://github.com/maemual/raft-zh_cn

圖片來源

圖片來源:https://github.com/maemual/raft-zh_cn/tree/master/images

本文轉載自微信公眾號「Java藝術」,可以通過以下二維碼關注。轉載本文請聯系Java藝術公眾號。

 

責任編輯:武曉燕 來源: Java藝術
相關推薦

2023-08-04 07:28:00

2023-04-05 10:00:00

分布式算法

2023-11-02 09:33:31

Go語言Raft算法

2022-10-21 13:55:18

Paxos分布式系統

2021-05-31 08:01:11

Raft共識算法

2025-06-05 03:22:00

Raft服務器日志

2021-01-26 13:27:11

分布 Raft 算法

2021-12-20 07:51:17

分布式 Kv分布式 Kv

2021-04-19 08:16:53

算法Raft 共識

2024-10-16 09:53:07

2024-05-27 10:42:55

2024-01-11 08:13:49

Raft算法分布式

2025-05-13 02:10:00

2023-07-11 10:24:00

分布式限流算法

2018-03-14 10:06:25

2019-09-05 13:06:08

雪花算法分布式ID

2025-03-24 11:30:05

2024-01-18 10:52:38

Raft數據庫

2024-11-19 15:55:49

2019-07-12 09:14:07

分布式系統負載均衡
點贊
收藏

51CTO技術棧公眾號

粉嫩虎白女毛片人体| 欧美在线国产| 热久久免费视频| 日韩精品中文字幕一区二区三区| 欧洲成人在线视频| 95视频在线观看| 国产精品扒开做爽爽爽的视频 | 成人av动漫| 成人中文字幕在线| 天堂av中文在线资源库| 国产福利第一页| 第四色成人网| 色94色欧美sute亚洲线路二| 国产精品久久波多野结衣| www.com.av| www.成人在线视频| 日本一区二区三区在线不卡| 国产高清在线不卡| 国产aⅴ激情无码久久久无码| 超碰高清在线| 99精品视频在线免费观看| 久久久久久国产免费| 极品白嫩的小少妇| 小明成人免费视频一区| 中文字幕高清不卡| 91免费福利视频| √天堂中文官网8在线| 国产精品777777在线播放| 亚洲日韩欧美一区二区在线| 成人亚洲欧美一区二区三区| 精品无码久久久久成人漫画| 美女少妇全过程你懂的久久| 色乱码一区二区三区88| 精品无码国产一区二区三区av | 欧美美女一区二区在线观看| 致1999电视剧免费观看策驰影院| 91丨porny丨在线中文 | 在线播放日韩av| 日本新janpanese乱熟| 91九色在线porn| 国产一区二区三区在线观看免费 | 亚洲国产日韩欧美在线99| 欧美 丝袜 自拍 制服 另类| 免费在线超碰| 精品午夜久久福利影院| 欧美国产亚洲视频| 在线免费观看黄色小视频| 婷婷激情一区| 亚洲女子a中天字幕| 国产日韩二区| 中文字幕观看在线| 欧美在线网址| 久久精品亚洲94久久精品| 人妻换人妻a片爽麻豆| 欧美日韩美女| 色哟哟一区二区三区| japanese在线视频| 天天干天天爽天天操| 麻豆精品新av中文字幕| 欧美精品久久久久a| 九九九久久久久| 精品国产91| 777色狠狠一区二区三区| 黄色成人在线看| 欧美r级在线| 久久影院视频免费| 99在线首页视频| а中文在线天堂| 国产伊人精品| 日韩网站免费观看| av网站免费在线播放| 日韩理论电影中文字幕| 日韩午夜激情av| 天天综合网久久| 亚洲一区站长工具| 亚洲自拍欧美精品| 亚洲一区二区三区免费看| 日本精品999| 国产一区激情在线| 超碰97国产在线| 色av男人的天堂免费在线| 国产乱码精品一品二品| 国产精品久久久999| 成人毛片18女人毛片| 欧美二区视频| 91高清视频免费| 国产一级视频在线| 欧美激情1区2区3区| 久久久亚洲福利精品午夜| 国产稀缺精品盗摄盗拍| 国内精品久久久久久久97牛牛 | 国产精品永久在线| 一区二区成人免费视频| av一区二区在线观看| 精品国偷自产在线视频99| 久久精品欧美一区二区| 日日骚欧美日韩| 97人人做人人爱| 欧美卡一卡二卡三| 欧美jizz| 日韩三级成人av网| 国产无遮挡免费视频| 日韩高清在线电影| 国产精品成人一区二区三区| 国产免费的av| 国产自产高清不卡| 久久综合九色欧美狠狠| 午夜性色福利视频| zzijzzij亚洲日本少妇熟睡| 国产乱码精品一区二区三区日韩精品| 免费在线毛片| 一区二区久久久| 男女无套免费视频网站动漫| 日韩中文在线播放| 欧美成人官网二区| 影音先锋资源av| 狠狠综合久久av一区二区蜜桃 | 国产日韩欧美一二三区| 性高潮视频在线观看| 成人午夜精品在线| 国产又粗又大又爽的视频| 国产大片在线免费观看| 日本一区二区三区dvd视频在线| 色一情一乱一乱一区91| 黄页网站在线| 欧美日韩国产丝袜美女| 欧美亚洲国产成人| 香蕉视频亚洲一级| 欧美精品一区二区在线观看| 800av在线播放| 精品影片在线观看的网站| 欧美激情视频免费观看| 国产情侣激情自拍| 国产精品久久久久久久午夜片| 在线视频不卡一区二区三区| 性欧美videohd高精| 日韩精品欧美国产精品忘忧草| 亚洲一区视频在线播放| 香蕉久久夜色精品| 国产精品视频导航| 精品人妻伦一二三区久久| 成人免费观看男女羞羞视频| 黑人巨大国产9丨视频| 日韩在线激情| 亚洲国产欧美一区二区三区同亚洲| 男女羞羞免费视频| 国产精品主播直播| 国产911在线观看| 免费欧美网站| 亚洲区免费影片| √天堂中文官网8在线| 精品一区二区三区香蕉蜜桃| 国内视频一区| 77thz桃花论族在线观看| 欧美综合一区二区三区| 91人妻一区二区| 禁久久精品乱码| 国产精品久久久久久久久男| 国产高清视频在线播放| 91福利在线播放| 国产午夜精品久久久久久久久| 欧美全黄视频| 国产精品你懂得| 午夜小视频在线| 欧美日韩另类字幕中文| 90岁老太婆乱淫| 亚洲午夜黄色| 久久亚裔精品欧美| 日本另类视频| 久久不射热爱视频精品| 天码人妻一区二区三区在线看| 狠狠色丁香九九婷婷综合五月| 中文视频一区视频二区视频三区| 精品国模一区二区三区欧美 | 午夜不卡影院| 欧美一区午夜视频在线观看| 国产人妻一区二区| 免费av成人在线| 蜜桃视频成人| 亚洲精品一区av| 在线电影av不卡网址| 色悠悠久久88| 久久婷婷五月综合色国产香蕉| 开心激情综合| 久久精品亚洲一区| 成人午夜福利视频| 亚洲欧美色综合| 国产xxxx视频| 欧美日韩蜜桃| 蜜桃精品久久久久久久免费影院| 国产一区二区三区影视| 欧美精品日韩三级| 91精东传媒理伦片在线观看| 亚洲黄色小视频| 制服丝袜中文字幕第一页| 国产成人精品999在线观看| 国产在线视频不卡| 秋霞伦理一区| 国产视频精品一区二区三区| 亚洲国产精品午夜在线观看| 成人自拍视频在线观看| 亚洲色图久久久| 国产精品theporn| 日韩福利视频| 久久av影院| 久久精品99无色码中文字幕| 成人午夜福利视频| 欧美伊人久久久久久午夜久久久久| 国产色视频一区二区三区qq号| 久久丁香综合五月国产三级网站| 黄色一级在线视频| 任你躁在线精品免费| 68精品久久久久久欧美| 久操视频在线观看| 亚洲视频在线免费看| 欧美 日韩 国产 精品| 51精品国自产在线| 波多野结衣视频免费观看| 国产欧美精品一区二区三区四区| 香蕉视频在线观看黄| 欧美激情91| 亚洲一区尤物| 欧美一二区在线观看| 精品国产一区二区三区日日嗨| 欧美男人天堂| 欧美激情三级免费| av色综合久久天堂av色综合在| 日韩精品一区在线| 亚洲视频一区二区三区四区| 亚洲欧美韩国综合色| 亚洲精品91在线| 国产在线麻豆精品观看| 精品日韩久久久| 亚洲色图欧美| 精品综合在线| 国产精品对白| 国产福利精品视频| 成人动漫一区| 日本久久中文字幕| 成人毛片av在线| 中文字幕欧美日韩在线| 性一交一乱一色一视频麻豆| 岛国视频午夜一区免费在线观看| 精品无码m3u8在线观看| 久久久久久久久99精品| 亚洲综合激情视频| 99精品视频免费观看| 亚洲精品高清国产一线久久| 77成人影视| 国产精品看片资源| 成人在线免费电影网站| 国产精品视频久久久| 四虎国产精品免费久久| 91免费在线视频网站| 精品视频在线观看网站| 成人久久18免费网站漫画| 在线播放一区二区精品视频| 超碰97在线人人| 久久久久久毛片免费看 | 亚洲人123区| 日本a级片视频| 亚洲韩国一区二区三区| 国产熟女一区二区| 欧美国产精品劲爆| 国产精品视频一区二区在线观看| av网站免费线看精品| 亚洲av无码一区二区三区观看| 久久日一线二线三线suv| 日本一二三不卡视频| va亚洲va日韩不卡在线观看| 无遮挡aaaaa大片免费看| 国产精品18久久久久久久久久久久 | 午夜国产精品视频免费体验区| 免费在线黄网站| 日韩国产专区| 鲁丝一区二区三区免费| 欧美丝袜丝交足nylons172| 欧美日韩视频免费在线观看| 精久久久久久| 91蝌蚪视频在线观看| 国产精品影视网| 男生裸体视频网站| 国产精品传媒视频| 极品蜜桃臀肥臀-x88av| 一色桃子久久精品亚洲| 亚洲性猛交xxxx乱大交| 国产精品久久久99| 国产午夜久久久| 欧美无人高清视频在线观看| 性做久久久久久久| 亚洲天堂av网| 日韩激情av| 久久国产精品影片| 欧美13videosex性极品| 成人黄色片网站| 欧美综合自拍| 国产精品一二三在线观看| 男女精品网站| 日本三级免费观看| 香蕉视频成人在线观看| 色偷偷中文字幕| 国产福利视频一区二区三区| 88久久精品无码一区二区毛片| 亚洲精品国产无套在线观| 亚洲不卡在线视频| 欧美综合视频在线观看| 精品乱子伦一区二区| 一区二区三区黄色| xxx.xxx欧美| 成人做爽爽免费视频| 亚洲ab电影| 午夜精品亚洲一区二区三区嫩草 | 国产色一区二区三区| 麻豆成人综合网| 免费看黄色的视频| 五月激情综合色| 国产精品免费精品一区| 欧美v亚洲v综合ⅴ国产v| 欧洲不卡av| 国产精品久久久久久久久久久久久久 | 欧美精品色一区二区三区| 理论视频在线| 欧美性一区二区三区| 日韩在线观看不卡| 久久久久久一区| 日韩在线观看| 日本三区在线观看| 91视频国产资源| 特级西西人体高清大胆| 色狠狠色狠狠综合| 青青操在线视频| 97色在线视频| 精品丝袜久久| av7777777| 99久精品国产| 好吊妞视频一区二区三区| 精品蜜桃在线看| 激情av在线| 国产偷久久久精品专区| 亚洲激情自拍| 亚洲欧美国产中文| 中国色在线观看另类| 中文字幕有码视频| 中文字幕日韩av电影| 国产综合色激情| 一区二区不卡在线| 狠狠色丁香久久婷婷综| 1024手机在线视频| 日韩无一区二区| 毛片在线网址| 国产精品一区二区三区毛片淫片 | 久久精品国产亚洲av麻豆蜜芽| 亚洲午夜激情免费视频| 四虎av在线| 成人免费在线一区二区三区| 极品裸体白嫩激情啪啪国产精品| 91人妻一区二区| 精品日本美女福利在线观看| 日本中文字幕电影在线观看| 国产97免费视| 91视频久久| 少妇高潮一69aⅹ| 欧美日韩国产一区在线| 国产一二三区在线| 久久免费成人精品视频| 麻豆成人入口| 冲田杏梨av在线| 亚洲美女少妇撒尿| 日韩中文字幕综合| 国产91在线播放九色快色| 国产精品久久久久无码av| 成人免费观看毛片| 日本一区二区三区国色天香| 国产视频在线免费观看| 97精品伊人久久久大香线蕉| 欧美日中文字幕| 免费高清视频在线观看| 欧美日韩中文在线观看| 人妻少妇一区二区三区| 日韩av电影中文字幕| 亚洲91视频| 国产午夜福利100集发布| 日本动漫同人动漫在线观看| 亚洲色图综合网| 综合久草视频| 可以在线看的av网站| 中文字幕精品—区二区四季| 成人黄色免费视频| 国产精品v片在线观看不卡| 一区二区在线影院| 中文字幕人妻一区二区| 日韩一区二区三区电影 | 99精品全国免费观看视频软件| 在线观看欧美一区二区| 在线观看欧美黄色| 波多野结衣在线高清| 在线看成人av电影| 91麻豆精品在线观看| 99这里有精品视频| 国产成人精品久久二区二区|