成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 解析Redis Cluster原理

解析Redis Cluster原理

熱門標(biāo)簽:日本中國地圖標(biāo)注 超呼電話機(jī)器人 貴州電銷卡外呼系統(tǒng) 山東外呼銷售系統(tǒng)招商 魔獸2青云地圖標(biāo)注 十堰營銷電銷機(jī)器人哪家便宜 北京400電話辦理收費(fèi)標(biāo)準(zhǔn) 鄭州人工智能電銷機(jī)器人系統(tǒng) 宿遷便宜外呼系統(tǒng)平臺

一、前言

Sentinel集群會對Redis的主從架構(gòu)中的Redis實(shí)例進(jìn)行監(jiān)控,一旦發(fā)現(xiàn)了master節(jié)點(diǎn)宕機(jī)了,就會選舉出一個(gè)Sentinel節(jié)點(diǎn)來執(zhí)行故障轉(zhuǎn)移,從原來的slave節(jié)點(diǎn)中選舉出一個(gè),將其提升為master節(jié)點(diǎn),然后讓其他的節(jié)點(diǎn)去復(fù)制新選舉出來的master節(jié)點(diǎn)。

你可能會覺得這樣沒有問題啊,甚至能夠滿足我們生產(chǎn)環(huán)境的使用需求了,那我們?yōu)槭裁催€需要Redis Cluster呢?

二、為什么需要Redis Cluster

的確,在數(shù)據(jù)上,有replication副本做保證;可用性上,master宕機(jī)會自動的執(zhí)行failover。

那問題在哪兒呢?

首先Redis Sentinel說白了也是基于主從復(fù)制,在主從復(fù)制中slave的數(shù)據(jù)是完全來自于master。

假設(shè)master節(jié)點(diǎn)的內(nèi)存只有4G,那slave節(jié)點(diǎn)所能存儲的數(shù)據(jù)上限也只能是4G。主從復(fù)制架構(gòu)中是讀寫分離的,我們可以通過增加slave節(jié)點(diǎn)來擴(kuò)展主從的讀并發(fā)能力,但是寫能力和存儲能力是無法進(jìn)行擴(kuò)展的,就只能是master節(jié)點(diǎn)能夠承載的上限。

所以,當(dāng)你只需要存儲4G的數(shù)據(jù)時(shí)候的,基于主從復(fù)制和基于Sentinel的高可用架構(gòu)是完全夠用的。

但是如果當(dāng)你面臨的是海量的數(shù)據(jù)的時(shí)候呢?16G、64G、256G甚至1T呢?現(xiàn)在互聯(lián)網(wǎng)的業(yè)務(wù)里面,如果你的體量足夠大,我覺得是肯定會面臨緩存海量緩存數(shù)據(jù)的場景的。

這就是為什么我們需要引入Redis Cluster。

三、Redis Cluster是什么

知道了為什么需要Redis Cluster之后,我們就可以來對其一探究竟了。

那什么是Redis Cluster呢?

很簡單,你就可以理解為n個(gè)主從架構(gòu)組合在一起對外服務(wù)。Redis Cluster要求至少需要3個(gè)master才能組成一個(gè)集群,同時(shí)每個(gè)master至少需要有一個(gè)slave節(jié)點(diǎn)。

這樣一來,如果一個(gè)主從能夠存儲32G的數(shù)據(jù),如果這個(gè)集群包含了兩個(gè)主從,則整個(gè)集群就能夠存儲64G的數(shù)據(jù)。

我們知道,主從架構(gòu)中,可以通過增加slave節(jié)點(diǎn)的方式來擴(kuò)展讀請求的并發(fā)量,那Redis Cluster中是如何做的呢?雖然每個(gè)master下都掛載了一個(gè)slave節(jié)點(diǎn),但是在Redis Cluster中的讀、寫請求其實(shí)都是在master上完成的。

slave節(jié)點(diǎn)只是充當(dāng)了一個(gè)數(shù)據(jù)備份的角色,當(dāng)master發(fā)生了宕機(jī),就會將對應(yīng)的slave節(jié)點(diǎn)提拔為master,來重新對外提供服務(wù)。

