国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用Flume 部署和管理可擴展的Web 服務(wù)

云計算
機器生成的日志數(shù)據(jù)對于查找各種硬件和軟件故障的根源至關(guān)重要。來自該日志數(shù)據(jù)的信息可提供改進系統(tǒng)架構(gòu)、減緩系統(tǒng)退化和改善正常運行時間方面的反饋。最近,一些企業(yè)開始使用這些日志數(shù)據(jù)獲取業(yè)務(wù)洞察。在使用一個容錯的架構(gòu)時,F(xiàn)lume 是一個擁有高效收集、聚合和轉(zhuǎn)移大量日志數(shù)據(jù)的分布式服務(wù)。本文將介紹如何部署 Flume,以及如何將它與 Hadoop 集群和簡單的分布式 Web 服務(wù)結(jié)合使用。

機器生成的日志數(shù)據(jù)對于查找各種硬件和軟件故障的根源至關(guān)重要。來自該日志數(shù)據(jù)的信息可提供改進系統(tǒng)架構(gòu)、減緩系統(tǒng)退化和改善正常運行時間方面的反饋。最近,一些企業(yè)開始使用這些日志數(shù)據(jù)獲取業(yè)務(wù)洞察。在使用一個容錯的架構(gòu)時,F(xiàn)lume 是一個擁有高效收集、聚合和轉(zhuǎn)移大量日志數(shù)據(jù)的分布式服務(wù)。本文將介紹如何部署 Flume,以及如何將它與 Hadoop 集群和簡單的分布式 Web 服務(wù)結(jié)合使用。

Flume 架構(gòu)

Flume 是一項分布式、可靠的、容易使用的服務(wù),用于收集、聚合從許多來源傳來的大量流事件數(shù)據(jù)并將它們轉(zhuǎn)移到一個中央數(shù)據(jù)存儲中。

使用 Flume 部署和管理可擴展的 Web 服務(wù)

圖 1. Flume 架構(gòu)

 

Flume 事件可定義為一個擁有工作負(fù)載(字節(jié))和一個可選的字符串屬性集的數(shù)據(jù)流單元。Flume 代理是一個托管組件的 JVM 進程,事件通過該進程從外部來源流到下一個目標(biāo)(躍點)。

InfoSphere® BigInsights™ 支持以較低的延遲持續(xù)分析和存儲流數(shù)據(jù)。InfoSphere Streams 可用于配置上述代理和收集器進程(參見 參考資料)。Flume 也可用于在一個遠程位置收集數(shù)據(jù),而且可在 InfoSphere BigInsights 服務(wù)器上配置一個收集器,將數(shù)據(jù)存儲在分布式文件系統(tǒng) (DFS) 上。但是,在本文中,我們會同時將 Flume 用作代理和收集器進程,并使用一個 Hadoop 分布式文件系統(tǒng) (HDFS) 集群作為存儲。

數(shù)據(jù)流模型

一個 Flume 代理有三個主要組成部分:來源、通道和接收器 (sink)。來源 使用了外部來源(比如 Web 服務(wù))傳送給它的事件。外部來源以一種可識別的格式將事件發(fā)送給 Flume。當(dāng) Flume 來源收到事件后,它會將這些事件存儲在一個或多個通道 中。通道是一種被動存儲,它將事件保留到被 Flume 接收器 使用為止。例如,一個文件通道使用了本地文件系統(tǒng);接收器從通道提取事件,并將它放在一個外部存儲庫(比如 HDFS)中,或者將它轉(zhuǎn)發(fā)到流中下一個 Flume 代理(下一個躍點)的 Flume 來源;給定代理中的來源和接收器與暫存在通道中的事件同步運行。

