国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

別用ZkClient了,Curator才是ZooKeeper的好伴侶.

共 10033字,需瀏覽 21分鐘

 ·

2022-04-01 20:43

zookeeper作為分布式系統(tǒng)中重要的協(xié)調(diào)組件,在后端開發(fā)中是難以繞開的一個重要知識領(lǐng)域。

可以說,只要在后端領(lǐng)域,比如說Java開發(fā)、大數(shù)據(jù)開發(fā)中待過三年及以上的工程師,或多或少都接觸過或者直接使用過zookeeper。

因此筆者開啟本系列,作為自己學(xué)習(xí)zookeeper(后文均稱為zk)的記錄,如果能夠啟發(fā)讀者那就更好不過了。

zookeeper概述

?

ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。

它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。

?

度娘如是說。

zookeeper,直譯過來就是動物園管理員,之所以這么說,主要是因為它在大數(shù)據(jù)技術(shù)棧中扮演了重要的協(xié)調(diào)角色。

在hadoop技術(shù)棧中,各種技術(shù)的logo都是小動物,而zookeeper的官方logo也是一位園丁模樣的男士。這也直觀地告訴了使用者,zk的用途和角色。

一言蔽之,zk就是在分布式系統(tǒng)中,對應(yīng)用提供一致性保證,分布式選主,通過各種機(jī)制,對應(yīng)用進(jìn)行協(xié)調(diào),從而使分布式系統(tǒng)對外提供某種特定的服務(wù)。

3c8180b69a99bef6e7ae03b075112675.webp

zookeeper官方形象

關(guān)于如何搭建zookeeper,網(wǎng)絡(luò)上文章有很多,本文就不進(jìn)行展開,感興趣的可以自行查找相關(guān)資料。

https://zookeeper.apache.org/

curator概述

?

Apache Curator是Netflix公司開源的一套zookeeper客戶端框架,并貢獻(xiàn)給了apache社區(qū)。

它封裝了Zookeeper客戶端底層的api,提供了流式風(fēng)格的api,提供了很多開箱即用的高級特性,如:分布式選主、分布式鎖、path監(jiān)控、node監(jiān)控、更加易用的節(jié)點CRUD操作、分布式隊列等。

Patrixck Hunt(Zookeeper的commiter)以一句“Guava is to Java that Curator to Zookeeper”給予Curator高度評價。

?

目前主流的zookeeper客戶端共有三種:

  • 官方zookeeper客戶端
  • zkClient
  • curator

其中,官方的客戶端提供的api都比較底層,開發(fā)者直接拿來用需要進(jìn)行一定的封裝,否則直接使用會顯得過于復(fù)雜和繁瑣;zkclient雖然使用起來比較方便,但是文檔較少,社區(qū)也不太活躍;而curator則是apache頂級項目,擁有活躍的開源社區(qū),且擁有較多的成熟api和高級特性。

因此在zk的客戶端這個領(lǐng)域,curator大受推崇。

http://curator.apache.org/index.html

f742ad55ac1389acd3ed09d54e292d40.webp

curator基礎(chǔ)操作

我們通過代碼來直接感受一下curator操作的快捷。

首先需要在工程中引入curator的依賴:

????
????
??????org.apache.curator
??????curator-framework
??????4.3.0
????

????
????
??????org.apache.curator
??????curator-recipes
??????4.3.0
????

「注意」 筆者使用的zookeeper服務(wù)端版本為3.5.6,因此使用4.0.0以上版本的curator是兼容的。

對于較低版本的zookeeper服務(wù)端,如3.4.x,則需要依賴curator2.x版本,如:2.12.0。如果使用高版本的curator,需要將curator自身依賴的ZooKeeper在maven中exclude掉。并引入對應(yīng)的低版本zookeeper客戶端。

關(guān)于curator與zookeeper具體的版本依賴,請參考官方的說明 ZooKeeper Version Compatibility

創(chuàng)建客戶端實例

使用Curator第一步是要創(chuàng)建一個客戶端實例,代碼如下:(后續(xù)的操作中,第一步均是創(chuàng)建客戶端實例。后續(xù)講解過程中只粘貼關(guān)鍵代碼,在文章的末尾會粘貼本文中所有的代碼案例的完整代碼)。

????RetryPolicy?retry?=?new?ExponentialBackoffRetry(1000,?3);
????CuratorFramework?client?=
????????????CuratorFrameworkFactory.newClient("127.0.0.1:2181",?retry);
????client.start();
????System.out.println("啟動curator客戶端");

簡單解釋下這段代碼的含義:

  1. 首先創(chuàng)建一個重試策略實例RetryPolicy,當(dāng)客戶端與zk服務(wù)端連接失敗或者超時,curator會使用我們指定的 重試策略進(jìn)行重試。RetryPolicy有多個實現(xiàn),這里使用ExponentialBackoffRetry策略,重試三次,每次間隔1秒鐘。

  2. 通過CuratorFrameworkFactory創(chuàng)建一個CuratorFramework實例,傳入zk連接地址以及重試策略。示例代碼中為單機(jī)方式連接串,如果是多節(jié)點方式只需要通過半角逗號分割的方式進(jìn)行連接即可。

????多節(jié)點連接串
????ip0:port0,ip1:port1,ip2:port2
  1. 調(diào)用CuratorFramework.start()方法,與zk服務(wù)端建立連接。

如此,我們的客戶端便能夠與zk服務(wù)端建立起長連接,從而為各種交互做準(zhǔn)備。

節(jié)點操作

連接建立好后,我們來學(xué)習(xí)一下curator如何對zk節(jié)點進(jìn)行操作。通俗地說就是通過curator對zk的node做增刪改查操作。