四、節(jié)點(diǎn)負(fù)載均衡

知道了什么是Redis Cluster,我們就可以繼續(xù)下面的討論了。

不知道你思考過一個(gè)問題沒,這么多的master節(jié)點(diǎn)。我存儲的時(shí)候,到底該選擇哪個(gè)節(jié)點(diǎn)呢?一般這種負(fù)載均衡算法,會選擇哈希算法。哈希算法是怎么做的呢?

首先就是對key計(jì)算出一個(gè)hash值,然后用哈希值對master數(shù)量進(jìn)行取模。由此就可以將key負(fù)載均衡到每一個(gè)Redis節(jié)點(diǎn)上去。這就是簡單的哈希算法的實(shí)現(xiàn)。

那Redis Cluster是采取的上面的哈希算法嗎?答案是沒有。

Redis Cluster其實(shí)采取的是類似于一致性哈希的算法來實(shí)現(xiàn)節(jié)點(diǎn)選擇的。那為什么不用哈希算法來進(jìn)行實(shí)例選擇呢?以及為什么說是類似的呢?我們繼續(xù)討論。

因?yàn)槿绻藭r(shí)某一臺master發(fā)生了宕機(jī),那么此時(shí)會導(dǎo)致Redis中所有的緩存失效。為什么是所有的?假設(shè)之前有3個(gè)master,那么之前的算法應(yīng)該是 hash % 3,但是如果其中一臺master宕機(jī)了,則算法就會變成 hash % 2,會影響到之前存儲的所有的key。而這對緩存后面保護(hù)的DB來說,是致命的打擊。

五、什么是一致性哈希

知道了通過傳統(tǒng)哈希算法來實(shí)現(xiàn)對節(jié)點(diǎn)的負(fù)載均衡的弊端,我們就需要進(jìn)一步了解什么是一致性哈希。

我們上面提過哈希算法是對master實(shí)例數(shù)量來取模,而一致性哈希則是對2^32取模,也就是值的范圍在[0, 2^32 -1]。一致性哈希將其范圍抽象成了一個(gè)圓環(huán),使用CRC16算法計(jì)算出來的哈希值會落到圓環(huán)上的某個(gè)地方。

然后我們的Redis實(shí)例也分布在圓環(huán)上,我們在圓環(huán)上按照順時(shí)針的順序找到第一個(gè)Redis實(shí)例,這樣就完成了對key的節(jié)點(diǎn)分配。我們舉個(gè)例子。

假設(shè)我們有A、B、C三個(gè)Redis實(shí)例按照如圖所示的位置分布在圓環(huán)上,此時(shí)計(jì)算出來的hash值,取模之后位置落在了位置D,那么我們按照順時(shí)針的順序,就能夠找到我們這個(gè)key應(yīng)該分配的Redis實(shí)例B。同理如果我們計(jì)算出來位置在E,那么對應(yīng)選擇的Redis的實(shí)例就是A。

即使這個(gè)時(shí)候Redis實(shí)例B掛了,也不會影響到實(shí)例A和C的緩存。

例如此時(shí)節(jié)點(diǎn)B掛了,那之前計(jì)算出來在位置D的key,此時(shí)會按照順時(shí)針的順序,找到節(jié)點(diǎn)C。相當(dāng)于自動的把原來節(jié)點(diǎn)B的流量給轉(zhuǎn)移到了節(jié)點(diǎn)C上去。而其他原本就在節(jié)點(diǎn)A和節(jié)點(diǎn)C的數(shù)據(jù)則完全不受影響。

這就是一致性哈希,能夠在我們后續(xù)需要新增節(jié)點(diǎn)或者刪除節(jié)點(diǎn)的時(shí)候,不影響其他節(jié)點(diǎn)的正常運(yùn)行。

六、虛擬節(jié)點(diǎn)機(jī)制

但是一致性哈希也存在自身的小問題,例如當(dāng)我們的Redis節(jié)點(diǎn)分布如下時(shí),就有問題了。