來源可針對不同的用途而使用不同的格式。例如,Avro Flume 來源可用于從 Avro 客戶端接收 Avro 事件。Avro 來源形成了一半的 Flume 的分層集合支持。在內(nèi)部,這個來源使用了 Avro 的 NettyTransceiver 監(jiān)聽和處理事件。它可與內(nèi)置 AvroSink 配套使用,共同創(chuàng)建分層集合拓?fù)浣Y(jié)構(gòu)。Flume 使用的其他流行的網(wǎng)絡(luò)流包括 Thrift、Syslog 和 Netcat。

Avro

Apache 的 Avro 是一種數(shù)字序列化格式。它是一個基于 RPC 的框架,被 Apache 項目(比如 Flume 和 Hadoop)廣泛用于數(shù)據(jù)存儲和通信。Avro 框架的用途是提供豐富的數(shù)據(jù)結(jié)構(gòu)、一種緊湊而又快速的二進制數(shù)據(jù)格式,以及與動態(tài)語言(比如 C++、Java™、Perl 和 Python)的簡單集成。Avro 使用 JSON 作為其接口描述語言 (Interface Description Language, IDL),以指定數(shù)據(jù)類型和協(xié)議。

Avro 依賴于一種與數(shù)據(jù)存儲在一起的模式。因為沒有每個值的開銷,這實現(xiàn)了輕松而又快速的序列化。在遠程過程調(diào)用 (RPC) 期間,該模式會在客戶端-服務(wù)器握手期間交換。使用 Avro,字段之間的通信很容易得到解決,因為它使用了 JSON。

可靠性、可恢復(fù)性和多躍點流

Flume 使用一種事務(wù)型設(shè)計來確保事件交付的可靠性。事務(wù)型設(shè)計相當(dāng)于將每個事件當(dāng)作一個事務(wù)來對待,事件暫存在每個代理上的一個通道中。每個事件傳送到流中的下一個代理(比如來源欄)或終端存儲庫(比如 HDFS)。事件被存儲在下一個代理的通道中或終端存儲庫中后,就會從上一個通道中刪除,以便在收到存儲確認(rèn)之前維護一個最新事件隊列。這個過程通過來源和接收器完成,它們將存儲或檢索信息封裝在通道提供的一個事務(wù)中。這可以確保為 Flume 中的單躍點消息傳送語義提供了端到端的流可靠性。

可恢復(fù)性通過通道中的暫存事件來維護,用于管理故障恢復(fù)。 Flume 支持一種受本地文件系統(tǒng)支持的持久性的文件通道(基本上用于在永久存儲上維護狀態(tài))。如果使用一個持久性的文件通道,任何丟失的事件(在發(fā)生崩潰或系統(tǒng)故障時)都可以恢復(fù)。還有一個內(nèi)存通道將事件存儲在內(nèi)存中的一個隊列中,這么做更快,但在事件進程結(jié)束時,仍留在內(nèi)存通道內(nèi)的所有事件都無法恢復(fù)。

Flume 還允許用戶構(gòu)建多躍點流,事件會經(jīng)歷多個代理,然后才會到達最終的目標(biāo)。對于多躍點流,來自上一個躍點的接收器和來自下一個躍點的來源都會運行自己的事務(wù)進程,以確保數(shù)據(jù)安全地存儲在下一個躍點的通道中。

使用 Flume 部署和管理可擴展的 Web 服務(wù)

圖 2. 多躍點流

#p#

系統(tǒng)架構(gòu)

本節(jié)將討論如何使用 Flume 設(shè)置一個可擴展的 Web 服務(wù)。出于此目的,我們需要使用代碼來讀取 RSS 提要。我們還需要配置 Flume 代理和收集器來接收 RSS 數(shù)據(jù),并將它們存儲在 HDFS 中。

Flume 代理配置存儲在一個本地配置文件中。這類似于一個 Java 屬性文件,并且被存儲為一個文本文件。可在同一個配置文件中指定一個或多個代理的配置。配置文件包含一個代理中每個來源、接收器和通道的屬性,以及它們?nèi)绾芜B接在一起來形成數(shù)據(jù)流。

