一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

一次看完28個(gè)關(guān)于ES的性能調(diào)優(yōu)技巧

 Baruch 2020-11-23

后臺(tái)回復(fù)'',獲取

來源elasticsearch.cn/article/6202

因?yàn)榭偸强吹胶芏嗤瑢W(xué)在說Elasticsearch性能不夠好、集群不夠穩(wěn)定,詢問關(guān)于Elasticsearch的調(diào)優(yōu),但是每次都是一個(gè)個(gè)點(diǎn)的單獨(dú)講,很多時(shí)候都是case by case的解答,本文簡單梳理下日常的Elasticsearch使用調(diào)優(yōu),以下僅為自己日常經(jīng)驗(yàn)之談,如有疏漏,還請大家?guī)兔χ刚?/span>

一、配置文件調(diào)優(yōu)

elasticsearch.yml

1、內(nèi)存鎖定

bootstrap.memory_lock:true允許JVM鎖住內(nèi)存,禁止操作系統(tǒng)交換出去。

2、zen.discovery

Elasticsearch默認(rèn)被配置為使用單播發(fā)現(xiàn),以防止節(jié)點(diǎn)無意中加入集群。組播發(fā)現(xiàn)應(yīng)該永遠(yuǎn)不被使用在生產(chǎn)環(huán)境了,否則你得到的結(jié)果就是一個(gè)節(jié)點(diǎn)意外的加入到了你的生產(chǎn)環(huán)境,僅僅是因?yàn)樗麄兪盏搅艘粋€(gè)錯(cuò)誤的組播信號(hào)。

ES是一個(gè)P2P類型的分布式系統(tǒng),使用gossip協(xié)議,集群的任意請求都可以發(fā)送到集群的任一節(jié)點(diǎn),然后ES內(nèi)部會(huì)找到需要轉(zhuǎn)發(fā)的節(jié)點(diǎn),并且與之進(jìn)行通信。

在ES1.x的版本,ES默認(rèn)是開啟組播,啟動(dòng)ES之后,可以快速將局域網(wǎng)內(nèi)集群名稱,默認(rèn)端口的相同實(shí)例加入到一個(gè)大的集群,后續(xù)再ES2.x之后,都調(diào)整成了單播,避免安全問題和網(wǎng)絡(luò)風(fēng)暴。

單播 discovery.zen.ping.unicast.hosts,建議寫入集群內(nèi)所有的節(jié)點(diǎn)及端口,如果新實(shí)例加入集群,新實(shí)例只需要寫入當(dāng)前集群的實(shí)例,即可自動(dòng)加入到當(dāng)前集群,之后再處理原實(shí)例的配置即可,新實(shí)例加入集群,不需要重啟原有實(shí)例;

節(jié)點(diǎn)zen相關(guān)配置:discovery.zen.ping_timeout:判斷master選舉過程中,發(fā)現(xiàn)其他node存活的超時(shí)設(shè)置,主要影響選舉的耗時(shí),參數(shù)僅在加入或者選舉 master 主節(jié)點(diǎn)的時(shí)候才起作用discovery.zen.join_timeout:節(jié)點(diǎn)確定加入到集群中,向主節(jié)點(diǎn)發(fā)送加入請求的超時(shí)時(shí)間,默認(rèn)為3sdiscovery.zen.minimum_master_nodes:參與master選舉的最小節(jié)點(diǎn)數(shù),當(dāng)集群能夠被選為master的節(jié)點(diǎn)數(shù)量小于最小數(shù)量時(shí),集群將無法正常選舉。

3、故障檢測(fault detection)

兩種情況下會(huì)進(jìn)行故障檢測:

  • 第一種是由master向集群的所有其他節(jié)點(diǎn)發(fā)起ping,驗(yàn)證節(jié)點(diǎn)是否處于活動(dòng)狀態(tài);

  • 第二種是:集群每個(gè)節(jié)點(diǎn)向master發(fā)起ping,判斷master是否存活,是否需要發(fā)起選舉。故障檢測需要配置以下設(shè)置使用 形如:discovery.zen.fd.ping_interval節(jié)點(diǎn)被ping的頻率,默認(rèn)為1s。discovery.zen.fd.ping_timeout 等待ping響應(yīng)的時(shí)間,默認(rèn)為 30s,運(yùn)行的集群中,master 檢測所有節(jié)點(diǎn),以及節(jié)點(diǎn)檢測 master 是否正常。discovery.zen.fd.ping_retries ping失敗/超時(shí)多少導(dǎo)致節(jié)點(diǎn)被視為失敗,默認(rèn)為3。