????????try?{
????????????//?增加
????????????client.create()
????????????????????.creatingParentsIfNeeded()
????????????????????.withMode(CreateMode.PERSISTENT)
????????????????????.forPath("/snowalker/path",?"100".getBytes());
????????????????????
????????????//?讀取node的值
????????????byte[]?dataBytes?=?client.getData().forPath("/snowalker/path");
????????????
????????????System.out.println(new?String(dataBytes));
????????????//?修改node對應(yīng)的值
????????????client.setData().forPath("/snowalker/path",?"120".getBytes());
????????????byte[]?dataBytes1?=?client.getData().forPath("/snowalker/path");
????????????
????????????System.out.println(new?String(dataBytes1));
????????????//?獲取子節(jié)點
????????????List?children?=?client.getChildren().forPath("/snowalker");
????????????System.out.println(children);
????????????
????????????//?刪除節(jié)點
????????????client.delete().forPath("/snowalker/path");
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}?finally?{
????????????client.close();
????????}

這段代碼基本上就涵蓋了curator對zk的node進(jìn)行增刪改查的主流操作了。介紹下代碼含義:

  1. 「增」 首先,通過create方法在zk上創(chuàng)建了 ”/snowalker/path“ 這樣一個持久化節(jié)點。方法 creatingParentsIfNeeded() 表示 「如果有必要則創(chuàng)建父節(jié)點」,也就是遞歸地創(chuàng)建多個節(jié)點。
  2. 節(jié)點建立后,寫入value;value在zk的node上以字節(jié)形式進(jìn)行存儲;初始值為100,并進(jìn)行打印
  3. 「查」 通過CuratorFramework.getData().forPath("/snowalker/path") ?可以讀取對應(yīng)節(jié)點的value
  4. 「改」 接著我們通過CuratorFramework.setData() 修改”/snowalker/path“ 對應(yīng)的value為120,并進(jìn)行打印
  5. 如果想要獲取某個子節(jié)點,我們可以通過CuratorFramework.getChildren().forPath(path) 方法獲取,返回一個list;也就是說,zk的子節(jié)點是一對多的(zk文件系統(tǒng)是樹形結(jié)構(gòu))
  6. 「刪」 通過執(zhí)行CuratorFramework.delete().forPath(path) 能夠?qū)⒅付╬ath進(jìn)行刪除

運行代碼,觀察到日志打印如下:

????啟動curator客戶端
????100
????120
????[path]

使用zkcli連接zookeeper服務(wù)端,ls看一下 /snowalker 目錄下的節(jié)點:

????[zk:?localhost:2181(CONNECTED)?6]?ls?/
????[snowalker]
????[zk:?localhost:2181(CONNECTED)?7]?ls?/snowalker
????[]
????[zk:?localhost:2181(CONNECTED)?8]

當(dāng)前只有 /snowalker 節(jié)點存在,子節(jié)點已經(jīng)被刪除。

可以看到,通過curator,我們通過幾行代碼便實現(xiàn)了對zk node的增刪改查

curator進(jìn)階操作

zk提供了分布式選主、watcher動態(tài)監(jiān)聽等機(jī)制,能夠為分布式系統(tǒng)提供分布式協(xié)調(diào),配置實時變更通知等能力。Curator當(dāng)然也提供了對應(yīng)的API供我們進(jìn)行調(diào)用。

接下來我們就分別看一下如何使用Curator來使用這些能力。

集群選主

首先看一下如何利用Curator實現(xiàn)集群選主。

Curator提供兩種方式進(jìn)行集群選主,分別為:

  • LeaderLatch方式
  • LeaderElection方式

LeaderLatch方式

首先觀察一下leaderLatch選主方式調(diào)用方式:

????public?class?LeaderLatchDemo?{
????
????????public?static?void?main(String[]?args)?throws?Exception?{
????????????new?LeaderLatchDemo().leaderLatch();
????????}
????
????????public?void?leaderLatch()?throws?Exception?{

首先我們還是要實例化一個CuratorFramework客戶端,與zk服務(wù)端建立連接

????????????RetryPolicy?retry?=?new?ExponentialBackoffRetry(1000,?3);
????????????CuratorFramework?client?=
????????????????????CuratorFrameworkFactory.newClient(
????????????????????????????"127.0.0.1:2181",
????????????????????????????5000,
????????????????????????????3000,
????????????????????????????retry);
????????????client.start();
????????????System.out.println("啟動curator客戶端");

接著注冊一個連接狀態(tài)監(jiān)聽器,在回調(diào)方法中根據(jù)返回的連接狀態(tài)進(jìn)行對應(yīng)操作。

當(dāng)連接狀態(tài)ConnectionState為LOST時,表明客戶端到服務(wù)端的連接已經(jīng)斷開,如果當(dāng)前節(jié)點已經(jīng)是leader,那么我們就需要暫停leader身份下的一切事情。

如果我們查看源碼的話,會發(fā)現(xiàn)curator內(nèi)部會將是否為leader的狀態(tài)設(shè)置為false(已經(jīng)不是leader了)

????????????client.getConnectionStateListenable().addListener(new?ConnectionStateListener()?{
????????????????@Override
????????????????public?void?stateChanged(CuratorFramework?client,?ConnectionState?newState)?{
????????????????????switch?(newState)?{
????????????????????????case?LOST:?{
????????????????????????????break;
????????????????????????}
????????????????????}
????????????????}
????????????});

我們聲明一個路徑作為選主的依據(jù)。

通過 「LeaderLatch leaderLatch = new LeaderLatch(client, latchPath);」 實例化一個LeaderLatch實例,通過它進(jìn)行l(wèi)eader選舉操作。

????????????//?latch
????????????String?latchPath?=?"/snowalker/leader_latch";
????????????LeaderLatch?leaderLatch?=?new?LeaderLatch(client,?latchPath);
????????????//?開啟leader選舉過程
????????????leaderLatch.start();
????????????//?判斷當(dāng)前節(jié)點是否為leader
????????????boolean?hasLeadershipBefore?=?leaderLatch.hasLeadership();
????????????System.out.println("是否成為leader:"?+?hasLeadershipBefore);
????
????????????leaderLatch.await();????

當(dāng)通過 「leaderLatch.start()」 開啟leader選舉之后,我們需要調(diào)用 ?「leaderLatch.await()」 。

如果當(dāng)前的客戶端未成為leader,則會進(jìn)行等待,(內(nèi)部源碼實現(xiàn)是通過Object.wait()進(jìn)行阻塞) 直到成為leader后,當(dāng)前客戶端線程會被喚醒,繼續(xù)執(zhí)行后續(xù)邏輯。

這里說的后續(xù)邏輯,實際上就是客戶端作為leader節(jié)點需要執(zhí)行的業(yè)務(wù)邏輯。比如:hdfs中兩臺機(jī)器,當(dāng)其中一臺機(jī)器成為主節(jié)點就會以主節(jié)點的身份對外提供文件相關(guān)服務(wù),而另外一臺非leader機(jī)器則會await在這里,直到它成為leader才會作為主節(jié)點提供服務(wù)。(也就是說,只有被選為leader的節(jié)點才會真正的提供服務(wù),否則它看起來就好像 “假死” 了)

????????????boolean?hasLeadershipAfter?=?leaderLatch.hasLeadership();
????????????System.out.println("是否成為leader:"?+?hasLeadershipAfter);
????????????Thread.sleep(100000);
????????}
????}

