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

基于PostgreSQL流復制的容災庫架構設想及實現

開發 架構 PostgreSQL
我們知道在PostgreSQL中,其mvcc機制并不像Oracle或者MySQL一樣,將舊版本數據存放在另外的空間中,而是通過對事務號(xid)的控制對舊版本數據不可見的方式進行實現。所以PostgreSQL中無法實現類似于Oracle的閃回機制。

 [[409992]]

本文轉載自微信公眾號「數據和云」,作者王鑫。轉載本文請聯系數據和云公眾號。

一、前言

這幾天在對PostgreSQL流復制的架構進行深入研究,其中一個關鍵的參數:recovery_min_apply_delay引起了我的注意,設置該參數的大概意思是:在進行流復制的時候,備庫會延遲主庫recovery_min_apply_delay的時間進行應用。比如說,我們在主庫上insert10條數據,不會立即在備庫上生效,而是在recovery_min_apply_delay的時間后,備庫才能完成應用。

另外,我們知道在PostgreSQL中,其mvcc機制并不像Oracle或者MySQL一樣,將舊版本數據存放在另外的空間中,而是通過對事務號(xid)的控制對舊版本數據不可見的方式進行實現。所以PostgreSQL中無法實現類似于Oracle的閃回機制。

在日常操作過程中,對表進行delete、truncate、drop等誤操作都不能通過閃回來快速恢復。不怕一萬,就怕萬一,在做數據庫維護的6年多里,遇到過的誤操作還是很多。那么在PostgreSQL這種無法實現閃回的數據庫中,如果出現誤操作如何快速恢復呢?

二、架構簡介

對于PostgreSQL數據庫這種無法進行閃回的數據庫來講,最常用的辦法就是通過備份+歸檔的方式進行數據恢復。但是這種恢復方式也有弊端,當數據庫非常大時,恢復全量備份也會非常的慢,而且如果全量備份是一周前或者更久前的,那么恢復歸檔也會需要比較長的時間。這段時間內,可能業務就會長時間停擺,造成一定的損失。

如果通過流復制延遲特性作為生產數據庫的容災庫,則可以從一定程度上解決該問題,其簡單架構如下:

三、恢復步驟

PostgreSQL流復制容災庫架構的誤操作恢復步驟如下:

1.主庫出現誤操作,查看流復制的replay狀態;

2.在recovery_min_apply_delay時間內,暫停備庫的replay;

3.判斷主庫出現的誤操作類型(delete/truncate/drop);

4.根據主庫誤操作類型,對備庫進行相應的操作;

5.通過pg_dump將誤操作表導出;

6.在主庫對pg_dump出的表進行恢復。

假設當前備庫與主庫相差10min,則誤操作可以分為以下兩個場景:

1)delete操作:

首先我們需要知道的是,針對delete操作,PostgreSQL會給相關表加一個ROW EXCLUSIVE鎖,而該鎖不會對select等dql操作進行阻塞。

所以當我們在主庫進行delete誤操作后,備庫則會晚10min中進行replay。且此時可以對該表進行查詢和pg_dump的導出。針對于主庫delete誤操作,恢復步驟如下:

第一步,查看流復制replay的狀態,重點關注replay_lsn字段:

  1. select * from pg_stat_replication; 
  2. postgres=# select * from pg_stat_replication; 
  3. -[ RECORD 1 ]----+------------------------------ 
  4. pid              | 55694 
  5. usesysid         | 24746 
  6. usename          | repl 
  7. application_name | walreceiver 
  8. client_addr      | 192.168.18.82 
  9. client_hostname  |  
  10. client_port      | 31550 
  11. backend_start    | 2021-01-20 09:54:57.039779+08 
  12. backend_xmin     |  
  13. state            | streaming 
  14. sent_lsn         | 6/D2A17120 
  15. write_lsn        | 6/D2A17120 
  16. flush_lsn        | 6/D2A17120 
  17. replay_lsn       | 6/D2A170B8 
  18. write_lag        | 00:00:00.000119 
  19. flush_lag        | 00:00:00.000239 
  20. replay_lag       | 00:00:50.653858 
  21. sync_priority    | 0 
  22. sync_state       | async 
  23. reply_time       | 2021-01-20 14:11:31.704194+08 