此時(shí)數(shù)據(jù)落在節(jié)點(diǎn)A上的概率明顯是大于其他兩個(gè)節(jié)點(diǎn)的,其次落在節(jié)點(diǎn)C上的概率最小。這樣一來會導(dǎo)致整個(gè)集群的數(shù)據(jù)存儲不平衡,AB節(jié)點(diǎn)壓力較大,而C節(jié)點(diǎn)資源利用不充分。為了解決這個(gè)問題,一致性哈希算法引入了虛擬節(jié)點(diǎn)機(jī)制。

virtual-dom

在圓環(huán)中,增加了對應(yīng)節(jié)點(diǎn)的虛擬節(jié)點(diǎn),然后完成了虛擬節(jié)點(diǎn)到真實(shí)節(jié)點(diǎn)的映射。假設(shè)現(xiàn)在計(jì)算得出了位置D,那么按照順時(shí)針的順序,我們找到的第一個(gè)節(jié)點(diǎn)就是C #1,最終數(shù)據(jù)實(shí)際還是會落在節(jié)點(diǎn)C上。

通過增加虛擬節(jié)點(diǎn)的方式,使ABC三個(gè)節(jié)點(diǎn)在圓環(huán)上的位置更加均勻,平均了落在每一個(gè)節(jié)點(diǎn)上的概率。這樣一來就解決了上文提到的數(shù)據(jù)存儲存在不均勻的問題了,這就是一致性哈希的虛擬節(jié)點(diǎn)機(jī)制。

七、Redis Cluster采用的什么算法

上面提到過,Redis Cluster采用的是類一致性哈希算法,之所以是類一致性哈希算法是因?yàn)樗鼈儗?shí)現(xiàn)的方式還略微有差別。

例如一致性哈希是對2^32取模,而Redis Cluster則是對2^14(也就是16384)取模。Redis Cluster將自己分成了16384個(gè)Slot(槽位)。通過CRC16算法計(jì)算出來的哈希值會跟16384取模,取模之后得到的值就是對應(yīng)的槽位,然后每個(gè)Redis節(jié)點(diǎn)都會負(fù)責(zé)處理一部分的槽位,就像下表這樣。

節(jié)點(diǎn) 處理槽位
A 0 - 5000
B 5001 - 10000
C 10001 - 16383

每個(gè)Redis實(shí)例會自己維護(hù)一份slot - Redis節(jié)點(diǎn)的映射關(guān)系,假設(shè)你在節(jié)點(diǎn)A上設(shè)置了某個(gè)key,但是這個(gè)key通過CRC16計(jì)算出來的槽位是由節(jié)點(diǎn)B維護(hù)的,那么就會提示你需要去節(jié)點(diǎn)B上進(jìn)行操作。

slot-to-node

八、Redis Cluster如何做到高可用

不知道你思考過一個(gè)問題沒,如果Redis Cluster中的某個(gè)master節(jié)點(diǎn)掛了,它是如何保證集群自身的高可用的?如果這個(gè)時(shí)候我們集群需要擴(kuò)容節(jié)點(diǎn),它該負(fù)責(zé)哪些槽位呢?我們一個(gè)一個(gè)問題的來看一下。

8.1、集群如何進(jìn)行擴(kuò)容

我們開篇聊過,Redis Cluster可以很方便的進(jìn)行橫向擴(kuò)容,那當(dāng)新的節(jié)點(diǎn)加入進(jìn)來的時(shí)候,它是如何獲取對應(yīng)的slot的呢?

答案是通過reshard(重新分片)來實(shí)現(xiàn)。reshard可以將已經(jīng)分配給某個(gè)節(jié)點(diǎn)的任意數(shù)量的slot遷移給另一個(gè)節(jié)點(diǎn),在Redis內(nèi)部是由redis-trib負(fù)責(zé)執(zhí)行的。你可以理解為Redis其實(shí)已經(jīng)封裝好了所有的命令,而redis-trib則負(fù)責(zé)向獲取slot的節(jié)點(diǎn)和被轉(zhuǎn)移slot的節(jié)點(diǎn)發(fā)送命令來最終實(shí)現(xiàn)reshard。

假設(shè)我們需要向集群中加入一個(gè)D節(jié)點(diǎn),而此時(shí)集群內(nèi)已經(jīng)有A、B、C三個(gè)節(jié)點(diǎn)了。