最后我們再打印一下節(jié)點的狀態(tài),看當(dāng)前節(jié)點是否成為leader。

運行效果

我們同時啟動兩個LeaderLatchDemo主進(jìn)程,模擬雙節(jié)點下的leader選舉過程。

兩個客戶端控制臺打印如下:

?

客戶端A

?
啟動curator客戶端
是否成為leader:false
?

客戶端B

?
啟動curator客戶端
是否成為leader:false
是否成為leader:true

上述日志打印,表明開始階段,兩個客戶端均非leader。

當(dāng)經(jīng)過競爭之后,客戶端B成為leader,而客戶端A則阻塞。我們嘗試關(guān)閉客戶端B進(jìn)程,觀察客戶端A的控制臺日志打?。?/p>

?

客戶端A

?
啟動curator客戶端
是否成為leader:false
是否成為leader:true

我們發(fā)現(xiàn),客戶端A成為了leader,從阻塞中喚醒。

這個小demo直觀地為我們展現(xiàn)了通過leaderLatch進(jìn)行l(wèi)eader選舉的場景。

LeaderElection方式

curator為我們提供了一種更為簡潔的leader選舉方式,它就是 「LeaderElection」 方式。(「實際上」,LeaderElection與LeaderLatch在原理上幾乎沒有差別,他們的原理都是基于分布式鎖實現(xiàn)的,只不過LeaderElection方式在使用上更加簡潔,開發(fā)效率更高)

話不多說,直接上代碼:

????public?class?LeaderElectionDemo?{
????
????????public?static?void?main(String[]?args)?throws?InterruptedException?{

首先還是實例化一個CuratorFramework建立到zk服務(wù)端的連接。

????????????RetryPolicy?retry?=?new?ExponentialBackoffRetry(1000,?3);
????????????CuratorFramework?client?=
????????????????????CuratorFrameworkFactory.newClient(
????????????????????????????"127.0.0.1:2181",
????????????????????????????5000,
????????????????????????????3000,
????????????????????????????retry);
????????????client.start();
????????????System.out.println("啟動curator客戶端");

接著定義一個leader選舉節(jié)點,這個操作和LeaderLatch相似。

????????????String?election?=?"/leader/election";

這里就不同了,我們需要建立一個LeaderSelector實例,它接收CuratorFramework實例、選舉節(jié)點、以及一個LeaderSelectorListener ?Leader選舉監(jiān)聽器。

我們需要實現(xiàn)LeaderSelectorListener的回調(diào)方法:

  • takeLeadership回調(diào)中需要開發(fā)者實現(xiàn)當(dāng)成為leader之后的業(yè)務(wù)邏輯。當(dāng)一個客戶端成為leader之后,便會回調(diào)takeLeadership方法,執(zhí)行l(wèi)eader角色的業(yè)務(wù)邏輯

  • stateChanged方法需要開發(fā)者實現(xiàn)當(dāng)連接狀態(tài)發(fā)生變化之后的業(yè)務(wù)邏輯。比如:我們可以直接拋出異常,阻止leader業(yè)務(wù)邏輯繼續(xù)進(jìn)行。待另外的節(jié)點成為leader后執(zhí)行takeLeadership方法

??????LeaderSelector?leaderSelector?=?new?LeaderSelector(
??????????????client,
??????????????election,
??????????????new?LeaderSelectorListener()?{
??????????????????@Override
??????????????????public?void?takeLeadership(CuratorFramework?curatorFramework)?throws?Exception?{
??????????????????????System.out.println("你已經(jīng)成為leader");
??????????????????????//?在?這里干leader的所有事情,此時方法不能退出
??????????????????????Thread.sleep(Integer.MAX_VALUE);
??????????????????}
??????
??????????????????@Override
??????????????????public?void?stateChanged(CuratorFramework?curatorFramework,?ConnectionState?connectionState)?{
??????????????????????System.out.println("你已經(jīng)不是leader,鏈接狀態(tài)發(fā)生變化,connectionState"?+?connectionState);
??????????????????????if?(connectionState.equals(ConnectionState.LOST))?{
??????????????????????????throw?new?CancelLeadershipException();
??????????????????????}
??????????????????}
??????????????});

通過調(diào)用LeaderSelector.start之后,多個客戶端會在election節(jié)點下競爭leader角色。當(dāng)某個客戶端競爭leader成功,就會執(zhí)行takeLeadership回調(diào)方法通知當(dāng)前應(yīng)用節(jié)點已經(jīng)成為leader。接著執(zhí)行l(wèi)eader角色的邏輯即可

????????????leaderSelector.start();
????????????Thread.sleep(Integer.MAX_VALUE);
????????}
????}
運行代碼