Avro 來源需要一個主機名(IP 地址)和端口號來接收數(shù)據(jù)。內(nèi)存通道可能擁有最大隊列大小(容量)限制,HDFS 接收器需要知道文件系統(tǒng) URI 和路徑才能創(chuàng)建文件。Avro 接收器可以是一個轉(zhuǎn)發(fā)接收器 (avro-forward-sink),它可以轉(zhuǎn)發(fā)到下一個 Flume 代理。

我們的想法是創(chuàng)建一個微型的 Flume 分布式提要(日志事件)收集系統(tǒng)。我們將使用代理作為節(jié)點,它們從一個 RSS 提要閱讀器獲取數(shù)據(jù)(在本例中為 RSS 體驗)。這些代理將這些提要傳遞到一個收集器節(jié)點,后者負(fù)責(zé)將這些提要存儲到一個 HDFS 集群中。在本例中,我們將使用兩個 Flume 代理節(jié)點,一個 Flume 收集器節(jié)點和一個包含三個節(jié)點的 HDFS 集群。表 1 描述了代理和收集器節(jié)點的來源和接收器。

使用 Flume 部署和管理可擴展的 Web 服務(wù)

表 1. 代理和收集器節(jié)點的來源和接收器

圖 3 給出了我們的多躍點系統(tǒng)的架構(gòu)概述,該系統(tǒng)包含兩個代理節(jié)點、一個收集器節(jié)點和一個 HDFS 集群。RSS Web 提要(參見下面的代碼)是兩個代理的 Avro 來源,它將提要存儲在一個內(nèi)存通道中。當(dāng)提要在兩個代理的內(nèi)存通道中積累時,Avro 接收器開始將這些事件發(fā)送到收集器節(jié)點的 Avro 來源。收集器還使用一個內(nèi)存通道和一個 HDFS 接收器將這些提要轉(zhuǎn)儲到 HDFS 集群中。參見下圖,了解代理和收集器配置。

使用 Flume 部署和管理可擴展的 Web 服務(wù)

圖 3. 多躍點系統(tǒng)的架構(gòu)概述

 

讓我們來看一下如何使用 Flume 啟動一個簡單的新聞閱讀器服務(wù)。以下 Java 代碼描述了一個從 BBC 讀取 RSS Web 來源的 RSS 閱讀器。您可能已經(jīng)知道,RSS 是一個 Web 提要格式系列,用于以一種標(biāo)準(zhǔn)化格式發(fā)布頻繁更新的網(wǎng)站,比如博客文章、新聞提要、音頻和視頻 。RSS 使用一種發(fā)布-訂閱模型來定期檢查訂閱的提要中的更新。

#p#

下面的 Java 代碼使用 Java 的 Net 和 Javax XML API 讀取 W3C 文檔中一個 URL 來源的內(nèi)容,處理該信息,然后將該信息寫入到 Flume 通道中。