此時(shí)redis-trib會向A、B、C三個(gè)節(jié)點(diǎn)發(fā)送遷移出槽位的請求,同時(shí)向D節(jié)點(diǎn)發(fā)送準(zhǔn)備導(dǎo)入槽位的請求,做好準(zhǔn)備之后A、B、C這三個(gè)源節(jié)點(diǎn)就開始執(zhí)行遷移,將對應(yīng)的slot所對應(yīng)的鍵值對遷移至目標(biāo)節(jié)點(diǎn)D。最后redis-trib會向集群中所有主節(jié)點(diǎn)發(fā)送槽位的變更信息。

8.2、高可用及故障轉(zhuǎn)移

Redis Cluster中保證集群高可用的思路和實(shí)現(xiàn)和Redis Sentinel如出一轍

簡單來說,針對A節(jié)點(diǎn),某一個(gè)節(jié)點(diǎn)認(rèn)為A宕機(jī)了,那么此時(shí)是主觀宕機(jī)。而如果集群內(nèi)超過半數(shù)的節(jié)點(diǎn)認(rèn)為A掛了, 那么此時(shí)A就會被標(biāo)記為客觀宕機(jī)。

一旦節(jié)點(diǎn)A被標(biāo)記為了客觀宕機(jī),集群就會開始執(zhí)行故障轉(zhuǎn)移。其余正常運(yùn)行的master節(jié)點(diǎn)會進(jìn)行投票選舉,從A節(jié)點(diǎn)的slave節(jié)點(diǎn)中選舉出一個(gè),將其切換成新的master對外提供服務(wù)。當(dāng)某個(gè)slave獲得了超過半數(shù)的master節(jié)點(diǎn)投票,就成功當(dāng)選。

cluster-failover

當(dāng)選成功之后,新的master會執(zhí)行slaveof no one來讓自己停止復(fù)制A節(jié)點(diǎn),使自己成為master。然后將A節(jié)點(diǎn)所負(fù)責(zé)處理的slot,全部轉(zhuǎn)移給自己,然后就會向集群發(fā)PONG消息來廣播自己的最新狀態(tài)。

按照一致性哈希的思想,如果某個(gè)節(jié)點(diǎn)掛了,那么就會沿著那個(gè)圓環(huán),按照順時(shí)針的順序找到遇到的第一個(gè)Redis實(shí)例。

而對于Redis Cluster,某個(gè)key它其實(shí)并不關(guān)心它最終要去到哪個(gè)節(jié)點(diǎn),他只關(guān)心他最終落到哪個(gè)slot上,無論你節(jié)點(diǎn)怎么去遷移,最終還是只需要找到對應(yīng)的slot,然后再找到slot關(guān)聯(lián)的節(jié)點(diǎn),最終就能夠找到最終的Redis實(shí)例了。

那這個(gè)PONG消息又是什么東西呢?別急,下面就會聊到。

九、簡單了解gossip協(xié)議

這就是Redis Cluster各個(gè)節(jié)點(diǎn)之間交換數(shù)據(jù)、通信所采用的一種協(xié)議,叫做gossip。

gossip: 流言、八卦、小道消息

gossip是在1989年的論文上提出的,我看了一堆資料都說的是1987年發(fā)表的,但是文章里的時(shí)間明確是1989年1月份發(fā)表。

image-20201215100703648

感興趣的可以去看看Epidemic Algorithms for Replicated . Database Maintenance,在當(dāng)時(shí)提出gossip主要是為了解決在分布式數(shù)據(jù)庫中,各個(gè)副本節(jié)點(diǎn)的數(shù)據(jù)同步問題。但隨著技術(shù)的發(fā)展,gossip后續(xù)也被廣泛運(yùn)用于信息擴(kuò)散、故障探測等等。

Redis Cluster就是利用了gossip來實(shí)現(xiàn)自身的信息擴(kuò)散的。那使用gossip具體是如何通信的呢?

gossip

很簡單,就像圖里這樣。每個(gè)Redis節(jié)點(diǎn)每秒鐘都會向其他的節(jié)點(diǎn)發(fā)送PING,然后被PING的節(jié)點(diǎn)會回一個(gè)PONG。