我們啟動兩個LeaderElectionDemo客戶端,讓他們進(jìn)行l(wèi)eader角色的選舉操作,觀察控制臺輸出:

客戶端A打印如下:

????啟動curator客戶端
????你已經(jīng)成為leader

客戶單B打印如下:

????啟動curator客戶端

這表明,客戶端A競爭leader成功,并成功執(zhí)行了回調(diào)方法takeLeadership??蛻舳薆競爭leader失敗,進(jìn)程阻塞。

我們強(qiáng)制關(guān)閉客戶端A,此時客戶端B控制臺輸出如下:

????啟動curator客戶端
????你已經(jīng)成為leader

這表明,客戶端A釋放了leader角色,客戶端B競爭成功,并開始執(zhí)行l(wèi)eader角色的方法。

「事實上」 LeaderElection方式內(nèi)部實現(xiàn)機(jī)制幾乎與LeaderLatch方式一模一樣,它本質(zhì)上也是通過分布式鎖競爭成為leader的。

具體到細(xì)節(jié)就是,LeaderElection是通過使用curator實現(xiàn)的mutex鎖進(jìn)行l(wèi)eader競爭。如果獲取到的鎖就是leader。如果競爭leader的時候競爭鎖失敗,則會阻塞,并為上個節(jié)點添加watcher。

當(dāng)上個節(jié)點對應(yīng)的客戶端down機(jī)或者長時間斷開連接,則順序臨時節(jié)點就消失了,此時watcher會通知后一個節(jié)點進(jìn)行加鎖。后面的節(jié)點加鎖成功便會成為leader角色。

我們發(fā)現(xiàn),這其實就是Curator的分布式鎖實現(xiàn)機(jī)制啊。

后續(xù)我們會對LeaderElection具體的代碼實現(xiàn)進(jìn)行展開講解。敬請期待。

小結(jié)

本文到此就告一段落了,我們對curator的基本使用以及重要的leader選舉特性進(jìn)行了全方位的講解和展示。

這里做個預(yù)告,接下來我會帶領(lǐng)讀者朋友們繼續(xù)學(xué)習(xí)curator對zookeeper的watcher機(jī)制的封裝和增強(qiáng)。