https://www./guide/en/elasticsearch/reference/6.x/modules-discovery-zen.html

4、隊(duì)列數(shù)量

不建議盲目加大ES的隊(duì)列數(shù)量,如果是偶發(fā)的因?yàn)閿?shù)據(jù)突增,導(dǎo)致隊(duì)列阻塞,加大隊(duì)列size可以使用內(nèi)存來緩存數(shù)據(jù);如果是持續(xù)性的數(shù)據(jù)阻塞在隊(duì)列,加大隊(duì)列size除了加大內(nèi)存占用,并不能有效提高數(shù)據(jù)寫入速率,反而可能加大ES宕機(jī)時(shí)候,在內(nèi)存中可能丟失的上數(shù)據(jù)量。

哪些情況下,加大隊(duì)列size呢?GET /_cat/thread_pool,觀察api中返回的queue和rejected,如果確實(shí)存在隊(duì)列拒絕或者是持續(xù)的queue,可以酌情調(diào)整隊(duì)列size。

https://www./guide/en/elasticsearch/reference/6.x/modules-threadpool.html

5、內(nèi)存使用

設(shè)置indices的內(nèi)存熔斷相關(guān)參數(shù),根據(jù)實(shí)際情況進(jìn)行調(diào)整,防止寫入或查詢壓力過高導(dǎo)致OOM:

  • indices.breaker.total.limit:50%,集群級(jí)別的斷路器,默認(rèn)為jvm堆的70%;

  • indices.breaker.request.limit:10%,單個(gè)request的斷路器限制,默認(rèn)為jvm堆的60%;

  • indices.breaker.fielddata.limit:10%,fielddata breaker限制,默認(rèn)為jvm堆的60%。

https://www./guide/en/elasticsearch/reference/6.x/circuit-breaker.html

根據(jù)實(shí)際情況調(diào)整查詢占用cache,避免查詢cache占用過多的jvm內(nèi)存,參數(shù)為靜態(tài)的,需要在每個(gè)數(shù)據(jù)節(jié)點(diǎn)配置。indices.queries.cache.size: 5%,控制過濾器緩存的內(nèi)存大小,默認(rèn)為10%。接受百分比值,5%或者精確值,例如512mb。

https://www./guide/en/elasticsearch/reference/6.x/query-cache.html

6、創(chuàng)建shard

如果集群規(guī)模較大,可以阻止新建shard時(shí)掃描集群內(nèi)全部shard的元數(shù)據(jù),提升shard分配速度。

cluster.routing.allocation.disk.include_relocations: false,默認(rèn)為true。

https://www./guide/en/elasticsearch/reference/6.x/disk-allocator.html

二、系統(tǒng)層面調(diào)優(yōu)

1、jdk版本

當(dāng)前根據(jù)官方建議,選擇匹配的jdk版本。

2、jdk內(nèi)存配置

首先,-Xms和-Xmx設(shè)置為相同的值,避免在運(yùn)行過程中再進(jìn)行內(nèi)存分配,同時(shí),如果系統(tǒng)內(nèi)存小于64G,建議設(shè)置略小于機(jī)器內(nèi)存的一半,剩余留給系統(tǒng)使用。

同時(shí),jvm heap建議不要超過32G(不同jdk版本具體的值會(huì)略有不同),否則jvm會(huì)因?yàn)閮?nèi)存指針壓縮導(dǎo)致內(nèi)存浪費(fèi),詳見:

https://www./guide/cn/elasticsearch/guide/current/heap-sizing.html

3、交換分區(qū)

關(guān)閉交換分區(qū),防止內(nèi)存發(fā)生交換導(dǎo)致性能下降(部分情況下,寧死勿慢) swapoff -a

4、文件句柄

Lucene 使用了 大量的 文件。同時(shí),Elasticsearch 在節(jié)點(diǎn)和 HTTP 客戶端之間進(jìn)行通信也使用了大量的套接字,所有這一切都需要足夠的文件描述符,默認(rèn)情況下,linux默認(rèn)運(yùn)行單個(gè)進(jìn)程打開1024個(gè)文件句柄,這顯然是不夠的,故需要加大文件句柄數(shù) ulimit -n 65536。

https://www./guide/en/elasticsearch/reference/6.5/setting-system-settings.html

5、mmap

