精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文文字幕文字幕高清| 青青草视频在线视频| 久草热在线观看| 香蕉综合视频| 欧美精品一区二区蜜臀亚洲| 国产二区视频在线播放| 欧美一区二区三区| 波多野洁衣一区| 国产精品久久久久久久久| 波多野结衣爱爱视频| 天海翼精品一区二区三区| 欧美日韩精品电影| 国内自拍在线观看| 97超碰在线公开在线看免费| 久久久精品日韩欧美| 国产精品黄色影片导航在线观看| 校园春色 亚洲| 国产成人精品免费视| 日韩视频123| 91国产精品视频在线观看| 久久青青色综合| 中文字幕欧美一| 欧美亚洲另类在线一区二区三区| 精品国产亚洲AV| 日本美女一区二区| 亚洲18私人小影院| 一区二区三区四区五区| 欧美精品一区二区久久| 亚洲精品成人久久| 精产国品一区二区三区| 狂野欧美性猛交xxxx| 天天影视色香欲综合网老头| 9色视频在线观看| yw视频在线观看| 久久免费的精品国产v∧| 国产精品一区二区免费看| 91麻豆成人精品国产免费网站| 亚洲欧美视频| 午夜精品一区二区三区在线视频 | 99久久er热在这里只有精品15| 国产一区二中文字幕在线看| 91午夜精品亚洲一区二区三区| 精品福利av| 欧美激情一级欧美精品| 欧美久久久久久久久久久久| 天天做天天爱天天综合网| 亚洲视频999| 性少妇bbw张开| 免费成人结看片| 亚洲免费成人av电影| 一级特黄a大片免费| 日韩a级大片| 亚洲精品电影网| 美国黄色a级片| 亚洲区小说区| 亚洲人成在线观看| 蜜乳av中文字幕| 欧美一站二站| 日韩在线播放av| 一区二区三区四区五区| 欧美福利一区| 欧美激情中文网| 久久精品人妻一区二区三区| 伊人精品在线| 欧美在线视频观看| 91青青草视频| 久久97超碰国产精品超碰| 国产在线不卡精品| 99riav国产| 成人免费毛片aaaaa**| 精品久久久久久中文字幕动漫| 亚洲 欧美 精品| 久久精品欧美一区二区三区麻豆| 日韩精品一区二区三区色偷偷| 国产无套粉嫩白浆在线2022年| 中文字幕av一区二区三区| 欧美aaa在线观看| 日本动漫理论片在线观看网站| 亚洲午夜久久久久久久久电影网| 国产精品后入内射日本在线观看| 日韩欧美看国产| 在线播放中文一区| 一级全黄裸体片| 美女网站一区| 日韩一区av在线| 国产精品日日夜夜| 视频一区二区欧美| 亚洲综合色av| 日本视频在线观看一区二区三区| 中文字幕二三区不卡| 桥本有菜av在线| 岛国av在线网站| 欧美日韩国产美| 一级少妇精品久久久久久久| 精品久久电影| 欧美日韩不卡合集视频| 好吊色在线视频| 国产一区二区成人久久免费影院| 国偷自产av一区二区三区小尤奈| av在线播放网| 亚洲香肠在线观看| 宅男噜噜噜66国产免费观看| 免费欧美网站| 国产一区二区三区在线观看视频 | 岛国av在线播放| 欧美美女一区二区三区| 少妇精品一区二区| 一区二区三区在线电影| 日本sm极度另类视频| a在线观看免费| 欧美国产国产综合| 阿v天堂2018| 年轻的保姆91精品| 中文日韩在线观看| aaaaaa毛片| 99免费精品在线| 一本色道久久88亚洲精品综合| 日韩大尺度黄色| 亚洲精品在线一区二区| 久久久久亚洲av片无码| 日本中文字幕不卡| 欧美国产综合视频| www.综合网.com| 日韩三级.com| 伊人久久久久久久久久久久久久| 香蕉精品999视频一区二区| 成人永久免费| 国产原创视频在线观看| 欧美亚洲国产bt| av直播在线观看| 亚洲电影av| 国产高清精品一区| 成人毛片av在线| 欧美日韩免费一区二区三区视频| 人人妻人人藻人人爽欧美一区| 国产精品99一区二区| 成人黄色短视频在线观看| 国产黄色免费在线观看| 色婷婷亚洲综合| 噜噜噜在线视频| 亚洲美女一区| 狠狠色噜噜狠狠色综合久| 欧美卡一卡二| 精品日韩99亚洲| 久久国产免费观看| 高清国产一区二区| 成人av在线播放观看| 日韩欧美中文字幕在线视频 | 免费在线观看一区二区| 精精国产xxxx视频在线播放| 亚洲精品电影在线| 日韩特级黄色片| 91网页版在线| 无码人妻丰满熟妇区毛片| 九九亚洲视频| 国产精品青青在线观看爽香蕉| 国产在线三区| 欧美美女激情18p| 91麻豆精品成人一区二区| 久久se精品一区二区| 中文字幕成人一区| 亚洲欧美日本国产| 久久久久久免费精品| 午夜成人免费影院| 色哟哟亚洲精品| 亚洲图片第一页| 蓝色福利精品导航| 蜜臀在线免费观看| 澳门成人av| 7m精品福利视频导航| 男女av在线| 欧美日韩免费一区二区三区视频| 欧美a级片免费看| 国产精品1区二区.| 久在线观看视频| 精品日韩免费| 91精品天堂| 国产夫妻在线| 视频在线一区二区| 好吊色在线观看| 色av一区二区| 午夜激情福利网| 91在线视频官网| 潘金莲激情呻吟欲求不满视频| 欧美成人一品| 日本不卡二区高清三区| 成人51免费| 2021国产精品视频| 日韩毛片久久久| 亚洲国产私拍精品国模在线观看| 99re热视频| 亚洲国产美国国产综合一区二区| 国产精品1000部啪视频| 激情久久五月天| 哪个网站能看毛片| 欧美在线亚洲| 日韩欧美手机在线| 国产精品黄网站| 国产精品爽爽爽| 久草免费在线视频| 久久这里只有精品99| 黄色片在线看| 欧美不卡激情三级在线观看| 69视频免费看| 欧美日韩另类视频| 黄视频网站免费看| 国产精品网站导航| 精品中文字幕在线播放| 国产黑丝在线一区二区三区| 50路60路老熟妇啪啪| 欧美破处大片在线视频| 婷婷久久青草热一区二区 | 国产精品亚洲一区二区三区妖精| 丝袜老师办公室里做好紧好爽 | 九九精品在线播放| jzzjzzjzz亚洲成熟少妇| 亚洲大胆人体视频| 精品国产av 无码一区二区三区| 色偷偷成人一区二区三区91| 久久机热这里只有精品| 亚洲欧美在线视频观看| 日本性高潮视频| 26uuu亚洲综合色| 亚洲天堂av网站| 国产91综合网| 免费观看黄网站| 精品一二三四在线| 黄色手机在线视频| 久久久久欧美精品| 国产精品后入内射日本在线观看| 欧美体内she精视频在线观看| 日本一级淫片演员| 国产电影一区二区在线观看| 少妇特黄a一区二区三区| 国产精品亚洲片在线播放| 精品一区二区三区自拍图片区| 99re热精品视频| 成人免费视频视频在| 蜜桃精品视频| 91精品久久久久久蜜桃| 2020最新国产精品| 国产精品香蕉视屏| 在线精品视频一区| 国产高清精品一区二区| 大奶在线精品| 精品欧美一区二区在线观看视频| 国产精品美女在线观看直播| 国产精品视频入口| 国产伦精品一区二区三区在线播放| 岛国视频一区| 精品素人av| 蜜桃999成人看片在线观看| 亚洲+变态+欧美+另类+精品| 欧美久久在线| 精品视频日韩| 一区在线电影| 欧美日韩亚洲一区三区| 国产a级片网站| 久久精品盗摄| www.夜夜爽| 精品写真视频在线观看| 最好看的中文字幕| 成人av网站在线观看免费| 一本色道综合久久欧美日韩精品 | 欧美精品久久久久性色| 亚洲国产精品天堂| 国产婷婷色一区二区在线观看 | www.色欧美| 国产精品538一区二区在线| 国产a级黄色片| 久久久久久久久久久电影| 成人18视频免费69| 亚洲国产日韩在线一区模特| 国产尤物在线视频| 91成人免费在线视频| 久操视频在线免费观看| 欧美一区二区不卡视频| 性感美女视频一二三| 中文字幕精品一区久久久久| 男女啪啪在线观看| 欧美精品第一页在线播放| 亚洲性受xxx喷奶水| 97香蕉超级碰碰久久免费软件 | 97精品电影院| 91极品视觉盛宴| 99中文字幕| 欧美性生交大片| 国产高潮在线| 久久av资源网| 欧美r级电影在线观看| 亚洲综合视频一区| 亚洲男人天堂网址| 欧美xxav| 亚洲欧洲日韩国产| 99久热在线精品视频| 91国内精品视频| 天天影视网天天综合色在线播放| 波多野结衣电车痴汉| 日韩一卡二卡三卡| 国产精品久久久久一区二区国产| 色综合老司机第九色激情| **欧美日韩在线观看| 成人影片在线播放| 国产高清一区| 日日摸天天爽天天爽视频| 国产激情视频一区二区三区欧美| 尤物网站在线观看| 国产精品的网站| 中文字幕高清在线免费播放| 日韩欧美123| 国产一级在线观看| 88国产精品欧美一区二区三区| 成人黄色毛片| 免费日韩av电影| 99精品视频免费观看| 1314成人网| 久久综合九色综合97婷婷| 日本一卡二卡在线播放| 亚洲va韩国va欧美va精品| 国产免费不卡av| 在线观看久久av| 在线免费看h| 国产精品v欧美精品v日韩精品| 久久麻豆精品| 欧美精品aaaa| av电影在线观看完整版一区二区| 欧美在线视频第一页| 欧美色综合天天久久综合精品| 午夜18视频在线观看| 午夜精品久久久久久久99热 | 国内激情久久| 99精品视频国产| 1区2区3区欧美| 91亚洲欧美激情| www.亚洲天堂| 高清国产一区二区三区四区五区| 色一情一区二区三区四区 | 亚洲国产精品一区二区尤物区| 国产一区二区三区视频免费观看| 中文字幕国产亚洲2019| 日韩和的一区二在线| 日本一区二区三区四区高清视频 | 国产在线高潮| 亚洲aa在线观看| 欧美日本不卡高清| 日韩成人av影院| 午夜欧美大尺度福利影院在线看| 黄色av小说在线观看| 欧美精品久久久久久久久| 亚洲一区电影| 国产日韩av网站| 99精品一区二区三区| 精品国产xxx| 在线播放日韩欧美| 粉嫩一区二区| 亚洲国产成人不卡| 精东粉嫩av免费一区二区三区| 一级性生活免费视频| 538在线一区二区精品国产| 国产淫片在线观看| 国产免费高清一区| 欧美一级播放| 亚洲一级理论片| 欧美一区二区三区在线| 高清电影在线观看免费| 久久久国产精品一区二区三区| 老司机亚洲精品| caoporn91| 亚洲国产精品嫩草影院久久| 黑人巨大精品| 中文字幕av久久| 成人小视频在线观看| 在线永久看片免费的视频| 中文字幕视频一区二区在线有码 | 精品欧美一区二区三区精品久久 | 成人国产精品av| 欧美日韩一二| 人妻巨大乳一二三区| 天天影视色香欲综合网老头| 成年午夜在线| 国产精品久久久久久久久久直播| 亚洲自啪免费| 国产精品一区二区入口九绯色| 欧美日本高清视频在线观看| 午夜伦理大片视频在线观看| 国产在线欧美日韩| 麻豆精品新av中文字幕| 国产精品99无码一区二区| 日韩精品在线观看网站| 日韩av黄色| 久久久99精品视频| 亚洲国产岛国毛片在线| 亚洲精品国产精品国| 国产成人av在线| 欧美婷婷在线| 一级在线观看视频| 亚洲第一中文字幕| 亚洲精品aa| 日本黄色三级大片| 中文字幕一区二区三区四区|