十、gossip協(xié)議消息類型

Redis Cluster中,節(jié)點(diǎn)之間的消息類型有5種,分別是MEET、PING、PONG、FAIL和PUBLISH。這些消息分別傳遞了什么內(nèi)容呢?我簡單總結(jié)了一下。

消息類型 消息內(nèi)容
MEET 給某個(gè)節(jié)點(diǎn)發(fā)送MEET消息,請求接收消息的節(jié)點(diǎn)加入到集群中
PING 每隔一秒鐘,選擇5個(gè)最久沒有通信的節(jié)點(diǎn),發(fā)送PING消息,檢測對應(yīng)的節(jié)點(diǎn)是否在線;同時(shí)還有一種策略是,如果某個(gè)節(jié)點(diǎn)的通信延遲大于了cluster-node-time的值的一半,就會立即給該節(jié)點(diǎn)發(fā)送PING消息,避免數(shù)據(jù)交換延遲過久
PONG 當(dāng)節(jié)點(diǎn)接收到MEET或者PING消息之后,會回一個(gè)PONG消息給發(fā)送方,代表自己收到了MEET或者PING消息。同時(shí),節(jié)點(diǎn)也可以主動的通過PONG消息向集群中廣播自己的信息,讓其他節(jié)點(diǎn)獲取到自己最新的屬性,就像完成了故障轉(zhuǎn)移之后新的master向集群發(fā)送PONG消息一樣
FAIL 用于廣播自己的對某個(gè)節(jié)點(diǎn)的宕機(jī)判斷,假設(shè)當(dāng)前節(jié)點(diǎn)對A節(jié)點(diǎn)判斷為宕機(jī),就會立即向Redis Cluster廣播自己對于A節(jié)點(diǎn)的判斷,所有收到消息的節(jié)點(diǎn)就會對A節(jié)點(diǎn)做標(biāo)記
PUBLISH 用于向指定的Channel發(fā)送消息,某個(gè)節(jié)點(diǎn)收到PUBLISH消息之后會直接在集群內(nèi)廣播,這樣一來,客戶端無論連接到任何節(jié)點(diǎn)都能夠訂閱這個(gè)Channel

十一、使用gossip的優(yōu)劣

既然Redis Cluster選擇了gossip,那肯定存在一些gossip的優(yōu)點(diǎn),我們接下來簡單梳理一下。

優(yōu)點(diǎn) 描述
擴(kuò)展性 網(wǎng)絡(luò)可以允許節(jié)點(diǎn)的任意增加和減少,新增加的節(jié)點(diǎn)的狀態(tài)最終會與其他節(jié)點(diǎn)一致。
容錯性 由于每個(gè)節(jié)點(diǎn)都持有一份完整元數(shù)據(jù),所以任何節(jié)點(diǎn)宕機(jī)都不會影響gossip的運(yùn)行
健壯性 與容錯性類似,由于所有節(jié)點(diǎn)都持有數(shù)據(jù),地位平臺,是一個(gè)去中心化的設(shè)計(jì),任何節(jié)點(diǎn)都不會影響到服務(wù)的運(yùn)行
最終一致性 當(dāng)有新的信息需要傳遞時(shí),消息可以快速的發(fā)送到所有的節(jié)點(diǎn),讓所有的節(jié)點(diǎn)都擁有最新的數(shù)據(jù)

gossip可以在O(logN) 輪就可以將信息傳播到所有的節(jié)點(diǎn),為什么是O(logN)呢?因?yàn)槊看蝡ing,當(dāng)前節(jié)點(diǎn)會帶上自己的信息外加整個(gè)Cluster的1/10數(shù)量的節(jié)點(diǎn)信息,一起發(fā)送出去。你可以簡單的把這個(gè)模型抽象為:

你轉(zhuǎn)發(fā)了一個(gè)特別有意思的文章到朋友圈,然后你的朋友們都覺得還不錯,于是就一傳十、十傳百這樣的散播出去了,這就是朋友圈的裂變傳播。