Elasticsearch 對各種文件混合使用了 NioFs( 注:非阻塞文件系統(tǒng))和 MMapFs ( 注:內(nèi)存映射文件系統(tǒng))。請確保你配置的最大映射數(shù)量,以便有足夠的虛擬內(nèi)存可用于 mmapped 文件。

這可以暫時(shí)設(shè)置:sysctl -w vm.max_map_count=262144 或者你可以在 /etc/sysctl.conf 通過修改 vm.max_map_count 永久設(shè)置它。

https://www./guide/cn/elasticsearch/guide/current/_file_descriptors_and_mmap.html

6、磁盤

如果你正在使用 SSDs,確保你的系統(tǒng) I/O 調(diào)度程序是配置正確的。當(dāng)你向硬盤寫數(shù)據(jù),I/O 調(diào)度程序決定何時(shí)把數(shù)據(jù)實(shí)際發(fā)送到硬盤。大多數(shù)默認(rèn) nix 發(fā)行版下的調(diào)度程序都叫做 cfq(完全公平隊(duì)列)。但它是為旋轉(zhuǎn)介質(zhì)優(yōu)化的:機(jī)械硬盤的固有特性意味著它寫入數(shù)據(jù)到基于物理布局的硬盤會(huì)更高效。這對 SSD 來說是低效的,盡管這里沒有涉及到機(jī)械硬盤。

但是,deadline 或者 noop 應(yīng)該被使用。deadline 調(diào)度程序基于寫入等待時(shí)間進(jìn)行優(yōu)化, noop 只是一個(gè)簡單的 FIFO 隊(duì)列。echo noop > /sys/block/sd/queue/scheduler。

7、磁盤掛載

mount -o noatime,data=writeback,barrier=0,nobh /dev/sd* /esdata* 其中,noatime,禁止記錄訪問時(shí)間戳;data=writeback,不記錄journal;barrier=0,因?yàn)殛P(guān)閉了journal,所以同步關(guān)閉barrier;nobh,關(guān)閉buffer_head,防止內(nèi)核影響數(shù)據(jù)IO。

8、磁盤其他注意事項(xiàng)

使用 RAID 0。條帶化 RAID 會(huì)提高磁盤I/O,代價(jià)顯然就是當(dāng)一塊硬盤故障時(shí)整個(gè)就故障了,不要使用鏡像或者奇偶校驗(yàn) RAID 因?yàn)楦北疽呀?jīng)提供了這個(gè)功能。

另外,使用多塊硬盤,并允許 Elasticsearch 通過多個(gè) path.data 目錄配置把數(shù)據(jù)條帶化分配到它們上面。不要使用遠(yuǎn)程掛載的存儲(chǔ),比如 NFS 或者 SMB/CIFS。這個(gè)引入的延遲對性能來說完全是背道而馳的。

三、Elasticsearch使用方式調(diào)優(yōu)

當(dāng)Elasticsearch本身的配置沒有明顯的問題之后,發(fā)現(xiàn)ES使用還是非常慢,這個(gè)時(shí)候,就需要我們?nèi)ザㄎ籈S本身的問題了,首先祭出定位問題的第一個(gè)命令:

1、hot_threads

GET /_nodes/hot_threads&interval=30s

抓取30s的節(jié)點(diǎn)上占用資源的熱線程,并通過排查占用資源最多的TOP線程來判斷對應(yīng)的資源消耗是否正常。一般情況下,bulk,search類的線程占用資源都可能是業(yè)務(wù)造成的,但是如果是merge線程占用了大量的資源,就應(yīng)該考慮是不是創(chuàng)建index或者刷磁盤間隔太小,批量寫入size太小造成的。

https://www./guide/en/elasticsearch/reference/6.x/cluster-nodes-hot-threads.html

2、pending_tasks

GET /_cluster/pending_tasks

有一些任務(wù)只能由主節(jié)點(diǎn)去處理,比如創(chuàng)建一個(gè)新的索引或者在集群中移動(dòng)分片,由于一個(gè)集群中只能有一個(gè)主節(jié)點(diǎn),所以只有這一master節(jié)點(diǎn)可以處理集群級(jí)別的元數(shù)據(jù)變動(dòng)。

在99.9999%的時(shí)間里,這不會(huì)有什么問題,元數(shù)據(jù)變動(dòng)的隊(duì)列基本上保持為零。在一些罕見的集群里,元數(shù)據(jù)變動(dòng)的次數(shù)比主節(jié)點(diǎn)能處理的還快,這會(huì)導(dǎo)致等待中的操作會(huì)累積成隊(duì)列。