清單 1. Java 代碼 (RSSReader.java)

  1. import java.net.URL; 
  2.  
  3. import javax.xml.parsers.DocumentBuilder; 
  4.  
  5. import javax.xml.parsers.DocumentBuilderFactory; 
  6.  
  7. import org.w3c.dom.CharacterData; 
  8.  
  9. import org.w3c.dom.Document; 
  10.  
  11. import org.w3c.dom.Element; 
  12.  
  13. import org.w3c.dom.Node; 
  14.  
  15. import org.w3c.dom.NodeList; 
  16.  
  17. public class RSSReader { 
  18.  
  19. private static RSSReader instance = null
  20.  
  21. private RSSReader() { 
  22.  
  23.  
  24. public static RSSReader getInstance() { 
  25.  
  26. if(instance == null) { 
  27.  
  28. instance = new RSSReader(); 
  29.  
  30.  
  31. return instance; 
  32.  
  33.  
  34. public void writeNews() { 
  35.  
  36. try { 
  37.  
  38. DocumentBuilder builder = DocumentBuilderFactory.newInstance(). 
  39.  
  40. newDocumentBuilder(); 
  41.  
  42. URL u = new URL("http://feeds.bbci.co.uk/news/world/rss.xml 
  43.  
  44. ?edition=uk#"); 
  45.  
  46. Document doc = builder.parse(u.openStream()); 
  47.  
  48. NodeList nodes = doc.getElementsByTagName("item"); 
  49.  
  50. for(int i=0;i 
  51.  
  52. Element element = (Element)nodes.item(i); 
  53.  
  54. System.out.println("Title: " + getElementValue(element,"title")); 
  55.  
  56. System.out.println("Link: " + getElementValue(element,"link")); 
  57.  
  58. System.out.println("Publish Date: " + getElementValue(element,"pubDate")); 
  59.  
  60. System.out.println("author: " + getElementValue(element,"dc:creator")); 
  61.  
  62. System.out.println("comments: " + getElementValue(element,"wfw:comment")); 
  63.  
  64. System.out.println("description: " + getElementValue(element,"description")); 
  65.  
  66. System.out.println(); 
  67.  
  68.  
  69. catch(Exception ex) { 
  70.  
  71. ex.printStackTrace(); 
  72.  
  73.  
  74.  
  75. private String getCharacterDataFromElement(Element e) { 
  76.  
  77. try { 
  78.  
  79. Node child = e.getFirstChild(); 
  80.  
  81. if(child instanceof CharacterData) { 
  82.  
  83. CharacterData cd = (CharacterData) child; 
  84.  
  85. return cd.getData(); 
  86.  
  87.  
  88. catch(Exception ex) { 
  89.  
  90.  
  91. return ""
  92.  
  93.  
  94. protected float getFloat(String value) { 
  95.  
  96. if(value != null && !value.equals("")) { 
  97.  
  98. return Float.parseFloat(value); 
  99.  
  100.  
  101. return 0
  102.  
  103.  
  104. protected String getElementValue(Element parent,String label) { 
  105.  
  106. return getCharacterDataFromElement((Element)parent.getElements 
  107.  
  108. ByTagName(label).item(0)); 
  109.  
  110.  
  111. public static void main(String[] args) { 
  112.  
  113. RSSReader reader = RSSReader.getInstance(); 
  114.  
  115. reader.writeNews(); 
  116.  
  117.  

下面的代碼清單給出了兩個代理(10.0.0.1 和 10.0.0.2)和一個收集器 (10.0.0.3) 的樣例配置文件。這些配置文件定義了來源、通道和接收器的語義。對于每種來源類型,我們還需要定義類型、命令、標(biāo)準(zhǔn)錯誤行為和故障選項。對于每個通道,我們需要定義通道類型。還必須定義容量(通道中存儲的最大事件數(shù))和事務(wù)容量(對于每個事務(wù),通道將從一個來源獲取或提供給一個接收器的最大事件數(shù))。類似地,對于每種接收器類型,我們需要定義類型、主機名(事件接收者的 IP 地址)和端口。對于 HDFS 接收器,我們提供了到達 HDFS 標(biāo)頭名稱節(jié)點的目錄路徑。

清單 2 顯示了示例配置文件 10.0.0.1.

清單 2. 代理 1 配置(10.0.0.1 上的 flume-conf.properties)

 

  1. # The configuration file needs to define the sources, 
  2.  
  3. # the channels and the sinks. 
  4.  
  5. # Sources, channels and sinks are defined per agent, 
  6.  
  7. # in this case called 'agent' 
  8.  
  9. agent.sources = reader 
  10.  
  11. agent.channels = memoryChannel 
  12.  
  13. agent.sinks = avro-forward-sink 
  14.  
  15. # For each one of the sources, the type is defined 
  16.  
  17. agent.sources.reader.type = exec 
  18.  
  19. agent.sources.reader.command = tail -f /var/log/flume-ng/source.txt 
  20.  
  21. # stderr is simply discarded, unless logStdErr=true 
  22.  
  23. # If the process exits for any reason, the source also exits and will produce no 
  24.  
  25. # further data. 
  26.  
  27. agent.sources.reader.logStdErr = true 
  28.  
  29. agent.sources.reader.restart = true 
  30.  
  31. # The channel can be defined as follows. 
  32.  
  33. agent.sources.reader.channels = memoryChannel 
  34.  
  35. # Each sink's type must be defined 
  36.  
  37. agent.sinks.avro-forward-sink.type = avro 
  38.  
  39. agent.sinks.avro-forward-sink.hostname = 10.0.0.3 
  40.  
  41. agent.sinks.avro-forward-sink.port = 60000 
  42.  
  43. #Specify the channel the sink should use 
  44.  
  45. agent.sinks.avro-forward-sink.channel = memoryChannel 
  46.  
  47. # Each channel's type is defined. 
  48.  
  49. agent.channels.memoryChannel.type = memory 
  50.  
  51. # Other config values specific to each type of channel(sink or source) 
  52.  
  53. # can be defined as well 
  54.  
  55. # In this case, it specifies the capacity of the memory channel 
  56.  
  57. agent.channels.memoryChannel.capacity = 10000 
  58.  
  59. agent.channels.memoryChannel.transactionCapacity = 100 

清單 3 顯示了示例配置文件 10.0.0.2。

清單 3. 代理 2 配置(10.0.0.2 上的 flume-conf.properties)

 

  1. agent.sources = reader 
  2.  
  3. agent.channels = memoryChannel 
  4.  
  5. agent.sinks = avro-forward-sink 
  6.  
  7. # For each one of the sources, the type is defined 
  8.  
  9. agent.sources.reader.type = exec 
  10.  
  11. agent.sources.reader.command = tail -f /var/log/flume-ng/source.txt 
  12.  
  13. # stderr is simply discarded, unless logStdErr=true 
  14.  
  15. # If the process exits for any reason, the source also exits and will produce 
  16.  
  17. # no further data. 
  18.  
  19. agent.sources.reader.logStdErr = true 
  20.  
  21. agent.sources.reader.restart = true 
  22.  
  23. # The channel can be defined as follows. 
  24.  
  25. agent.sources.reader.channels = memoryChannel 
  26.  
  27. # Each sink's type must be defined 
  28.  
  29. agent.sinks.avro-forward-sink.type = avro 
  30.  
  31. agent.sinks.avro-forward-sink.hostname = 10.0.0.3 
  32.  
  33. agent.sinks.avro-forward-sink.port = 60000 
  34.  
  35. #Specify the channel the sink should use 
  36.  
  37. agent.sinks.avro-forward-sink.channel = memoryChannel 
  38.  
  39. # Each channel's type is defined. 
  40.  
  41. agent.channels.memoryChannel.type = memory 
  42.  
  43. # Other config values specific to each type of channel(sink or source) 
  44.  
  45. # can be defined as well 
  46.  
  47. # In this case, it specifies the capacity of the memory channel 
  48.  
  49. agent.channels.memoryChannel.capacity = 10000 
  50.  
  51. agent.channels.memoryChannel.transactionCapacity = 100 

清單 4 顯示了收集器配置文件 10.0.0.3。

清單 4. 收集器配置(10.0.0.3 上的 flume-conf.properties)

  1. Collector configuration (flume-conf.properties on 10.0.0.3): 
  2.  
  3. # The configuration file needs to define the sources, 
  4.  
  5. # the channels and the sinks. 
  6.  
  7. # Sources, channels and sinks are defined per agent, 
  8.  
  9. # in this case called 'agent' 
  10.  
  11. agent.sources = avro-collection-source 
  12.  
  13. agent.channels = memoryChannel 
  14.  
  15. agent.sinks = hdfs-sink 
  16.  
  17. # For each one of the sources, the type is defined 
  18.  
  19. agent.sources.avro-collection-source.type = avro 
  20.  
  21. agent.sources.avro-collection-source.bind = 10.0.0.3 
  22.  
  23. agent.sources.avro-collection-source.port = 60000 
  24.  
  25. # The channel can be defined as follows. 
  26.  
  27. agent.sources.avro-collection-source.channels = memoryChannel 
  28.  
  29. # Each sink's type must be defined 
  30.  
  31. agent.sinks.hdfs-sink.type = hdfs 
  32.  
  33. agent.sinks.hdfs-sink.hdfs.path = hdfs://10.0.10.1:8020/flume 
  34.  
  35. #Specify the channel the sink should use 
  36.  
  37. agent.sinks.hdfs-sink.channel = memoryChannel 
  38.  
  39. # Each channel's type is defined. 
  40.  
  41. agent.channels.memoryChannel.type = memory 
  42.  
  43. # Other config values specific to each type of channel(sink or source) 
  44.  
  45. # can be defined as well 
  46.  
  47. # In this case, it specifies the capacity of the memory channel 
  48.  
  49. agent.channels.memoryChannel.capacity = 10000 
  50.  

#p#

后續(xù)步驟

現(xiàn)在我們已擁有讀取 RSS 提要的代碼,并知道如何配置 Flume 代理和收集器,我們可通過三個步驟設(shè)置整個系統(tǒng)。

步驟 1

編譯的 Java 代碼應(yīng)作為一個后臺進程執(zhí)行,以保持運行。

清單 5. 編譯的 Java 代碼

  1. $ javac RSSReader.java 
  2.  
  3. $ java -cp /root/RSSReader RSSReader > /var/log/flume-ng/source.txt & 

步驟 2

想啟動代理之前,您需要使用 $FLUME_HOME/conf/ 目錄下提供的模板來修改配置文件。在修改配置文件后,可使用以下命令啟動代理。

清單 6 顯示了啟動節(jié)點 1 上的代理的命令。

清單 6. 啟動節(jié)點 1 上的代理

  1. Agent node 1 (on 10.0.0.1): 
  2.  
  3. $ $FLUME_HOME/bin/flume-ng agent -n agent1 -c conf -f 
  4.  
  5. $FLUME_HOME/conf/flume-conf.properties 

清單 7 顯示了啟動節(jié)點 2 上的代理的命令。

清單 7. 啟動節(jié)點 2 上的代理

  1. Agent node 2 (on 10.0.0.2): 
  2.  
  3. $ $FLUME_HOME/bin/flume-ng agent -n agent2 -c conf -f 
  4.  
  5. $FLUME_HOME/conf/flume-conf.properties 

在這里,$FLUME_HOME 被定義為一個環(huán)境變量(bash 或 .bashrc),它指向 Flume 的主目錄(例如 /home/user/flume-1.4/)。

步驟 3

清單 8 啟動收集器。值得注意的是,配置文件負(fù)責(zé)節(jié)點的行為方式,比如它是代理還是收集器。

清單 8. 收集器節(jié)點(10.0.0.3 上)

  1. $ $FLUME_HOME/bin/flume-ng agent -n collector -c conf -f 
  2.  
  3. $FLUME_HOME/conf/flume-conf.properties

結(jié)束語

在本文中,我們介紹了 Flume,一個用于高效收集大量日志數(shù)據(jù)的、分布式的、可靠的服務(wù)。我們介紹了如何根據(jù)需要使用 Flume 來部署單躍點和多躍點流。我們還介紹了一個部署多躍點新聞聚合器 Web 服務(wù)的詳細示例。在該示例中,我們使用了 Avro 代理讀取 RSS 提要,并使用一個 HDFS 收集器存儲新聞提要。Flume 可用于構(gòu)建可擴展的分布式系統(tǒng)來收集大量數(shù)據(jù)流。
 

責(zé)任編輯:Ophira 來源: developerWorks 中國
相關(guān)推薦

2016-08-24 19:22:10

Docker SwarPython應(yīng)用

2010-01-12 09:10:31

Java EE 6Servlet 3.0Web分片

2019-05-20 13:20:36

Python編程語言情感分析

2017-01-05 19:29:10

公共云云存儲微軟

2024-09-23 00:00:10

2023-11-09 08:31:56

Spring微服務(wù)網(wǎng)關(guān)

2012-06-14 10:14:46

ibmdw

2013-03-22 15:55:22

Web架構(gòu)架構(gòu)

2022-06-16 08:00:00

元數(shù)據(jù)數(shù)據(jù)中心數(shù)據(jù)架構(gòu)

2011-08-08 14:31:49

服務(wù)器

2022-08-30 08:00:00

架構(gòu)數(shù)據(jù)庫Postgres

2009-09-16 10:00:14

可伸縮性Web服務(wù)

2021-12-09 05:36:16

云存儲可擴展性數(shù)據(jù)存儲云存儲

2011-03-22 13:00:50

Nagios

2009-03-16 09:16:13

行為擴展WCF.NET

2012-05-17 09:58:40

PHP

2023-10-11 13:46:26

緩存Web應(yīng)用程序

2023-11-14 10:43:42

微軟Kubernetes

2012-02-21 22:55:55

MDT 2010Windows 7

2011-03-22 13:00:49

Nagios
點贊
收藏

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

亚洲欧美日韩在线高清直播| 天天综合天天操| 黄色片视频在线播放| 欧美中文日韩| 国产精品一二三在线| 欧美激情日韩| 精品国产乱码久久| 国产在线一二| 日韩情涩欧美日韩视频| av岛国在线| 激情综合五月婷婷| 99re6热在线精品视频播放速度| 久久精品国产久精国产| 97netav| 男人的天堂在线| 亚洲美腿欧美激情另类| 在线看片成人| 亚洲精品在线一区二区| 日韩黄色大片| 欧美理论片在线观看| 2020中文字幕在线播放| 国产免费观看久久| 精品久久久久久久免费人妻| 玖玖玖国产精品| 国产亚洲自拍偷拍| 免费日韩一区二区| 日韩精品久久一区二区三区| 日本欧美在线观看| 亚洲国产一二三精品无码 | 国产成人三级在线观看| 午夜精品区一区二区三| 国产最新精品免费| av动漫在线看| 中文字幕乱码亚洲精品一区| 黄色一级视频在线播放| 中文字幕不卡在线播放| 黄页网站在线播放| 欧美亚日韩国产aⅴ精品中极品| 青青久在线视频免费观看| 一区二区三区中文字幕电影| 欧美3p视频在线观看| 欧美videossexotv100| 成人国产网站| 国产精品91久久久| 中文亚洲字幕| av动漫在线观看| 色综合久久中文综合久久牛| wwww亚洲| 成人亚洲综合色就1024| 国产iv一区二区三区| 中文字幕免费在线视频| 亚洲福利在线视频| 少妇精品久久久一区二区| 亚洲日本精品一区| 婷婷国产在线综合| h1515四虎成人| www.久久久| 91社区在线播放| 国产原创在线观看| 欧美一区二区三区免费视| 美女视频黄 久久| 一区二区成人| 欧美大片在线影院| 日韩精品亚洲一区| 黄在线免费观看| 国产精品视频地址| 国产日产欧美一区二区三区| 国产中文在线播放| 国产日韩精品推荐| 樱桃国产成人精品视频| 欧美特黄色片| 色中文字幕在线观看| 555夜色666亚洲国产免| 成人免费在线观看av| 五月婷婷狠狠操| 久久精品电影一区二区| 亚洲一区二区免费看| 国产三级视频在线| 欧美在线视频观看| 国产午夜精品一区二区| 成人黄色免费短视频| 日韩在线三区| 欧美本精品男人aⅴ天堂| 日韩精品欧美成人高清一区二区| 国产福利电影在线| 91免费看蜜桃| 在线观看欧美日本| 激情久久久久久| 日本高清中文字幕在线| 国产在线视频欧美一区二区三区| 日本我和搜子同居的日子高清在线 | 在线免费看黄网站| 欧洲精品码一区二区三区免费看| 日韩在线观看视频免费| 欧美一级xxx| 欧美日韩国产免费| 夜夜夜精品看看| 成人免费毛片app| 丝袜亚洲另类丝袜在线| 国产综合网站| 精品久久久久久久久久岛国gif| h视频网站在线观看| av五月天在线| 黄色www在线观看| 91亚洲一区精品| 日韩视频在线免费| 日韩网站在线看片你懂的| 亚洲欧美一区二区三区孕妇| 国产丶欧美丶日本不卡视频| 青青草一区二区三区| 亚洲综合电影一区二区三区| 老色鬼在线视频| dy888夜精品国产专区| 亚洲成人精品视频| 女人床在线观看| 国产a∨精品一区二区三区不卡| 日韩精品视频免费在线观看| 欧美性xxxx极品hd满灌| 国产视频一区在线观看| 欧美精品一区二区三区久久久竹菊| 亚洲婷婷伊人| 久久91麻豆精品一区| 日韩区欧美区| 97欧美成人| 成人观看网址| 性直播体位视频在线观看| 亚洲欧美日本免费| 成人午夜激情| 日本免费不卡| 亚洲综合图区| 成人精品在线| 欧美暴力喷水在线| 高清国产一区二区| 亚洲三级免费| 99re66热这里只有精品8| 精品久久福利| 性欧美超级视频| 成人无遮挡免费网站视频在线观看| www.男人的天堂| 国产美女特级嫩嫩嫩bbb片| 男人的天堂日韩| 国产国语videosex另类| 欧洲亚洲免费在线| 亚洲精品一区二区三区福利| 亚洲午夜免费电影| 五月天激情综合| 精品国产户外野外| 精品福利在线看| 午夜激情久久久| 欧美色videos| 色妹子一区二区| 5月丁香婷婷综合| 亚洲国产成人精品一区二区| 亚洲欧美另类在线观看| 欧美wwwxxxx| 国产精品视频色| 成人午夜影院在线观看| 狼狼综合久久久久综合网| 先锋影音日韩| 亚洲色成人一区二区三区小说| 一路向西2在线观看| 色在线免费视频| 超碰97免费在线| 亚洲开心激情| 在线成人国产| 韩国精品一区二区| 中文字幕日韩精品一区| 欧美日韩aaa| 欧美第一淫aaasss性| 91久久精品www人人做人人爽| 欧美 国产 精品| av女同在线| 蜜臀国产一区| 精品产国自在拍| 久久久久久穴| 亚洲午夜激情av| 国产亚洲欧洲高清一区| 亚洲一区二区三区香蕉| cao在线观看| 亚洲天天影视| 超碰成人久久| 97精品久久久久中文字幕| 欧美精品视频www在线观看| 国产69精品久久久久9999| 久久精品ww人人做人人爽| 丁香婷婷激情| 国产亚洲一区二区三区不卡| 亚洲精品护士| 一区二区三区四区高清精品免费观看 | wwww在线观看免费视频| 99久久.com| 亚洲欧洲日韩综合一区二区| 亚洲第一av网| 日本一区不卡| 在线中文资源天堂| 国产精品密蕾丝视频下载| 亚洲视频小说图片| 2019亚洲日韩新视频| 黄色片视频在线| 果冻天美麻豆一区二区国产|