此時可以發現數據庫中的replay_lsn字段的lsn值要比sent_lsn/write_lsn/flush_lsn都要小;

第二步,為了防止處理或者導出時間過慢而導致的數據同步,立即暫停備庫的replay:

  1. select * from pg_wal_replay_pause(); 

查看同步狀態:

  1. postgres=# select * from pg_is_wal_replay_paused();   
  2.  
  3.  pg_is_wal_replay_paused  
  4. ------------------------- 
  5.  t 
  6. (1 row) 

第三步,在備庫查看數據是否存在:

  1. select * from wangxin1; 

第四步,通過pg_dump,將表內容導出:

  1. pg_dump -h 192.168.18.182 -p 18802 -d postgres -U postgres -t wangxin1 --data-only --inserts -f wangxin1_data_only.sql 

第五步,在主庫執行sql文件,將數據重新插入:

  1. psql -p 18801 
  2. \i wangxin1_data_only.sql 

恢復即完成。

2)truncate和drop:

這里首先需要知道的是,truncate和drop操作會給表加上一個access exclusive鎖,該類型鎖是PostgreSQL數據庫中最嚴重的鎖。如果表上有該鎖,則會阻止所有對該此表的訪問操作,其中也包括select和pg_dump操作。

所以說,在我們對主庫中的某張表進行truncate或者drop后,同樣,備庫會由于recovery_min_apply_delay參數比主庫晚完成truncate或drop動作10min(從參數理論上是這樣理解的,但實際并不是)。

那么針對truncate和drop的恢復過程我們也參考delete的方式來進行:

  1. -[ RECORD 2 ]----+------------------------------ 
  2. pid              | 67008 
  3. usesysid         | 24746 
  4. usename          | repl 
  5. application_name | walreceiver 
  6. client_addr      | 192.168.18.82 
  7. client_hostname  |  
  8. client_port      | 32122 
  9. backend_start    | 2021-01-20 23:33:05.538858+08 
  10. backend_xmin     |  
  11. state            | streaming 
  12. sent_lsn         | 7/3F0593E0 
  13. write_lsn        | 7/3F0593E0 
  14. flush_lsn        | 7/3F0593E0 
  15. replay_lsn       | 7/3F059330 
  16. write_lag        | 00:00:00.000141 
  17. flush_lag        | 00:00:00.000324 
  18. replay_lag       | 00:00:11.471699 
  19. sync_priority    | 0 
  20. sync_state       | async 
  21. reply_time       | 2021-01-20 23:33:58.303686+08 

接下來,為防止處理或導出時間過慢而導致的數據同步,應立即暫停備庫的replay:

  1. select * from pg_wal_replay_pause(); 

查看同步狀態:

  1. postgres=# select * from pg_is_wal_replay_paused();   
  2.  
  3.  pg_is_wal_replay_paused  
  4. ------------------------- 
  5.  t 
  6. (1 row) 

接著,在備庫查看數據是否存在:

  1. select * from wangxin1; 

但是,此時就會發現問題:數據無法select出來,整個select進程會卡住(pg_dump也一樣):

  1. ^CCancel request sent 
  2. ERROR:  canceling statement due to user request 