瀏覽 101
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 激情五月天激情网| 久久亚洲AV无码午夜麻豆| 中文字字幕在线中文| 日韩视频在线免费观看| 2018天天日天天操| 在线观看无码高清| 欧美日韩高清一区| 亚洲精品女人久久久| 亚洲无码免费看| 大香蕉伊人综合在线| 日韩中文字幕有码| 国产A片录制现场妹子都很多| 老师搡BBBB搡BBB| 中文字幕在线观看视频www| 先锋AV资源在线| 欧美亚洲综合在线| A亚洲天堂| 精品码产区一区二亚洲国产| 欧美成人精品欧美一级乱黄| 大地影视官网第三页入口| 午夜成人av| 欧美a片在线看| 亚洲男人天堂av| 未满十八18禁止免费无码网站 | 亚洲无码成人| BBB搡BBB搡BBB搡BBB| 黄色免费网站| 中国熟女HD| 色情欧美一级A片| 熟女人妻在线| 免费av在线| 大炕上公让我高潮了六次| 成人久久| 中文字幕精品视频在线观看| 成人免费观看的毛视频| 免费看黄色的视频| 中文字幕1区| 欧美性爱内射| 国产日韩欧美在线播放| 亚洲免费观看视频| 黄色视频免费在线观看网站| 久久久久亚洲AV成人无码电影| 综合激情AV| 久色性爱视频| 强伦轩人妻一区二区三区四区| 欧美黄片免费视频| 亚洲V国产v欧美v久久久久久 | 狠狠色婷婷777| 久久激情国产| 欧美在线视频免费观看| 国产午夜成人视频| 青青草无码成人天堂免费| 麻豆一区在线| 亚洲激情在线| 操操网站| 国产乱伦精品视频| 影音先锋国产资源| 亚洲午夜福利视频在线观看| 国产免费一区二区三区最新不卡| 日韩大鸡巴| 91少妇精品| 久草中文网| 欧美综合区| 国产午夜无码福利视频| 五月天久久久久| 青榴视频免费观看| 北条麻妃精品| 日韩国产成人在线| 免费激情网站| 人人操人人操人人操人人| 国产精品无码久久久久成人app| 午夜无码精品一区二区三区99午| 热九九热| 91乱伦| 亚洲精品久久久久avwww潮水| 伊人激情影院| 久久草视频| 在线观看视频国产| 黄片高清免费观看| 三级成人无码| 草逼视频网站| 欧美黄片免费视频| 国产午夜在线| 丁香激情五月少妇| 猫咪亚洲AV成人无码电影| 逼网站| 午夜福利100理论片| 亚洲综合免费观看高清完整版在线 | 亚洲最新AV网站| 国产精品的电影| www四虎com| 欧美性爱AAA| 神马午夜福利| 国产操操操| 97人妻精品一区二区三区免| 四虎Av| 午夜福利亚洲| 操逼激情网| 91网在线观看| 高清一区二区三区| 日韩人妻无码一区二区三区| 国产三级性爱视频| 欧美精品久久久久久久久爆乳| 午夜理论片| 无码人妻一区二区三区三| 欧美日韩国产在线观看| 日韩中文字幕人妻| 激情操逼视频| 99久操| 国产欧美一区二区| 久久伊人精品| 大香蕉日| 久久综合伊人7777777| 蜜桃av秘无码一区三区四| 中文无码播放| 在线亚洲欧洲| 欧美日韩h| 99在线精品视频| 操逼视频免费播放| 国产又大又粗又黄| 国产一级AA片| www.色999| 国产精品99久久久久的广告情况 | 狠狠成人| 国产99久久久精品| 精品无码一区二区| 五月丁香中文字幕| 爱爱视频h| 成人毛片av| 人人操人人爱人人摸| 亚洲三级网站| 伊人精品视频| 91丝袜一区在线观看| 天堂a在线8| 亚洲AV无码成人精品区东京热 | 黄色A片网址| 最新va在线观看| 人妻视频网| 婷婷五月丁香激情| 国产乱子伦一区二区三区在线观看 | 亚洲激情小说| 韩国无码免费| 影音先锋在线视频| 国产毛片777777| 91精品人妻一区二区三区四区 | 毛片网站免费| 国产精品1区2区3区| 中文字幕无码乱伦| 免费看日P视频| 豆花视频| 国产毛片在线看| 欧美三级片在线视频| 无码人妻精品一区二区蜜桃漫画| 亚洲高清无码视频在线播放| 欧美高清久久| 欧美午夜精品久久久| 国产色视频| 日本黄网站| 婷婷五月一区| 黑人巨大精品欧美| aaa在线观看| 日韩AV网站在线观看| 婷婷五月电影| 国产十欧洲十美国+亚洲一二三区在线午夜 | www.黄色片| 大地资源38页| 成人免费看A片| 亚洲影音先锋在线| 看免费操逼视频| 五十路義母| 丰满人妻一区二区三区视频在线不卡| 黄片无码| 久久黄色视频网站| 国产精品一区二区在线| 成人网站免费在线观看| 一级片欧美| 欧美另类色| 婷婷精品免费久久| 黄色片视频免费| 9l视频自拍九色9l视频成人| 2019天天操| 婷婷五月亚洲精品AAA片在| 欧美一级AAA大片免费观看 | 成人免费视频在线观看| 婷婷在线播放| 一本一道久久a久久精品蜜桃| 国产传媒三级| 欧美激情五月天| 无码啪啪啪| 少妇人妻无码| 伊人久久免费视频| 麻豆视频一区二区| 91豆花成人网站| 成人精品一区二区三区中文字幕| 日日搔av一区二区三区| 色婷婷久久综合| 欧美日韩在线视频免费| 日本黄色影院在线| 欧美色色视频| 亚洲五区| 特黄AAAAAAAA片免费直播| 欧美午夜爱爱| 色噜噜一区二区三区| 麻豆AV免费看| 91亚洲精品视频在线| 色鬼综合网| 五月丁香视频在线观看| 激情无码一区二区三区| 777中文字幕| 人人爽人人做| 操逼逼综合网| 自拍偷拍AV| 一级日逼视频| 国产熟女露脸普通话对白| 在线视频你懂| 青草一区| 亚洲成人黄色在线| 久久五月亭亭| 秋霞一区二区| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 猛操美女| 日本不卡视频| 五月丁香激情六月| 日本成人黄色| 色综合色综合色综合| 日韩性爱片| 国产18毛片18水多精品| 欧美性综合| 操久久久| 免费在线观看黄色视频| 成年人在线观看视频| 色婷操逼| 学生妹一级大片| 国产理论在线| 成人免费网站黄| 91福利在线视频| 色综合久| 99视频网站| 中国无码专区| 成年人视频在线观看免费| 国产主播AV| 中文字幕va| 看一级黄色片| 亚洲天堂2017| 亚洲无码久久久| 色老板免费精品无码免费视频| 日本视频在线免费| 俺去俺来也在线www色情网| av在线免费观看网站| 三级久久久| 日韩三级小说| 91在线无码精品秘网站| 久久久午夜| 久久艹伊人| 国产精品揄拍500视频| 一级a一级a爱片免费视频| 欧美三级片在线| 欧美色一级| 97精品人妻一区二区三区香蕉农| 可以看的毛片| 欧美在线免费观看| 俺去俺来也www色视频| 色逼视频| AA片免费看| 亚洲国产另类无码| 一级黄色电影免费观看| 精品福利视频导航| 一本一道vs波多野结衣| 久操麻豆| 日日干av| 99精品免费视频| 中文字幕乱码亚洲无线码在线日噜噜| 好吊一区二区| 天天干91| 国产美女全裸网站| 国产欧美日韩在线| 婷婷五月18永久免费视频| 欧美性爱XXXX黑人XYX性爽| 大香蕉伊人AV| av麻豆| 羞羞AV| 一级黄色录像视频| 无码人妻精品一区二区蜜桃漫画| 91内射视频| 大香蕉69| 91色色网| av黄色在线| 伊人网综合| 午夜激情视频| 91探花足浴店按摩店| 在线观看日韩| 人妻人人妻| 伊人免费成人视频| 国产三级国产三级国产| 亚洲人成在线观看| 伊人综合久久| 国产亚洲精品久久久久久桃色| JlZZJLZZ亚洲美女18| 日本中文字幕电影| 大香蕉亚洲成人| 福利视频在线| 一起草在线视频| 日韩一级高清| 欧美级毛片高潮| 亚洲AV秘无码不卡在线观看| 国产午夜无码视频在线观看| 国产激倩都市一区二区三区欧美| 色吧超碰| 亚洲中文字幕免费| 国产激情免费| 中文字幕免费MV第一季歌词| 日皮视频免费观看| 国产人妻精品一区二区三区不卡| 丰满人妻一区二区三区视频54 | 337p粉嫩噜噜噜| 日韩av免费看| 很很日| 91人妻人人澡人人爽人人玩| 日韩欧美中文在线| 影音先锋乱伦电影| 婷婷天堂网| 亚洲AV免费| 2021天天夜日| 播五月婷婷| 亚洲精品国产成人| 日韩美女在线| 国产A级毛片| 老司机午夜视频| 久久久国产91桃色一区二区三区 | 女神思瑞精品一区二区三区 | 91人妻人人澡人人爽人人精| 女人的天堂av| 熟女人妻人妻の视频| 日本欧美黄色| 夜夜爽日日爽| 成人网站三级片| 日韩一级免费毛片| 高潮视频在线观看| 夜夜夜操操操| 一本色道久久综合| 足交在线观看| 国产潮吹| 思思热免费视频| 99热这里只有精品7| 黄色片A| 91精品国产91久久久久久久久久 | 色色色色综合| 91豆花视频18| 国产精品码ls字幕影视| 日批视频网站| 成人综合娱乐网| 久久中文视频| 少妇性受XXXX黑人XYX性爽| 成人午夜毛片| 日韩AV资源网| 日韩色网站| 欧美AAAAA| 九九九成人网| 日本一级特黄电影| 欧美大鸡巴视频| 青娱乐偷拍视频| 国产乱子伦日B视频| AV大片免费看| 色欲AV网站| 日韩在线精品| 日本一级婬片A片免费播放一| www.18禁| 九九香蕉网| 亚洲综合片| 日韩无码一级片| 精品一区二区三区四区五区| 日韩人妻精品无码久久| 久久久婷婷五月亚洲国产精品| 91中文视频| 99热精品免费在线观看| 欧美操b视频| 精品人妻一区二区三区四区不卡在| 亚洲无码av在线观看| 91女人18毛片水多国产| 国产ts| 水蜜桃视频在线观看| 操逼视频一级| 水蜜桃在线观看视频| 国产成人精品无码片区在线观91 | 亚洲熟女一区二区三区妖精| 老熟女91| 精品久久免费| 美女白嫩嫩大BBB欣赏| 亚洲中文字幕播放| 精品一区二区久久久久久久网站| 一区无码视频| 2018人人操| 51一区二区三区| 日韩性爱视频网站| 日逼无码视频| av不卡在线| a片网站在线观看| 人人摸人人艹| 超碰免费99| 一级AA片| 黄色成人网址| 人人干人人操人人爱| 91麻豆精品在线观看| 久久久精品电影| 成人在线激情| 中日韩欧美一级A片免费| 亚洲国产成人久久| 欧美黄色毛片| 91官网在线观看| 日本色色网| 99久re热视频精品98| av干在线| 婷婷精品在线| 高清无码视频在线| 俺来了俺去了| 色五月婷婷久久| 国产操逼免费看| 啪啪毛片| 中文无码影院| 999精品视频| 91国语又粗又大对白| 广西少妇BBwBBwBBw| 黄频在线观看| 91爱爱·com| 中文字幕乱码免费综合久久| 色老板最新网址| 高清无码不卡av| 亚洲激情视频在线观看| 日本欧美一级片| 国产精品午夜成人免费| 亚洲天堂一区在线观看| 久久久97| 俄罗斯老熟妇与子伦| 日日射人妻| 青青草视频黄| 日本在线一级| 一级大黄色毛片| 成人av天堂| 在线亚洲欧洲| 啪啪视频国产| 欧美国产精品一二三产品在哪买 | 韩国精品无码| 成人在线18| 欧美黄片免费看| 91精品国产91久久久久久久久久 | 欧美第一夜| 操美女久久| 午夜免费播放观看在线视频| 九九综合久久| 97精品人妻一区二区三区香蕉农| 成人A片在线观看| 三级黄色视频在线观看| 老熟女AV| 无码福利| 欧美AAAAAAAA| xiuxiuav| 免费操逼视频网站| 久草手机视频在线观看| 亚洲无码色婷婷| 午夜操逼| 91夫妻视频| 久久精品一区二区三区不卡牛牛| 无码人妻91| 91一区| 五月天狠狠操| 污视频网站在线观看| 奇米色播| 国产中文字幕亚洲综合欧美| 嘿嘿午夜| 午夜福利1000| 久久婷综合| 三级片网站国产| 狠狠躁日日躁夜夜躁A片无码视频| 无码人妻在线| 青青草原在线视频免费观看| 色播五月丁香| 91麻豆精品国产91久久久吃药| 69成人| 无码专区在线看v| 日韩高清一区二区| 日日骚影院| 老太奶性BBwBBw侧所| 日本不卡在线| 蜜桃精品在线观看| 国产黄网站| 久久精品女同亚洲女同13| 国产卡一卡二在线观看| 五月婷婷色| 人人插人人摸| 国产AV在| 麻豆精品一区二区| 免费av观看| 安徽妇搡BBBB搡BBB| 人人爱人人操| 日韩欧美中文字幕在线观看| 99无码国产成人精品| 狠狠操免费视频| 亚洲午夜无码久久久| 亚洲一区无码在线观看| 中文字字幕中文字幕乱码| 国产欧美熟妇另类久久久| 日日操日日摸| 偷自拍| 日本四级片| 第一页在线| 日韩免费无码视频| 性爱视频99| 日韩免费AV电影| 高清在线无码视频| 人妻公日日澡久久久| 欧美日韩操| 美女被操91| 影音先锋色av| 性生活无码视频| 性猛交AAAA片免费观看直播| 91在线无码精品国产三年| www.日韩精品| 激情图区| 你懂得在线观看| 伊人免费在线| 欧美aaa在线| 欧美日韩视频免费观看| 另类老妇性bbwbbwbbw| 黄片www| 自拍偷拍国产| 干干日日| 欧美一区二区三区免费| 在线国产福利| 亚洲热视频在线观看| 看免费黄色录像| 国产乱码| 日韩A片免费| 国产精品久久久久久久久久| 五月天激情婷婷| 国产99re| 91香蕉麻豆| 中文字幕无码视频在线观看| 国产黄色视屏| 日韩操片| 成人免费在线网站| 夜夜爽7777精品国产三级| 午夜成人精品一区二区三区| a三级片| 韩国高清无码60.70.80| 99在线精品视频| 91精品福利| 日本一区二区在线| 日本激情网| 久久女人视频| igao视频| 精品国产一区二区三区久久久蜜月| 久久无码高清| 家庭乱伦av| 丁香五月六月婷婷| 日韩AV无码专区亚洲AV| 思思热免费视频| 国产精品对白| 亚洲中文字幕第一| 欧美爱爱视屏| 欧美三级性爱视频| 男人资源在线| 9l蝌蚪PORNY中文| 人人操成人| 欧美精品无码一区二区| 国产另类自拍| 操逼视频国产91| 在线成人视频网站大香蕉在线网站| 久久久亚洲AV无码精品色午夜| 操逼逼AV| 国产女主播在线播放| 国产精品无码久久久久成人app | 日本不卡在线| 亚洲系列| 九色PORNY国产成人蝌蚪| 欧美一区二区| 无码迷穴| 三级无码av| 精品视频久| 国产高清激情| 成人性爱视频在线| 国产黄色片在线播放| 麻豆传媒在线| 天天日天天操天天摸天天干天日射天天插 | 中文电视剧字幕在线播放免费视频| 亚洲无码手机在线观看| 亚洲性爱影院| 三级成人无码| 亚洲理论电影| 天堂资源| 国产剧情一区二区av在线观看 | 91极品视觉盛宴| 在线看片av| av天堂无码| 狠狠干2021| 中文字幕网址在线| 俺去俺来也www色视频| 欧美乱伦视频| 日韩在线一级片| 午夜人妻无码| 玖玖爱综合| 欧美成人AA| 国产三级小视频| 丁香在线视频| 国产精品无码无套在线| 东京热视频在线观看| 亚洲色在线视频| 国产特级婬片免费看| 亚洲欧美在线视频免费| 韩日在线视频| 黄片在线免费播放| 蜜桃传媒一区二区亚洲| 国产又粗又大| 韩国日本久久| 人妻体体内射精一区二区| 国产成人无码精免费视频| 亚洲青青| 任我操在线视频| 日韩免费高清视频| 91在线精品视频| 久久人妻视频| 在线视频内射| 天天干天天日天天射| 亚洲免费三级| 成人一级A片| 瘦精品无码一区二区三区四区五区六区七区八区 | 国产搡BBB爽爽爽视频| 国产在线97| 想要xx| 玩弄人妻少妇500系列视频| 日本免费一区二区三区| 亚洲天堂av在线免费观看| 99久久人妻无码中文字幕系列 | 2025精品视频| 先锋影音av资源网| 亚洲搞清视频日本| 五月丁香婷中文字幕| 手机av在线观看| 日韩毛片网| 一级a片在线观看| 懂色中国闺密偷情懂色AV| 无码在线播放观看| 亚洲AV永久无码成人| 亚洲欧美在线播放| 人人摸人人看| 精品久久久无码| 狠狠操免费| 五月天婷婷激情网| 亚洲免费视频在线播放| 大香蕉亚洲成人| 成人精品秘久久久按摩下载| 久久久91精品国产一区苍井空 | 日韩麻豆| 美女av日逼| 夜夜撸一撸| 91黑人| 国产第四页| www.伊人大香蕉| 国产高清中文字幕| 人人人人操| 最新AV在线播放| 久9精品| 国产亲子乱XXXXinin| 日本一级一片免费视频| 激情综合网五月婷婷| 久久五月视频| 日本免费爱爱视频| 三级片网页| 欧美亚洲成人网| 日本不卡二区| 亚洲天堂2016| 国产成人视频免费| 中文字幕成人电影| 无码在线视频播放| 久久艹免费视频| 日韩免费| 一级黄色片免费观看| 91成人在线免费视频| 欧美99| 91中文字幕网| 99成人国产精品视频| 国产人与禽zoz0性伦| 久操免费观看| 成人无码中文字幕| 亚洲av高清| 风流少妇一区二区三区91| 日韩三级电影| 久久久久亚洲AV无码网影音先锋| 亚洲无码99| 亚洲无吗在线播放| 精品人妻一区二区三区在线视频不卡| 超碰免费97| 亚洲成av| 国产无码区| 欧美日韩精品一区二区三区| 成人免费视频国产在线观看| 99精品免费视频| 高圆圆一区二区三区| 91欧美视频| 国产精品视频你懂的| 国产一级片网站| 日本爱爱视频| 日本黄色色情视频| 中文一级片| 亚洲午夜福利视频在线观看| 久操视频在线免费观看| 婷婷五月天在线电影| 国产丝袜在线视频| 中文字幕在线免费看| 91porn在线观看| 亚洲高清免费视频| 九久久| 婷婷成人电影| 色哟哟网站| 精品69| 久久久久久亚洲AV黄床| 97香蕉久久国产超碰青草专区| 日韩在线1| 日韩av第一页| 久草成人| 操逼视频一级| 制服.丝袜.亚洲.中文豆花| 九色欧美| 嫩草视频在线观看| 欧美亚洲成人在线观看| 精品操逼| 俺也来www俺也色com| 五月天黄色电影| 欧美A黄片| 99久热| 91无码秘蜜桃一区二区三区-百度| 欧洲天堂在线视频网站| 青青草成人电影| A片观看视频| 超碰免费观看| 综合五月婷婷| 91网站免费在线观看| 级婬片AAAAAAA免费| 中文字幕在线精品| 中文字幕性爱电影| 国产精品秘久久久久久99| 熟女熟妇人妻一区二区三区 | 婷婷午夜精品久久久久久性色AV | 色婷婷国产精品综合在线观看| 2025av中文字幕| 波多野结衣无码一区二区| 在线播放日韩| www.一区二区三区| 日韩精品中文字幕在线观看| 射久久| 久久精品观看| 2016av天堂网| 被黑人猛躁10次高潮视频| 西西888WWW大胆视频| 51妺嘿嘿午夜福利| 影音先锋中文字幕av| 日日干干| 黄片免费看网站| 黄色片视频日本| 九九国产精品| 日本黄色色情视频| 99热精品免费在线观看| 夜夜撸网站| 国产精品高清网站| 亚洲欧美久久| av第一页| 国产特黄级AAAAA片免| 日本色色| 特黄特色大片BBBB| 亚日韩视频| 国产美女自拍视频| 波多野结衣国产区42部| 国产精品果冻传媒| 九色国产在线| 91久久超碰| 久久国产黄色一级片| 懂色av粉嫩av蜜臀av| 欧美亚洲操逼视频| 狠狠爱一区| 中文字幕免费视频在线观看| 精品色哟哟| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 高清无码视频在线| 欧美三级片视频| AV手机在线| 伊人视频网| 少妇在线观看| 免费成人大片| 日韩永久免费| 日韩AA视频| 久久久亚洲| 中日韩特黄A片免费视频| 欧美在线va| 国产久久久久| 日韩在线中文字幕视频| 免费观看一区| 欧美亚洲国产精品| 日本大香蕉视频| 日日骚av一区二区三区| 欧美黄网站在线观看| 亚洲视频一区| 一级黄色视频在线观看| 成人午夜精品无码区| 色五月婷婷五月天激情| 一夲道无码专区av无码A片| 国产视频福利在线| 国产成人视频免费在线观看| 午夜免费播放观看在线视频| 人人操操| 日本一级黄色A片| 操美女91| 2019中文字幕在线| 人人爱人人插| 免费内射视频| 三级片网站在线观看| 一区二区三区福利| 日韩aaa视频| 99re| 国产特级毛片| 亚洲美女一区| 色网站操逼| 人人摸人人爱人人操| 一级a片在线免费观看| 中文字幕免费视频| 強暴人妻一区二区三区| 亚洲午夜福利电影| 五月大香蕉| 亚洲成人77777| 亚洲色播放| 神马午夜51| 黑人人妻黑人ThePorn| 97中文字幕在线| 亚洲日韩中文字幕| 国产无套视频| 国产精品在线观看视频| AV婷婷五月天| 久久久久亚洲AV无码网影音先锋 | 91青青草在线| 天天干91| 日韩无码流出| 国产婷婷五月天| 国产精品视频在线看| 亚洲任你操超碰在线| 超碰在线观看97| 人人妻人人| 日韩色区| 亚欧成人| 在线免费看黄色视频| 亚洲乱码中文字幕| chinese搡老熟老妇人| 一级黄色电影免费在线观看| 91精品国产亚洲| 国产一级黄色A片| 日韩免费Av| 国产黄色网| A片视频在线观看| 欧美日韩中文字幕| 天天干人妻| 福利色播| 天天摸天天日| 日韩乱妇| 麻豆精品一区二区| 色老板在线观看视频| 91精品久久久久久久久久久久 | 夜夜嗨AV一区二区三区啊| 操b视频免费看| 中文字幕免| 五月丁香六月久久| 亚洲性爱片| 中文字字幕中文字幕乱码| 亚洲日韩乱码在线| 国产欧美一区二区三区视频| 超级碰碰碰碰碰碰碰碰碰| 久久狠| 黄片网址| 手机在线小视频| 人人舔视频| 木下凛凛子AV888AV在线观看| 蜜桃传媒一区二区| 久久久大香蕉| 亚洲133| 中国无码专区| 欧美人妻视频在线| 囯产精品久久久久久久久久久久久久 | 国产精品自产拍| 一区四区视频| 手机在线毛片| 久久久久亚洲AV无码网影音先锋| 黄片高清无码在线观看| 丰滿人妻-区二区三区| 亚洲免费黄| 国产v在线观看| 韩日AV| 丁香五月婷婷六月| 黄色视频在线观看国产| 超碰在线大香蕉| 久久久久久亚洲AV无码专区| 精品人妻一区二区| 亚洲在线播放| 久久草| 99极品视频|