這個(gè)時(shí)候可以通過pending_tasks api分析當(dāng)前什么操作阻塞了ES的隊(duì)列,比如,集群異常時(shí),會(huì)有大量的shard在recovery,如果集群在大量創(chuàng)建新字段,會(huì)出現(xiàn)大量的put_mappings的操作,所以正常情況下,需要禁用動(dòng)態(tài)mapping。

https://www./guide/en/elasticsearch/reference/current/cluster-pending.html

3、字段存儲(chǔ)

當(dāng)前es主要有doc_values,fielddata,storefield三種類型,大部分情況下,并不需要三種類型都存儲(chǔ),可根據(jù)實(shí)際場景進(jìn)行調(diào)整:

  • 當(dāng)前用得最多的就是doc_values,列存儲(chǔ),對于不需要進(jìn)行分詞的字段,都可以開啟doc_values來進(jìn)行存儲(chǔ)(且只保留keyword字段),節(jié)約內(nèi)存,當(dāng)然,開啟doc_values會(huì)對查詢性能有一定的影響,但是,這個(gè)性能損耗是比較小的,而且是值得的;

  • fielddata構(gòu)建和管理 100% 在內(nèi)存中,常駐于 JVM 內(nèi)存堆,所以可用于快速查詢,但是這也意味著它本質(zhì)上是不可擴(kuò)展的,有很多邊緣情況下要提防,如果對于字段沒有分析需求,可以關(guān)閉fielddata;

  • storefield主要用于_source字段,默認(rèn)情況下,數(shù)據(jù)在寫入es的時(shí)候,es會(huì)將doc數(shù)據(jù)存儲(chǔ)為_source字段,查詢時(shí)可以通過_source字段快速獲取doc的原始結(jié)構(gòu),如果沒有update,reindex等需求,可以將_source字段disable;

  • _all,ES在6.x以前的版本,默認(rèn)將寫入的字段拼接成一個(gè)大的字符串,并對該字段進(jìn)行分詞,用于支持整個(gè)doc的全文檢索,在知道doc字段名稱的情況下,建議關(guān)閉掉該字段,節(jié)約存儲(chǔ)空間,也避免不帶字段key的全文檢索;

  • norms:搜索時(shí)進(jìn)行評分,日志場景一般不需要評分,建議關(guān)閉。

4、tranlog

Elasticsearch 2.0之后為了保證不丟數(shù)據(jù),每次 index、bulk、delete、update 完成的時(shí)候,一定觸發(fā)刷新 translog 到磁盤上,才給請求返回 200 OK。這個(gè)改變在提高數(shù)據(jù)安全性的同時(shí)當(dāng)然也降低了一點(diǎn)性能。如果你不在意這點(diǎn)可能性,還是希望性能優(yōu)先,可以在 index template 里設(shè)置如下參數(shù):

{

    'index.translog.durability': 'async'

}

index.translog.sync_interval:

對于一些大容量的偶爾丟失幾秒數(shù)據(jù)問題也并不嚴(yán)重的集群,使用異步的 fsync 還是比較有益的。

比如,寫入的數(shù)據(jù)被緩存到內(nèi)存中,再每5秒執(zhí)行一次 fsync ,默認(rèn)為5s。小于的值100ms是不允許的。

index.translog.flush_threshold_size:

translog存儲(chǔ)尚未安全保存在Lucene中的所有操作。雖然這些操作可用于讀取,但如果要關(guān)閉并且必須恢復(fù),則需要重新編制索引。

此設(shè)置控制這些操作的最大總大小,以防止恢復(fù)時(shí)間過長。達(dá)到設(shè)置的最大size后,將發(fā)生刷新,生成新的Lucene提交點(diǎn),默認(rèn)為512mb。

5、refresh_interval

執(zhí)行刷新操作的頻率,這會(huì)使索引的最近更改對搜索可見,默認(rèn)為1s,可以設(shè)置-1為禁用刷新,對于寫入速率要求較高的場景,可以適當(dāng)?shù)募哟髮?yīng)的時(shí)長,減小磁盤io和segment的生成。

6、禁止動(dòng)態(tài)mapping

動(dòng)態(tài)mapping的壞處:

  • 造成集群元數(shù)據(jù)一直變更,導(dǎo)致集群不穩(wěn)定;

  • 可能造成數(shù)據(jù)類型與實(shí)際類型不一致;

  • 對于一些異常字段或者是掃描類的字段,也會(huì)頻繁的修改mapping,導(dǎo)致業(yè)務(wù)不可控。