此時,可以對備庫上的鎖信息進行查詢:

  1. select s.pid, 
  2. s.datname, 
  3. s.usename, 
  4. l.relation::regclass, 
  5. s.client_addr, 
  6. now()-s.query_start, 
  7. s.wait_event, 
  8. s.wait_event_type, 
  9. l.granted, 
  10. l.mode, 
  11. s.query 
  12. from pg_stat_activity s ,pg_locks l 
  13. where s.pid<>pg_backend_pid() 
  14. and s.pid=l.pid; 
  15.  
  16.   pid  | datname | usename | relation | client_addr | ?column? |     wait_event     | wait_event_type | granted |        mode         | query  
  17. -------+---------+---------+----------+-------------+----------+--------------------+-----------------+---------+---------------------+------- 
  18.  55689 |         |         |          |             |          | RecoveryApplyDelay | Timeout         | t       | ExclusiveLock       |  
  19.  55689 |         |         | wangxin1 |             |          | RecoveryApplyDelay | Timeout         | t       | AccessExclusiveLock |  
  20. (2 rows

發現此時truncate的表被鎖住了,而pid進程則是備庫的recover進程,所以此時我們根本無法訪問該表,也就無法做pg_dump操作了。

因此,想要恢復則必須想辦法將數據庫還原到鎖表之前的操作。于是對PostgreSQL的wal日志進行分析查看:

  1. pg_waldump -p /pgdata/pg_wal -s 7/3F000000 
  2.  
  3. rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 7/3F050D70, prev 7/3F050D40, desc: RUNNING_XACTS nextXid 13643577 latestCompletedXid 13643576 oldestRunningXid 13643577 
  4. rmgr: Heap2       len (rec/tot):     60/    60, tx:   13643577, lsn: 7/3F050DA8, prev 7/3F050D70, desc: NEW_CID rel 1663/13593/2619; tid 20/27; cmin: 4294967295, cmax: 0, combo: 4294967295 
  5. rmgr: Heap2       len (rec/tot):     60/    60, tx:   13643577, lsn: 7/3F050DE8, prev 7/3F050DA8, desc: NEW_CID rel 1663/13593/2619; tid 20/23; cmin: 0, cmax: 4294967295, combo: 4294967295 
  6. rmgr: Heap        len (rec/tot):     65/  6889, tx:   13643577, lsn: 7/3F050E28, prev 7/3F050DE8, desc: HOT_UPDATE off 27 xmax 13643577 flags 0x00 ; new off 23 xmax 0, blkref #0: rel 1663/13593/2619 blk 20 FPW 
  7. rmgr: Heap2       len (rec/tot):     60/    60, tx:   13643577, lsn: 7/3F052930, prev 7/3F050E28, desc: NEW_CID rel 1663/13593/2619; tid 20/28; cmin: 4294967295, cmax: 0, combo: 4294967295 
  8. rmgr: Heap2       len (rec/tot):     60/    60, tx:   13643577, lsn: 7/3F052970, prev 7/3F052930, desc: NEW_CID rel 1663/13593/2619; tid 20/24; cmin: 0, cmax: 4294967295, combo: 4294967295 
  9. rmgr: Heap        len (rec/tot):     76/    76, tx:   13643577, lsn: 7/3F0529B0, prev 7/3F052970, desc: HOT_UPDATE off 28 xmax 13643577 flags 0x20 ; new off 24 xmax 0, blkref #0: rel 1663/13593/2619 blk 20 
  10. rmgr: Heap        len (rec/tot):     53/  7349, tx:   13643577, lsn: 7/3F052A00, prev 7/3F0529B0, desc: INPLACE off 13, blkref #0: rel 1663/13593/1259 blk 1 FPW 
  11. rmgr: Transaction len (rec/tot):    130/   130, tx:   13643577, lsn: 7/3F0546D0, prev 7/3F052A00, descCOMMIT 2021-01-20 23:31:23.009466 CST; inval msgs: catcache 58 catcache 58 catcache 50 catcache 49 relcache 24780 
  12. rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 7/3F054758, prev 7/3F0546D0, desc: RUNNING_XACTS nextXid 13643578 latestCompletedXid 13643577 oldestRunningXid 13643578 
  13. rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 7/3F054790, prev 7/3F054758, desc: RUNNING_XACTS nextXid 13643578 latestCompletedXid 13643577 oldestRunningXid 13643578 
  14. rmgr: XLOG        len (rec/tot):    114/   114, tx:          0, lsn: 7/3F0547C8, prev 7/3F054790, desc: CHECKPOINT_ONLINE redo 7/3F054790; tli 1; prev tli 1; fpw true; xid 0:13643578; oid 33072; multi 1; offset 0; oldest xid 479 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 13643578; online 
  15. rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 7/3F054840, prev 7/3F0547C8, desc: RUNNING_XACTS nextXid 13643578 latestCompletedXid 13643577 oldestRunningXid 13643578 
  16. rmgr: Standby     len (rec/tot):     42/    42, tx:   13643578, lsn: 7/3F054878, prev 7/3F054840, desc: LOCK xid 13643578 db 13593 rel 24780  
  17. rmgr: Storage     len (rec/tot):     42/    42, tx:   13643578, lsn: 7/3F0548A8, prev 7/3F054878, descCREATE base/13593/24885 
  18. rmgr: Heap2       len (rec/tot):     60/    60, tx:   13643578, lsn: 7/3F0548D8, prev 7/3F0548A8, desc: NEW_CID rel 1663/13593/1259; tid 1/13; cmin: 4294967295, cmax: 0, combo: 4294967295 
  19. rmgr: Heap2       len (rec/tot):     60/    60, tx:   13643578, lsn: 7/3F054918, prev 7/3F0548D8, desc: NEW_CID rel 1663/13593/1259; tid 1/14; cmin: 0, cmax: 4294967295, combo: 4294967295 
  20. rmgr: Heap        len (rec/tot):     65/  7537, tx:   13643578, lsn: 7/3F054958, prev 7/3F054918, descUPDATE off 13 xmax 13643578 flags 0x00 ; new off 14 xmax 0, blkref #0: rel 1663/13593/1259 blk 1 FPW 
  21. rmgr: Heap2       len (rec/tot):     76/    76, tx:   13643578, lsn: 7/3F0566E8, prev 7/3F054958, desc: CLEAN remxid 13642576, blkref #0: rel 1663/13593/1259 blk 1 
  22. rmgr: Btree       len (rec/tot):     53/  3573, tx:   13643578, lsn: 7/3F056738, prev 7/3F0566E8, desc: INSERT_LEAF off 141, blkref #0: rel 1663/13593/2662 blk 2 FPW 
  23. rmgr: Btree       len (rec/tot):     53/  5349, tx:   13643578, lsn: 7/3F057530, prev 7/3F056738, desc: INSERT_LEAF off 117, blkref #0: rel 1663/13593/2663 blk 2 FPW 
  24. rmgr: Btree       len (rec/tot):     53/  2253, tx:   13643578, lsn: 7/3F058A30, prev 7/3F057530, desc: INSERT_LEAF off 108, blkref #0: rel 1663/13593/3455 blk 4 FPW 
  25. rmgr: Heap        len (rec/tot):     42/    42, tx:   13643578, lsn: 7/3F059300, prev 7/3F058A30, descTRUNCATE nrelids 1 relids 24780 
  26. rmgr: Transaction len (rec/tot):    114/   114, tx:   13643578, lsn: 7/3F059330, prev 7/3F059300, descCOMMIT 2021-01-20 23:33:46.831804 CST; rels: base/13593/24884; inval msgs: catcache 50 catcache 49 relcache 24780 
  27. rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 7/3F0593A8, prev 7/3F059330, desc: RUNNING_XACTS nextXid 13643579 latestCompletedXid 13643578 oldestRunningXid 13643579 
  28. rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 7/3F0593E0, prev 7/3F0593A8, desc: RUNNING_XACTS nextXid 13643579 latestCompletedXid 13643578 oldestRunningXid 13643579 
  29. rmgr: XLOG        len (rec/tot):    114/   114, tx:          0, lsn: 

從wal日志的分析中,可以非常明顯的看到,在最后一次checkpoint點后(恢復的起始點),正常來說,數據庫會繼續執行lsn為7/3F054840的步驟開啟事務,并在下一步lsn為7/3F054878的步驟直接對oid為24780(通過oid2name可以知道,這張表就是我們誤操作表)的表進行lock操作,做一系列相關的操作后,進行了truncate,最后進行commit操作。

而這一系列操作,我們則可以認為是truncate一張表的正常操作。

由于我們知道checkpoint點是數據庫的恢復起始點,那么我們是否可以將數據庫恢復到這一點的lsn呢?此時的lsn肯定不會對表進行lock操作,那么我們就可以對該表進行pg_dump操作了。

想法是好的,但是實際操作則沒那么順利。我們可以通過對備庫PostgreSQL的配置文件進行修改,加入參數:

  • recovery_target_lsn= ‘7/3F0547C8’
  • recovery_target_action= ‘pause’

重啟數據庫。

此時卻發現數據庫無法啟動,通過對日志查看,發現原因竟然是:

這個恢復點,是一致性恢復點之前的點,所以無法正常恢復。

此時就出現了令我們奇怪的點,我們知道checkpoint的兩個主要作用是:將臟數據進行刷盤;將wal日志的checkpoint進行記錄。此時,肯定是數據庫一致的點,但是為什么會報不一致呢?

經過一點一點的嘗試,發現能夠恢復的lsn點,只有truncate或者drop的commit操作的前面。那么這樣我們還是無法對誤操作表進行解鎖。

最后,只能通過一種方式,即pg_resetwal的方式,強制指定備庫恢復到我們想要的lsn點:

pg_resetwal -D data1 -x 559 Write-ahead log reset

再進行pg_dump即可。

但是,此時PostgreSQL的主備流復制關系已經被破壞,只能重新搭建或者以其他方式進行恢復(比如pg_rewind)。

四、問題分析

再次返回到進行truncate或drop的恢復步驟中,我們可以發現一個問題,為什么在checkpoint點后、truncate點前,無法將數據庫恢復到一致點呢?為什么會報錯呢?

按照常理來講,checkpoint點就是恢復數據庫的起始點,也是一致點,但是卻無法恢復了。

繼續進行詳細的探究后發現一個現象:

延遲流復制過程中,我們配置了recovery_min_apply_delay參數,對源端數據庫做truncate后,備庫replay的lsn,停留在truncate表后的commit操作。而從主庫的pg_stat_replication的replay_lsn值來看,此時備庫的recover進程,應該就是在執行最后的commit的lsn;

更形象的來說,此時備庫類似于我執行以下命令:

  1. begin
  2.  
  3. truncate table

也就是說,此時我并沒有提交,而備庫也正在等待我進行提交,所以此時誤操作表會被鎖定。

但實際上,truncate table這個動作,已經在我的備庫上進行了replay,只是最后的commit動作沒有進行replay。因此,對于truncate動作之前所有lsn的操作已經是我當前數據庫狀態的一個過去式,無法恢復了,故會報錯。

為了驗證想法,在大佬的幫助下,又對PostgreSQL的源碼進行查看,發現猜想原因確實沒錯:

在/src/backend/access/transam/xlog.c中,對于recovery_min_apply_delay參數有以下的一段描述:

  1. /* 
  2. Is it a COMMIT record? 
  3. * We deliberately choose not to delay aborts since they have no effect on 
  4. * MVCC. We already allow replay of records that don't have a timestamp
  5. * so there is already opportunity for issues caused by early conflicts on 
  6. * standbys. 
  7. */ 

大概意思是,當record中沒有時間戳(timestamp)的時候,數據庫就已經進行了replay。replay只會等待有時間戳的record,而所有的record中,只有commit操作有時間戳,故replay會等待一個commit操作。

不過在實際的生產環境中,我們通常會把recovery_min_apply_delay參數設置的較大,而在這之間,一般都會有一些其他的事務進行操作,當主庫出現誤操作(哪怕說truncate/drop),只要及時發現,我們可以暫停replay的步驟,停在正常的事務操作下,此時誤操作的表的事務還沒有執行,那么這個容災庫還是比較有作用的。

 

責任編輯:武曉燕 來源: 數據和云
相關推薦

2022-09-12 07:59:13

操作系統LVM模式

2022-01-10 07:59:14

PostgreSQl 主從流復制歸檔配置

2023-01-10 10:06:18

數據備份

2017-06-26 08:28:41

PostgreSQL數據庫單機

2017-09-22 10:05:48

Redis備份容災

2020-03-16 12:39:47

容災備份規劃

2013-12-30 16:00:37

華為OceanStor虛擬化容災

2009-01-13 17:38:10

2021-07-14 23:38:02

PostgreSQLOracle模式

2016-05-24 17:48:04

可用區 Sixsho

2010-04-22 17:17:44

Oracle遠程復制

2017-01-12 17:22:34

2023-03-01 07:42:12

HBase編排部署數據

2023-03-19 11:53:27

2020-02-07 15:12:13

容災技術構建平臺

2019-09-06 08:53:32

數據庫高可用容災

2021-11-26 11:10:40

Kubernetes容器存儲命令

2018-09-26 10:20:31

高可用容災指標

2013-11-13 13:53:51

華為云容災集約化容災

2015-12-07 16:00:11

容災備份華為
點贊
收藏

51CTO技術棧公眾號

国产一区二区三区久久久| 日韩精品中文字幕一区二区 | 91国产免费看| 亚洲一卡二卡三卡| 亚洲精品久久久狠狠狠爱| 国产日韩综合| xxx成人少妇69| 久久久久亚洲无码| 久久日本片精品aaaaa国产| 亚洲一区二区三区三| 日韩欧美亚洲在线| 精品人妻一区二区三区含羞草| 国产精品女主播一区二区三区| 日韩在线免费av| jlzzjizz在线播放观看| 亚洲日本免费电影| 色哟哟国产精品免费观看| 久久免费一级片| jzzjzzjzz亚洲成熟少妇| 风间由美一区二区三区在线观看| 日韩**中文字幕毛片| 免费无码毛片一区二区app| 国产精品片aa在线观看| 欧美不卡123| 亚洲视频一二三四| 经典三级一区二区| 五月综合激情婷婷六月色窝| 老司机午夜网站| youjizz在线播放| 97se亚洲国产综合自在线不卡| 成人性生交xxxxx网站| 男人天堂av在线播放| 亚洲国产第一| 久久亚洲国产精品成人av秋霞| 91网站免费入口| 人体久久天天| 亚洲精品久久久久久久久久久久久 | 青青成人在线| 亚洲高清在线观看视频| 国内不卡的二区三区中文字幕| 91极品视频在线| 久久久久久久福利| 欧美日韩一区二区三区四区在线观看| 色av吧综合网| 国产黄色录像片| 欧美电影免费播放| 日韩亚洲精品视频| 国产精品久久久久久成人| 欧美军人男男激情gay| 精品香蕉一区二区三区| 日韩av手机在线播放| 51精品国产| 精品美女在线观看| aaa黄色大片| 国产香蕉精品| 精品处破学生在线二十三| 精品久久久久久无码人妻| eeuss国产一区二区三区四区| 日韩一区二区麻豆国产| 91成人在线观看喷潮蘑菇| 99精品国产高清一区二区麻豆| 日韩一区二区三区在线观看 | 国产精品美女久久久久人| 欧美日本一道本| 欧洲在线免费视频| 日韩精品一区国产| 亚洲精品狠狠操| 欧美丰满美乳xxⅹ高潮www| 国产综合久久久| 日韩在线免费高清视频| 青花影视在线观看免费高清| 亚洲免费二区| 韩日精品中文字幕| 最近免费中文字幕大全免费版视频| 丝袜亚洲精品中文字幕一区| 国产精品你懂得| 国产福利资源在线| 97精品久久久午夜一区二区三区 | 91色视频在线观看| 丰满人妻一区二区三区免费视频| av电影在线观看一区| 欧美一区二区高清在线观看| 国产乱理伦片a级在线观看| 国产精品理论片在线观看| 午夜在线视频免费观看| 草美女在线观看| 日本高清不卡视频| 日本亚洲一区二区三区| 日本在线中文字幕一区| 亚洲最大在线视频| 妺妺窝人体色www聚色窝仙踪| 一本色道久久综合亚洲精品高清| 国产精品色婷婷视频| www香蕉视频| 国产亚洲短视频| 国内自拍中文字幕| 亚洲www免费| 日韩一区二区三区免费观看| 欧美 变态 另类 人妖| 91精品综合久久久久久久久久久| 久久久女人电视剧免费播放下载 | 日韩高清在线观看| 超碰在线观看97| 91在线视频| 午夜在线成人av| 999在线精品视频| 欧美激情在线免费| 欧美激情视频三区| 7777久久亚洲中文字幕| 91玉足脚交白嫩脚丫在线播放| 亚洲一区三区电影在线观看| 国产精品高颜值在线观看| 欧美精品粉嫩高潮一区二区| 偷拍女澡堂一区二区三区| 你懂的一区二区| 欧美精品日韩三级| 亚洲一区二区人妻| 久久九九久久九九| 久久黄色片视频| 欧州一区二区三区| 日韩一区视频在线| 男人天堂av在线播放| 播五月开心婷婷综合| 日本一本草久p| 欧美一级在线| 在线观看精品国产视频| 国产网站在线看| 国产精品亚洲一区二区三区妖精| 亚洲国产精品毛片| 朝桐光一区二区| 日韩经典中文字幕| 亚洲黄色三级视频| 国产 欧美在线| 日韩不卡一二区| 亚洲精品大全| 久久精品国产一区二区三区| 国产精品第六页| 久久久久久电影| www黄色av| 蜜桃视频欧美| 国产极品精品在线观看| 猫咪在线永久网站| 色猫猫国产区一区二在线视频| www.免费av| 久久成人免费| 欧美三日本三级少妇三99| 新版的欧美在线视频| 亚洲精品久久久久国产| 久久久久久久久影院| 91亚洲精品乱码久久久久久蜜桃 | 欧美另类videoxo高潮| 美女尤物国产一区| 亚洲永久激情精品| 成人51免费| 九九久久综合网站| 丰满肉嫩西川结衣av| 精品久久久久久久久国产字幕| 无码精品一区二区三区在线播放| 日韩香蕉视频| 日本日本精品二区免费| av成人免费看| 久久av.com| 黄色av小说在线观看| 精品久久久久久国产91| 中文字幕av久久爽一区| 久久精品久久综合| 久久久久久av无码免费网站下载| 波多野结衣一区二区三区免费视频| 韩日欧美一区二区| a中文在线播放| 日韩一区二区三区在线| 国产精品视频免费播放| 国产欧美精品一区二区色综合| 亚洲欧美视频二区| 欧美特黄一级| 欧洲精品一区色| 99精品视频在线免费播放| 色综合久久久久久中文网| 午夜激情小视频| 欧美日韩中文国产| 久久久香蕉视频| 久久久久免费观看| 亚洲第一成肉网| 国产欧美一区二区色老头 | 国产一区二区三区自拍| 欧美二区三区在线| 国产日韩一区二区三免费高清| 国外成人在线直播| 欧美日韩xx| 亚洲成人激情图| 亚洲最大成人av| 五月天婷婷综合| 中文字幕免费国产精品| 日韩人妻一区二区三区| 国精品**一区二区三区在线蜜桃 | 母乳一区在线观看| 中文字幕人成一区| 日韩欧美影院| 亚洲综合自拍一区| 日韩三区免费| 久久久久久久香蕉网| caoporn国产精品免费视频| 亚洲成人国产精品| 国产人妻精品一区二区三| 欧美色道久久88综合亚洲精品| 九九热最新地址| 国产偷国产偷精品高清尤物| 国内精品免费视频| 精品在线播放免费| 99免费视频观看| 亚洲精选91| 亚洲精品国产suv一区88| 欧美艳星介绍134位艳星| 国产伦精品一区二区三区免费视频| 成人不卡视频| 日韩av免费在线播放| 24小时免费看片在线观看| 久久综合五月天| 日本高清在线观看wwwww色| 亚洲视频axxx| 日韩在线免费看| 亚洲电影av在线| 午夜久久久久久噜噜噜噜| 欧美日韩第一区日日骚| 中文字幕一区二区人妻视频| 婷婷成人综合网| 久久免费精彩视频| 洋洋成人永久网站入口| 一起操在线播放| 国产精品久久久久一区二区三区 | 亚洲人在线观看视频| 精品国产不卡一区二区三区| 国产黄色av网站| 91精品国产色综合久久久蜜香臀| 中文字幕第315页| 欧美亚洲国产一区二区三区va| 三级性生活视频| 中文字幕在线观看播放| 这里只有精品在线播放| 第一页在线观看| 国产亚洲精品一区二区| 国产网站在线播放| 国产亚洲xxx| 国产高清av在线| 在线激情影院一区| 欧美日韩在线看片| 久久精品最新地址| 色yeye免费人成网站在线观看| 久久综合亚洲社区| 国产在线xxx| 97高清免费视频| 成人美女大片| 国产精品久久久久久久av大片| 日韩电影免费观看高清完整版| 欧美在线免费视频| 亚洲成人短视频| 国产精品一区电影| 国产一区二区久久久久| 操人视频欧美| 亚洲宅男一区| 色综合视频二区偷拍在线| 欧美疯狂party性派对| 国产福利片一区二区| 女主播福利一区| 老太脱裤子让老头玩xxxxx| 在线综合视频| 国产成人手机视频| 国产综合久久久久影院| 苍井空张开腿实干12次| 91一区二区三区在线观看| 国产精品成人一区二区三区电影毛片| 国产亚洲欧美日韩在线一区| 国产白丝一区二区三区 | 亚洲精品国产精品久久| 亚洲乱码电影| 国产av天堂无码一区二区三区| 久久综合九色| 三级av免费看| 91亚洲午夜精品久久久久久| 香蕉久久久久久久| 亚洲伊人伊色伊影伊综合网| 91在线视频在线观看| 欧美日韩一区二区欧美激情| www.精品视频| 国产一区二区激情| 手机在线免费av| 国产成人激情小视频| 国色天香久久精品国产一区| 精品视频免费观看| 91成人影院| 激情网站五月天| 国产宾馆实践打屁股91| 国产精品久久久久无码av色戒| 中文字幕在线一区免费| 欧美三级一区二区三区| 欧美另类久久久品| 欧美一区二区视频| 久久99亚洲精品| 欧美国产日韩电影| 精品国产一区二区三区四区精华| 久久精品国产99久久| 亚洲中文字幕无码专区| 精品一区二区影视| 成人在线一级片| 亚洲.国产.中文慕字在线| 一区二区久久精品66国产精品 | 在线一区二区三区做爰视频网站| 99草在线视频| 自拍偷拍免费精品| 中文字幕乱码中文乱码51精品| 91精品国产99久久久久久红楼| 狠狠做深爱婷婷综合一区| 欧日韩免费视频| 激情另类小说区图片区视频区| 偷拍女澡堂一区二区三区| 一区二区视频在线| 国产又大又长又粗| 亚洲最新av在线网站| 日本不卡网站| 国产精品亚洲综合| 欧美/亚洲一区| 成人综合久久网| 亚洲国产激情av| 在线观看 亚洲| 日韩电影中文字幕在线| www.在线视频| 91中文字幕在线| 成人高清电影网站| 欧美伦理片在线看| 久久一夜天堂av一区二区三区| 免费视频网站www| 日韩精品专区在线| 肉体视频在线| yy111111少妇影院日韩夜片 | 久久在线视频在线| 国产一区二区三区亚洲综合| 一区不卡视频| 久久成人免费日本黄色| 久久久久99精品成人| 欧美亚洲精品一区| 色影院视频在线| 成人免费网视频| 欧美在线黄色| 秘密基地免费观看完整版中文| 一区二区免费在线| 风流少妇一区二区三区91| 欧美精品videofree1080p| 亚洲成人五区| 水蜜桃色314在线观看| 成人99免费视频| 99精品在线播放| 国产午夜精品全部视频播放| 亚洲精品粉嫩美女一区| 水蜜桃亚洲一二三四在线| 蜜臂av日日欢夜夜爽一区| 三上悠亚在线观看视频| 欧美一级国产精品| 久草成色在线| 免费中文日韩| 蜜桃久久av一区| 日本一级二级视频| 亚洲高清一区二| 欧美成人a交片免费看| 亚洲国产精品一区二区第一页| 激情深爱一区二区| 精品视频一区二区在线观看| 亚洲第一综合天堂另类专| 日韩免费电影| 一区二区三区四区视频在线| 国产乱码精品一区二区三| 日韩乱码人妻无码中文字幕| 日韩av最新在线观看| 不卡亚洲精品| 欧美日韩dvd| 91啪九色porn原创视频在线观看| 日韩黄色片网站| 久久国产精品电影| 欧美顶级毛片在线播放| 欧美一级裸体视频| 亚洲免费观看在线视频| 天堂v在线观看| 国产精品第七影院| 欧美一区二区三区免费看| 五月开心播播网| 欧美天天综合网| 搞黄网站在线看| 天堂资源在线亚洲视频| 国产成人av网站| 中文在线字幕免费观| 久久久久久九九九| 日韩中文在线电影| 中文字幕一区二区三区乱码不卡| 在线中文字幕一区二区| 欧美高清另类hdvideosexjaⅴ| 欧美日韩综合另类| 国产不卡视频在线观看| 无码人妻精品一区二区三区蜜桃91| 久久国产精品久久久| 国产一卡不卡| 人妻av一区二区|