當(dāng)然,gossip仍然存在一些缺點(diǎn)。例如消息可能最終會經(jīng)過很多輪才能到達(dá)目標(biāo)節(jié)點(diǎn),而這可能會帶來較大的延遲。同時(shí)由于節(jié)點(diǎn)會隨機(jī)選出5個(gè)最久沒有通信的節(jié)點(diǎn),這可能會造成某一個(gè)節(jié)點(diǎn)同時(shí)收到n個(gè)重復(fù)的消息。

十二、總結(jié)

總的來說,Redis Cluster相當(dāng)于是把Redis的主從架構(gòu)和Sentinel集成到了一起,從Redis Cluster的高可用機(jī)制、判斷故障轉(zhuǎn)移以及執(zhí)行故障轉(zhuǎn)移的過程,都和主從、Sentinel相關(guān),這也是為什么我在之前的文章里說,主從是Redis高可用架構(gòu)的基石。

以上就是解析Redis Cluster原理的詳細(xì)內(nèi)容,更多關(guān)于Redis Cluster的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解SpringBoot Redis自適應(yīng)配置(Cluster Standalone Sentinel)
  • Redis Cluster集群數(shù)據(jù)分片機(jī)制原理
  • docker redis5.0 cluster集群搭建的實(shí)現(xiàn)
  • 使用Ruby腳本部署Redis Cluster集群步驟講解
  • php成功操作redis cluster集群的實(shí)例教程
  • Redis cluster集群的介紹
  • Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文)
  • 如何用docker部署redis cluster的方法
  • spring集成redis cluster詳解
  • Redis Cluster添加、刪除的完整操作步驟