動(dòng)態(tài)mapping配置的可選值及含義如下:

  • true:支持動(dòng)態(tài)擴(kuò)展,新增數(shù)據(jù)有新的字段屬性時(shí),自動(dòng)添加對于的mapping,數(shù)據(jù)寫入成功;

  • false:不支持動(dòng)態(tài)擴(kuò)展,新增數(shù)據(jù)有新的字段屬性時(shí),直接忽略,數(shù)據(jù)寫入成功 ;

  • strict:不支持動(dòng)態(tài)擴(kuò)展,新增數(shù)據(jù)有新的字段時(shí),報(bào)錯(cuò),數(shù)據(jù)寫入失敗。

7、批量寫入

批量請求顯然會(huì)大大提升寫入速率,且這個(gè)速率是可以量化的,官方建議每次批量的數(shù)據(jù)物理字節(jié)數(shù)5-15MB是一個(gè)比較不錯(cuò)的起點(diǎn),注意這里說的是物理字節(jié)數(shù)大小。

文檔計(jì)數(shù)對批量大小來說不是一個(gè)好指標(biāo)。

比如說,如果你每次批量索引 1000 個(gè)文檔,記住下面的事實(shí):1000 個(gè) 1 KB 大小的文檔加起來是 1 MB 大。1000 個(gè) 100 KB 大小的文檔加起來是 100 MB 大。這可是完完全全不一樣的批量大小了。

批量請求需要在協(xié)調(diào)節(jié)點(diǎn)上加載進(jìn)內(nèi)存,所以批量請求的物理大小比文檔計(jì)數(shù)重要得多。從 5–15 MB 開始測試批量請求大小,緩慢增加這個(gè)數(shù)字,直到你看不到性能提升為止。

然后開始增加你的批量寫入的并發(fā)度(多線程等等辦法)。用iostat 、 top 和 ps 等工具監(jiān)控你的節(jié)點(diǎn),觀察資源什么時(shí)候達(dá)到瓶頸。

如果你開始收到 EsRejectedExecutionException ,你的集群沒辦法再繼續(xù)了:至少有一種資源到瓶頸了?;蛘邷p少并發(fā)數(shù),或者提供更多的受限資源(比如從機(jī)械磁盤換成 SSD),或者添加更多節(jié)點(diǎn)。

8、索引和shard

ES的索引,shard都會(huì)有對應(yīng)的元數(shù)據(jù),且因?yàn)镋S的元數(shù)據(jù)都是保存在master節(jié)點(diǎn),且元數(shù)據(jù)的更新是要hang住集群向所有節(jié)點(diǎn)同步的。

當(dāng)ES的新建字段或者新建索引的時(shí)候,都會(huì)要獲取集群元數(shù)據(jù),并對元數(shù)據(jù)進(jìn)行變更及同步,此時(shí)會(huì)影響集群的響應(yīng),所以需要關(guān)注集群的index和shard數(shù)量。

建議如下:

  • 使用shrink和rollover api,相對生成合適的數(shù)據(jù)shard數(shù);

  • 根據(jù)數(shù)據(jù)量級(jí)及對應(yīng)的性能需求,選擇創(chuàng)建index的名稱,形如:按月生成索引:test-YYYYMM,按天生成索引:test-YYYYMMDD;

  • 控制單個(gè)shard的size,正常情況下,日志場景,建議單個(gè)shard不大于50GB,線上業(yè)務(wù)場景,建議單個(gè)shard不超過20GB。

9、segment merge

段合并的計(jì)算量龐大, 而且還要吃掉大量磁盤 I/O。合并在后臺(tái)定期操作,因?yàn)樗麄兛赡芤荛L時(shí)間才能完成,尤其是比較大的段。

這個(gè)通常來說都沒問題,因?yàn)榇笠?guī)模段合并的概率是很小的。如果發(fā)現(xiàn)merge占用了大量的資源,可以設(shè)置:index.merge.scheduler.max_thread_count:1

特別是機(jī)械磁盤在并發(fā) I/O 支持方面比較差,所以我們需要降低每個(gè)索引并發(fā)訪問磁盤的線程數(shù)。這個(gè)設(shè)置允許 max_thread_count + 2 個(gè)線程同時(shí)進(jìn)行磁盤操作,也就是設(shè)置為 1 允許三個(gè)線程。