標(biāo)簽:北京 果洛 楊凌 臺州 江蘇 吉安 朝陽 大慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解析Redis Cluster原理》,本文關(guān)鍵詞  解析,Redis,Cluster,原理,解析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解析Redis Cluster原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于解析Redis Cluster原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久久久无码国产精品不卡| jizzjizzjizz亚洲| 亚洲色欲综合一区二区三区| 亚洲第一页在线观看| 校花撩起jk露出白色内裤国产精品| 国产精品自产拍高潮在线观看| 精品国偷自产在线| 国产综合网站| 国产美女99p| 谁有免费的黄色网址| 怡红院成永久免费人全部视频| 国模大尺度视频一区二区| 久久久av一区| 精品中文字幕在线观看| 久久这里只精品最新地址| 日韩精品视频网| 欧美一区二区综合| 天堂av一区| 国产亚洲欧美一区二区三区| 国产成一区二区| 在线视频观看你懂的| 国产九九九九| 久草网站在线观看| 国产美女永久免费| 天天插天天操| 91国内在线播放| 亚洲8888| 一起草在线视频| 麻豆久久久久久久久久| 久久精品无码av| 久久福利一区| 黄网站免费观看| 超碰av在线免费观看| 国产精品第一页在线观看| 九一成人免费视频| 91综合久久爱com| 日本a在线观看| 欧美大码xxxx| 午夜精品久久久久久| 久久久久国产精品免费网站| 精品久久久三级丝袜| 国产精品免费久久久久| 亚洲天堂男人的天堂| 精品在线视频免费观看| 伊色综合久久之综合久久| www.一区二区三区.com| 青娱乐精品视频| 日本成人中文字幕在线| 亚洲va码欧洲m码| 2021av在线| 九九热这里只有| 欧美激情一区二区三区成人| 亚洲bt天天射| 精品视频在线播放| 在线观看一区二区三区四区| 欧美一级理论性理论a| 九九在线观看视频| 午夜精品久久久久久久99热影院| 麻豆影院在线观看| 一区二区在线观看免费视频| www.欧美亚洲| 在线观看亚洲网站| 久久精品中文字幕电影| 欧美日韩国产123| 欧美在线视频免费观看| 亚洲综合无码一区二区| 久久久久国产精品麻豆| 中文字幕中文字幕一区三区| 夜夜嗨av一区二区三区四季av| 欧美理论影院| 91美女视频在线| 三级影片在线看| 欧美熟妇另类久久久久久不卡| 国产精品美女久久久久aⅴ国产馆| 久久99国产精品麻豆| 婷婷综合视频| 九九热视频在线免费观看| 真实国产乱子伦对白在线| 97aⅴ精品视频一二三区| 天天干天天爽天天操| 91亚洲国产成人精品一区二三| 亚洲一卡久久| 视频在线观看一区二区三区| 欧美一级淫片a免费视频| 免费看的黄网站| 好吊色视频在线观看| 亚洲区一区二区三| 亚洲欧美日韩另类| 一区二区www| 久久久久久久久久久免费| av一区二区在线观看| 久久无码人妻一区二区三区| 国产精品外围在线观看| 美女航空一级毛片在线播放| 一本色道久久综合亚洲精品图片| 日韩免费一级视频| 亚洲欧洲综合另类在线| 好吊色一区二区三区| 亚洲精品动漫100p| 另类小说欧美激情| 亚洲一区二区三区中文字幕在线观看| 久久久久久蜜桃一区二区| 日韩—二三区免费观看av| 夜夜躁狠狠躁日日躁婷婷小说| 少妇激情av一区二区| 久久久在线免费观看| 国产高清自产拍av在线| 春色成人在线视频| 国产精品久久91| 亚洲欧美国产一区二区| 日韩欧美中文字幕在线视频| 一区二区三区**美女毛片| 欧美午夜精品久久久久久浪潮| xxx性欧美| 日本福利片高清在线观看| 国产欧美日韩综合一区在线播放| 日韩欧美一级二级三级| 欧美xxxx黑人又粗又长精品| 小说区图片区图片区另类灬| 97久久综合区小说区图片区| 亚洲午夜高清视频| 精品少妇人妻av免费久久洗澡| 国产精品videossex撒尿| 国产欧美精品日韩区二区麻豆天美| 香蕉久久久久久| 91热福利电影| 日本欧美精品在线| 亚洲欧美偷拍另类| 色一情一乱一伦一区二区三欧美| sm久久捆绑调教精品一区| 国产精品久久久一区| 中文精品电影| 国产91九色视频| chinese少妇国语对白| 奶水喷射视频一区| 亚洲乱码中文字幕久久孕妇黑人| 亚洲色图官网| 五月天婷婷在线观看视频| 亚洲欧美小视频| 男人天堂亚洲天堂| 女同互忝互慰dv毛片观看| 波多野结衣一区二区三区免费视频| 一本一本久久a久久精品综合妖精| 国产91精品入口17c| 中文无码av一区二区三区| 成人在线免费视频观看| 粉嫩av一区二区三区免费观看| 欧美综合一区第一页| 天天操夜夜操天天射| 影视亚洲一区二区三区| 欧美成人手机在线视频| 国产精品日本| 国产污视频网站| 97在线观看视频| 五月天激情开心网| 国产在线三区| 国产免费叼嘿网站免费| 国产精品入口福利| 久久99久国产精品黄毛片色诱| 成人av在线一区二区三区| 成人免费视频网| 91精品国产成人| 久久久久成人精品无码| 久久久99久久| 国产原创一区二区三区| 天堂av中文在线资源库| 一个人在线观看免费视频www| 国产精品初高中害羞小美女文| 中文字幕综合| 亚洲精品女人久久久| 日韩免费观看视频| 亚洲欧美一区二区三区| 欧美野外猛男的大粗鳮| 欧美 国产 精品| 日本高清不卡的在线| 一级α片免费看刺激高潮视频| 麻豆精品网站| 美女被久久久| 九色在线网站| 亚洲国产一区二区在线| 色综合影院在线| 日韩特级黄色片| 精品久久人人做人人爰| 最近国语视频在线观看免费播放| 欧洲成人在线观看| 久久aⅴ国产紧身牛仔裤| 欧美激情网站在线观看| 日本一区二区在线免费播放| 日本中文在线观看| 日本韩国欧美一区二区三区| 美国黄色特级片| 一级特黄aa大片| 国产精品69久久久久水密桃| 精品国产第一区二区三区观看体验| 国产亚洲午夜高清国产拍精品| 国产亚洲欧美在线| 超碰成人在线免费观看| 日韩精品一区二区三区四区五区| 窝窝社区一区二区| 中文字幕日韩第一页| 伊人男人综合视频网| 草久在线视频| 国产在线精品二区| 国产精品18hdxxxⅹ在线| 国产喷水theporn| 美国做受三级的视频播放| 日本免费精品| 欧美在线视频一区二区| 国产成年人在线观看| 嫩草影院国产精品| 欧洲免费av| 欧美77777免费视频| 国产精品一区二区三区免费| 欧美一区二区国产| 成人欧美一区二区| 91麻豆精品国产91| 国模吧视频一区| av在线不卡免费看| 亚洲国产日韩在线观看| 欧美日本在线观看| 中文精品一区二区| 欧美久久一区二区三区| 国产精品成人久久久久| 亚洲免费视频成人| 成人黄色在线看| 亚洲日本视频在线观看| 欧美一区二区三区成人精品| 黄色在线成人| 亚洲爱爱视频| 91精品国产91久久久久久吃药| 中文字幕一区二区三区四区免费看| 亚洲激情电影在线| 999精品色在线播放| 在线免费看视频| 污污网站免费看| 波多野结衣黄色| 轻轻草在线视频| 中文字幕+乱码+中文字幕| 日韩精品免费在线视频观看| 日韩亚洲色图| 天堂在线www天堂中文在线| 欧美性free免费| 美女任你摸久久| 高清一区二区三区四区五区| 天堂中文在线网| 2024最新电影在线免费观看| 久久久久中文字幕亚洲精品| 小小水蜜桃在线观看| 国产99久久久国产精品免费看| 日韩理论片中文av| 性欧美高清视频| 精品爆乳一区二区三区无码av| 亚洲成人一级片| 亚洲欧美色图片| 亚洲视频一区在线观看| 欧美xxxxx18| 国产精品旅馆在线| 中文字幕在线观看的网站| 国产亚洲精品久久久久婷婷瑜伽| 免费在线观看日韩| 国产一区日韩一区| 写真福利片hd在线观看| 国产视频在线视频| 亚洲精品中文字幕乱码| 欧美人善zozσ性伦交| 欧美日韩精品免费| 久久嫩草精品久久久久| 91亚洲精品久久久| 国产亚洲免费的视频看| 97av视频在线| 97精品一区二区视频在线观看| 午夜视频在线观看韩国| 国产欧美日韩91| 久久免费高清| 粉嫩91精品久久久久久久99蜜桃| 精品1区2区在线观看| 中文字幕第五页| 99riav视频一区二区| 国产人成视频在线观看| 国产又粗又硬又长又爽| 久久久久久久美女| 欧美性感美女一区二区| 久草免费在线观看| www.av88| 污污的视频网站在线观看| www高清在线视频日韩欧美| 中文字幕在线中文字幕日亚韩一区| 国产原创在线视频| 91大神在线网站| 欧美日韩在线精品一区二区三区激情综| 久久亚洲欧美日韩精品专区| 亚洲 欧美 另类人妖| 精品一区二区久久久| 国产精品一区二区三区网站| 99视频免费看| 五月婷婷丁香激情| 麻豆国产欧美一区二区三区| 久久久久免费精品国产| 黑料吃瓜在线观看| 久久你懂得1024| 国产亚洲精品美女久久久久久久久久| 在线电影一区二区三区| 粉嫩高潮美女一区二区三区| 亚洲国产综合色| 日韩av一二区| 欧美黑人猛交的在线视频| 99久久免费观看| 91在线九色porny| eeuss影院www免费看| 国产福利片在线| 女人黄色一级片| 午夜精品久久久久99蜜桃最新版| 岛国一区二区三区高清视频| 久久久久久一区二区三区四区别墅| 私密视频在线观看| 丁香天五香天堂综合| 亚洲爽爆av| 香蕉521av成人网| 国产精品麻豆一区二区| 国产一区二区三区精品在线| 国产老女人乱淫免费| 高潮毛片7777777毛片| 久久亚洲专区| 国产偷国产偷亚洲高清人白洁| 免费看一级一片| 日韩一区二区三区三四区视频在线观看| 欧美高清视频在线高清观看mv色露露十八| 欧美亚州韩日在线看免费版国语版|