對于 SSD,你可以忽略這個(gè)設(shè)置,默認(rèn)是 Math.min(3, Runtime.getRuntime().availableProcessors() / 2) ,對 SSD 來說運(yùn)行的很好。

業(yè)務(wù)低峰期通過force_merge強(qiáng)制合并segment,降低segment的數(shù)量,減小內(nèi)存消耗;關(guān)閉冷索引,業(yè)務(wù)需要的時(shí)候再進(jìn)行開啟,如果一直不使用的索引,可以定期刪除,或者備份到hadoop集群。

10、二級(jí)自動(dòng)生成_id

當(dāng)寫入端使用特定的id將數(shù)據(jù)寫入ES時(shí),ES會(huì)去檢查對應(yīng)的index下是否存在相同的id,這個(gè)操作會(huì)隨著文檔數(shù)量的增加而消耗越來越大,所以如果業(yè)務(wù)上沒有強(qiáng)需求,建議使用ES自動(dòng)生成的id,加快寫入速率。

11、routing

對于數(shù)據(jù)量較大的業(yè)務(wù)查詢場景,ES側(cè)一般會(huì)創(chuàng)建多個(gè)shard,并將shard分配到集群中的多個(gè)實(shí)例來分?jǐn)倝毫?,正常情況下,一個(gè)查詢會(huì)遍歷查詢所有的shard,然后將查詢到的結(jié)果進(jìn)行merge之后,再返回給查詢端。

此時(shí),寫入的時(shí)候設(shè)置routing,可以避免每次查詢都遍歷全量shard,而是查詢的時(shí)候也指定對應(yīng)的routingkey,這種情況下,ES會(huì)只去查詢對應(yīng)的shard,可以大幅度降低合并數(shù)據(jù)和調(diào)度全量shard的開銷。

12、使用alias

生產(chǎn)提供服務(wù)的索引,切記使用別名提供服務(wù),而不是直接暴露索引名稱,避免后續(xù)因?yàn)闃I(yè)務(wù)變更或者索引數(shù)據(jù)需要reindex等情況造成業(yè)務(wù)中斷。

13、避免寬表

在索引中定義太多字段是一種可能導(dǎo)致映射爆炸的情況,這可能導(dǎo)致內(nèi)存不足錯(cuò)誤和難以恢復(fù)的情況,這個(gè)問題可能比預(yù)期更常見,index.mapping.total_fields.limit ,默認(rèn)值是1000。

14、避免稀疏索引

因?yàn)樗饕∈柚?,對?yīng)的相鄰文檔id的delta值會(huì)很大,lucene基于文檔id做delta編碼壓縮導(dǎo)致壓縮率降低,從而導(dǎo)致索引文件增大。

同時(shí),ES的keyword,數(shù)組類型采用doc_values結(jié)構(gòu),每個(gè)文檔都會(huì)占用一定的空間,即使字段是空值,所以稀疏索引會(huì)造成磁盤size增大,導(dǎo)致查詢和寫入效率降低。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    福利一区二区视频在线| 中文字幕久久精品亚洲乱码| 国产三级欧美三级日韩三级| 亚洲一区二区久久观看| 国产美女精品午夜福利视频| 国产精品日韩欧美第一页| 日韩国产中文在线视频| 丝袜av一区二区三区四区五区 | 国产一区二区三区四区免费| 欧美日韩综合在线第一页| 美日韩一区二区精品系列| 成人精品一级特黄大片| 中文字幕一区二区三区大片| 国产又粗又猛又爽色噜噜| 欧美一区二区三区播放| 九七人妻一区二区三区| 99热九九热这里只有精品| 欧美激情一区=区三区| 亚洲五月婷婷中文字幕| 99国产高清不卡视频| 91天堂素人精品系列全集| 中文字幕中文字幕在线十八区| 在线一区二区免费的视频| 冬爱琴音一区二区中文字幕| 超碰在线免费公开中国黄片| 日本不卡在线视频你懂的| 天堂网中文字幕在线视频| 日本淫片一区二区三区| 免费人妻精品一区二区三区久久久| 久久精品一区二区少妇| 不卡视频免费一区二区三区| 人人妻在人人看人人澡| 伊人网免费在线观看高清版| 亚洲另类欧美综合日韩精品 | av在线免费播放一区二区| 中文字幕亚洲在线一区| 真实偷拍一区二区免费视频| 内用黄老外示儒术出处| 嫩草国产福利视频一区二区| 日韩高清毛片免费观看| 日韩一区欧美二区国产|