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

詳解 Redis 遷移工具 redis-shark4.0.3

原創 精選
數據庫 Redis
RedisShake 是一個用于處理和遷移 Redis 數據的工具,它提供以下特性:Redis 兼容性;云服務兼容性;Module 兼容;多種導出模式;數據處理。

作者 | 吳守陽

審校 | 重樓

簡介

RedisShake 是一個用于處理和遷移 Redis 數據的工具,它提供以下特性:

  • Redis 兼容性:RedisShake 兼容從 2.8 到 7.2 的 Redis 版本,并支持各種部署方式,包括單機、主從、哨兵和集群。
  • 云服務兼容性:RedisShake 與主流云服務提供商提供的流行 Redis-like 數據庫無縫工作,包括但不限于:

     阿里云-云數據庫 Redis 版
     阿里云-云原生內存數據庫Tair
     AWS - ElastiCache
     AWS - MemoryDB

  • Module 兼容:RedisShake 與 TairString,TairZSet 和 TairHash 模塊兼容。
  • 多種導出模式:RedisShake 支持 PSync,RDB 和 Scan 導出模式。
  • 數據處理:RedisShake 通過自定義腳本實現數據過濾和轉換。

遷移模式介紹

目前, RedisShake 有三種遷移模式:PSync、RDB 和 SCAN,分別對應 sync_reader、rdb_reader 和 scan_reader。

  • 對于從備份中恢復數據的場景,可以使用 rdb_reader。
  • 對于數據遷移場景,優先選擇 sync_reader。一些云廠商沒有提供 PSync 協議支持,可以選擇scan_reader。
  • 對于長期的數據同步場景,RedisShake 目前沒有能力承接,因為 PSync 協議并不可靠,當復制連接斷開時,RedisShake 將無法重新連接至源端數據庫。如果對于可用性要求不高,可以使用 scan_reader。如果寫入量不大,且不存在大 key,也可以考慮 scan_reader。不同模式各有優缺點,需要查看各 Reader 章節了解更多信息。

Redis Cluster 架構

當源端 Redis 以 cluster 架構部署時,可以使用 sync_reader 或者 scan_reader。兩者配置項中均有開關支持開啟 cluster 模式,會通過 cluster nodes 命令自動獲取集群中的所有節點,并建立連接。

Redis Sentinel 架構

當源端 Redis 以 sentinel 架構部署且 RedisShake 使用 sync_reader 連接主庫時,會被主庫當做 slave,從而有可能被 sentinel 選舉為新的 master。

為了避免這種情況,應選擇備庫作為源端。

云 Redis 服務

主流云廠商都提供了 Redis 服務,不過有幾個原因導致在這些服務上使用 RedisShake 較為復雜:

  • 引擎限制。存在一些自研的 Redis-like 數據庫沒有兼容 PSync 協議。
  • 架構限制。較多云廠商支持代理模式,即在用戶與 Redis 服務之間增加 Proxy 組件。因為 Proxy 組件的存在,所以 PSync 協議無法支持。
  • 安全限制。在原生 Redis 中 PSync 協議基本會觸發 fork(2),會導致內存膨脹與用戶請求延遲增加,較壞情況下甚至會發生 out of memory。盡管這些都有方案緩解,但并不是所有云廠商都有這方面的投入。
  • 商業策略。較多用戶使用 RedisShake 是為了下云或者換云,所以部分云廠商并不希望用戶使用 RedisShake,從而屏蔽了 PSync 協議。

下文會結合實踐經驗,介紹一些特殊場景下的 RedisShake 使用方案。

阿里云「云數據庫 Redis」與「云原生內存數據庫Tair」

「云數據庫 Redis」與「云原生內存數據庫Tair」都支持 PSync 協議,推薦使用 sync_reader。用戶需要創建一個具有復制權限的賬號(可以執行 PSync 命令),RedisShake 使用該賬號進行數據同步,具體創建步驟見 創建與管理賬號。

例外情況:

  1. 2.8 版本的 Redis 實例不支持創建復制權限的賬號,需要 升級大版本。
  2. 集群架構的 Reids 與 Tair 實例在 代理模式 下不支持 PSync 協議。
  3. 讀寫分離架構不支持 PSync 協議。

在不支持 PSync 協議的場景下,可以使用 scan_reader。需要注意的是,scan_reader 會對源庫造成較大的壓力。

AWS ElastiCache and MemoryDB

優選 sync_reader, AWS ElastiCache and MemoryDB 默認情況下沒有開啟 PSync 協議,但是可以通過提交工單的方式請求開啟 PSync 協議。AWS 會在工單中給出一份重命名的 PSync 命令,比如 xhma21yfkssync 和 nmfu2bl5osync。此命令效果等同于 psync 命令,只是名字不一樣。 用戶修改 RedisShake 配置文件中的 aws_psync 配置項即可。對于單實例只寫一對 ip:port@cmd 即可,對于集群實例,需要寫上所有的 ip:port@cmd,以逗號分隔。

不方便提交工單時,可以使用 scan_reader。需要注意的是,scan_reader 會對源庫造成較大的壓力。

安裝

Wget https://github.com/tair-opensource/RedisShake/archive/refs/tags/v4.0.5.tar.gz
yum install go 
tar -xvf redis-shake-linux-amd64.tar.gz 
cd redis-shark 
[root@ redis-shark]# ls 
1shake_online.toml 2shake_rdb.toml data redis-shake shake.toml.bak

遷移配置

在線遷移SYNC模式

[root@idc-zabbix12 redis-shark]# vim 1shake_online.toml

function = ""

[sync_reader]
version = "7.0" ###source集群版本
cluster = true ###集群
address = "10.0.0.8:9101" ###source只需填寫一個主節點地址即可
username = ""
password = "Bj***w"
tls = false
sync_rdb = true 
sync_aof = true
prefer_replica = true

# [scan_reader]
# cluster = false # set to true if source is a redis cluster
# address = "127.0.0.1:6379" # when cluster is true, set address to one of the cluster node
# username = "" # keep empty if not using ACL
# password = "" # keep empty if no authentication is required
# ksn = false # set to true to enabled Redis keyspace notifications (KSN) subscription
# tls = false
# dbs = [] # set you want to scan dbs such as [1,5,7], if you don't want to scan all
# prefer_replica = true # set to true if you want to sync from replica node

##文件依次執行
[rdb_reader]
#filepath = "/opt/bakredis-shake.bak/local_dump.0"
#filepath = "/opt/bakredis-shake.bak/local_dump.1"
#filepath = "/opt/bakredis-shake.bak/local_dump.2"

# [aof_reader]
# filepath = "/tmp/.aof"
# timestamp = 0 # subsecond

[redis_writer]
version = "7.0" ###目標集群版本
cluster = true ###集群
address = "10.28.29.51:9101" ###target集群只需填寫一個主節點地址即可
username = ""
password = "B***Zw"
tls = false
off_reply = false

[advanced]
dir = "data" ###生成的數據目錄
ncpu = 4 # runtime.GOMAXPROCS, 0 means use runtime.NumCPU() cpu cores
pprof_port = 0 # pprof port, 0 means disable
status_port = 0 # status port, 0 means disable

# log
log_file = "shake.log" ###日志文件
log_level = "info" # debug, info or warn
log_interval = 5 # in seconds

rdb_restore_command_behavior = "panic" # panic, rewrite or skip
pipeline_count_limit = 1024
target_redis_client_max_querybuf_len = 1024_000_000
target_redis_proto_max_bulk_len = 512_000_000
aws_psync = "" # example: aws_psync = "10.0.0.1:6379@nmfu2sl5osync,10.0.0.1:6379@xhma21xfkssync"
empty_db_before_sync = false

[module]
target_mbbloom_version = 20603

執行:

[root@idc-zabbix12 redis-shark]# ./redis-shake 1shake_online.toml

RDB文件導入模式

[root@idc-zabbix12 redis-shark]# cat 2shake_rdb.toml 
function = ""
#[sync_reader]
#version = "7.0"
#cluster = true
#address = "10.28.29.8:9101"
#username = ""
#password = "Bjmr0cakP7Zw"
#tls = false
#sync_rdb = true 
#sync_aof = true
#prefer_replica = true

# [scan_reader]
# cluster = false # set to true if source is a redis cluster
# address = "127.0.0.1:6379" # when cluster is true, set address to one of the cluster node
# username = "" # keep empty if not using ACL
# password = "" # keep empty if no authentication is required
# ksn = false # set to true to enabled Redis keyspace notifications (KSN) subscription
# tls = false
# dbs = [] # set you want to scan dbs such as [1,5,7], if you don't want to scan all
# prefer_replica = true # set to true if you want to sync from replica node

##文件依次執行 0、1、2 
[rdb_reader]
filepath = "/opt/bakredis-shake.bak/local_dump.0" ###rdb文件,source集群是3分片集群
#filepath = "/opt/bakredis-shake.bak/local_dump.1"
#filepath = "/opt/bakredis-shake.bak/local_dump.2"

# [aof_reader]
# filepath = "/tmp/.aof"
# timestamp = 0 # subsecond

[redis_writer]
version = "7.0" 
cluster = true
address = "10.0.0.51:9101" ####目標導入集群
username = ""
password = "Bj***Zw"
tls = false
off_reply = false

[advanced]
dir = "data"
ncpu = 4 # runtime.GOMAXPROCS, 0 means use runtime.NumCPU() cpu cores
pprof_port = 0 # pprof port, 0 means disable
status_port = 0 # status port, 0 means disable

# log
log_file = "shake.log"
log_level = "info" # debug, info or warn
log_interval = 5 # in seconds

rdb_restore_command_behavior = "panic" # panic, rewrite or skip
pipeline_count_limit = 1024
target_redis_client_max_querybuf_len = 1024_000_000
target_redis_proto_max_bulk_len = 512_000_000
aws_psync = "" # example: aws_psync = "10.0.0.1:6379@nmfu2sl5osync,10.0.0.1:6379@xhma21xfkssync"
empty_db_before_sync = false

[module]
target_mbbloom_version = 20603

執行:

恢復/opt/bakredis-shake.bak/local_dump.0文件

[root@idc-zabbix12 redis-shark]# ./redis-shake 2shake_rdb.toml

恢復/opt/bakredis-shake.bak/local_dump.1文件

[root@idc-zabbix12 redis-shark]# ./redis-shake 2shake_rdb.toml

恢復/opt/bakredis-shake.bak/local_dump.2文件

[root@idc-zabbix12 redis-shark]# ./redis-shake 2shake_rdb.toml

scan_reader

scan_reader 通過 SCAN 命令遍歷源端數據庫中的所有 Key,并使用 DUMP 與 RESTORE 命令來讀取與寫入 Key 的內容。

注意:

Redis 的 SCAN 命令只保證 SCAN 的開始與結束之前均存在的 Key 一定會被返回,但是新寫入的 Key 有可能會被遺漏,期間刪除的 Key 也可能已經被寫入目的端。這可以通過 ksn 配置解決。

SCAN 命令與 DUMP 命令會占用源端數據庫較多的 CPU 資源。

[scan_reader]
cluster = false # set to true if source is a redis cluster
address = "127.0.0.1:6379" # when cluster is true, set address to one of the cluster node
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
tls = false
ksn = false # set to true to enabled Redis keyspace notifications (KSN) subscription
dbs = [] # set you want to scan dbs, if you don't want to scan all

其中:

cluster:源端是否為集群。

address:源端地址,當源端為集群時,address 為集群中的任意一個節點即可。

鑒權:

當源端使用 ACL 賬號時,配置 username 和 password。

當源端使用傳統賬號時,僅配置 password。

當源端無鑒權時,不配置 username 和 password。

tls:源端是否開啟 TLS/SSL,不需要配置證書。因為 RedisShake 沒有校驗服務器證書。

ksn:開啟 ksn 參數后, RedisShake 會在 SCAN 之前使用 Redis keyspace notifications 能力來訂閱 Key 的變化。當 Key 發生變化時,RedisShake 會使用 DUMP 與 RESTORE 命令來從源端讀取 Key 的內容,并寫入目標端。

dbs:源端為非集群模式時,支持指定DB庫。

WARNING

Redis keyspace notifications 不會感知到 FLUSHALL 與 FLUSHDB 命令,因此在使用 ksn 參數時,需要確保源端數據庫不會執行這兩個命令。

function模式

RedisShake 通過提供 function 功能,實現了的 ETL(提取-轉換-加載) 中的 transform 能力。通過利用 function 可以實現類似功能:

  • 更改數據所屬的 db,比如將源端的 db 0 寫入到目的端的 db 1。
  • 對數據進行篩選,例如,只將 key 以 user: 開頭的源數據寫入到目標端。
  • 改變 Key 的前綴,例如,將源端的 key prefix_old_key 寫入到目標端的 key prefix_new_key。

...

要使用 function 功能,只需編寫一份 lua 腳本。RedisShake 在從源端獲取數據后,會將數據轉換為 Redis 命令。然后,它會處理這些命令,從中解析出 KEYS、ARGV、SLOTS、GROUP 等信息,并將這些信息傳遞給 lua 腳本。lua 腳本會處理這些數據,并返回處理后的命令。最后,RedisShake 會將處理后的數據寫入到目標端。

以下是一個具體的例子:

function = """
shake.log(DB)
if DB == 0
then
 return
end
shake.call(DB, ARGV)
"""

[sync_reader]
address = "127.0.0.1:6379"

[redis_writer]
address = "127.0.0.1:6380"

DB 是 RedisShake 提供的信息,表示當前數據所屬的 db。shake.log 用于打印日志,shake.call 用于調用 Redis 命令。上述腳本的目的是丟棄源端 db 0 的數據,將其他 db 的數據寫入到目標端。

除了 DB,還有其他信息如 KEYS、ARGV、SLOTS、GROUP 等,可供調用的函數有 shake.log 和 shake.call,具體請參考 function API。

function API

變量

因為有些命令中含有多個 key,比如 mset 等命令。所以,KEYS、KEY_INDEXES、SLOTS 這三個變量都是數組類型。如果確認命令只有一個 key,可以直接使用 KEYS[1]、KEY_INDEXES[1]、SLOTS[1]。

函數

  • shake.call(DB, ARGV):返回一個 Redis 命令,RedisShake 會將該命令寫入目標端。
  • shake.log(msg):打印日志。

最佳實踐

過濾 Key

local prefix = "user:"
local prefix_len = #prefix

if string.sub(KEYS[1], 1, prefix_len) ~= prefix then
 return
end

shake.call(DB, ARGV)

效果是只將 key 以 user: 開頭的源數據寫入到目標端。沒有考慮 mset 等多 key 命令的情況。

過濾 DB

shake.log(DB)
if DB == 0
then
 return
end
shake.call(DB, ARGV)

效果是丟棄源端 db 0 的數據,將其他 db 的數據寫入到目標端。

過濾某類數據結構

可以通過 GROUP 變量來判斷數據結構類型,支持的數據結構類型有:STRING、LIST、SET、ZSET、HASH、SCRIPTING 等。

過濾 Hash 類型數據

if GROUP == "HASH" then
 return
end
shake.call(DB, ARGV)

效果是丟棄源端的 hash 類型數據,將其他數據寫入到目標端。

過濾 LUA 腳本

if GROUP == "SCRIPTING" then
 return
end
shake.call(DB, ARGV)

效果是丟棄源端的 lua 腳本,將其他數據寫入到目標端。常見于主從同步至集群時,存在集群不支持的 LUA 腳本。

修改 Key 的前綴

local prefix_old = "prefix_old_"
local prefix_new = "prefix_new_"

shake.log("old=" .. table.concat(ARGV, " "))

for i, index in ipairs(KEY_INDEXES) do
 local key = ARGV[index]
 if string.sub(key, 1, #prefix_old) == prefix_old then
 ARGV[index] = prefix_new .. string.sub(key, #prefix_old + 1)
 end
end

shake.log("new=" .. table.concat(ARGV, " "))
shake.call(DB, ARGV)

效果是將源端的 key prefix_old_key 寫入到目標端的 key prefix_new_key。

交換 DB

local db1 = 1
local db2 = 2

if DB == db1 then
 DB = db2
elseif DB == db2 then
 DB = db1
end
shake.call(DB, ARGV)

效果是將源端的 db 1 寫入到目標端的 db 2,將源端的 db 2 寫入到目標端的 db 1, 其他 db 不變。

注意事項

  1. 不要在同一個目錄運行兩個 RedisShake 進程,因為運行時產生的臨時文件可能會被覆蓋,導致異常行為。
  2. 不要降低 Redis 版本,比如從 6.0 降到 5.0,因為 RedisShake 每個大版本都會引入一些新的命令和新的編碼方式,如果降低版本,可能會導致不兼容。

作者簡介

吳守陽,51CTO社區編輯,擁有8年DBA工作經驗,熟練管理MySQL、Redis、MongoDB等開源數據庫。精通性能優化、備份恢復和高可用性架構設計。善于故障排除和自動化運維,保障系統穩定可靠。具備良好的團隊合作和溝通能力,致力于為企業提供高效可靠的數據庫解決方案。

責任編輯:華軒 來源: 51CTO
相關推薦

2024-11-04 15:49:43

Redis?數據遷移

2022-02-06 21:14:57

Redis命令

2025-02-24 10:07:09

Redis節點遷移集群

2024-09-11 20:05:56

2024-07-16 08:38:06

2018-08-15 09:48:27

數據庫Redis應用場景

2023-07-03 07:55:25

2017-10-17 14:05:52

網站Redis 2Redis 3

2011-12-29 09:36:40

JavaJailer

2024-07-31 08:33:17

2020-09-30 07:41:28

Redis工具 Redis-full

2025-04-25 11:00:00

mini-redisRedisINCR指令

2013-01-06 09:43:35

MySQLMySQL遷移Redis

2019-08-06 19:36:25

RedisMemcached緩存

2024-12-09 00:00:09

2024-04-18 00:20:56

Redis策略數據

2024-10-08 10:13:17

2018-04-27 09:03:57

Redis數據存儲

2013-03-20 10:19:17

RedisRedis-senti監控

2021-01-26 07:11:26

Redis數據同步數據遷移
點贊
收藏

51CTO技術棧公眾號

亚洲精品国产欧美| 一级特黄大欧美久久久| 成人福利网站在线观看11| 久久中文免费视频| 欧美日韩一区二区三区在线电影 | www.成人影院| 国产精品视频一区二区三区不卡| 99高清视频有精品视频| 黄色一级片免费在线观看| 久久视频在线| 精品国产一区二区三区四区四 | 精品一区二区三区在线播放视频 | 国产特黄大片aaaa毛片| 日韩1区2区| 亚洲国产精品成人一区二区| 一级在线免费视频| 2021天堂中文幕一二区在线观| 国产欧美日韩精品a在线观看| 99国产在线| 一级黄色片视频| 一本一本久久| 欧美激情一区二区三区成人| 欧美一区二区三区粗大| 精品伊人久久久| 欧美一区二区三区在线| 日韩中文字幕组| caoprom在线| 亚洲人一二三区| 亚洲精品国产一区| 欧美白人做受xxxx视频| 成人一道本在线| 91九色视频导航| 国产成人av免费| 野花国产精品入口| 欧美国产视频日韩| 一区二区视频免费看| 四虎成人精品永久免费av九九| 日韩高清a**址| 妖精视频一区二区| 视频二区欧美毛片免费观看| 欧美老女人第四色| 一道本视频在线观看| 日韩pacopacomama| 欧美性xxxx极品hd满灌| 免费看黄在线看| av免费在线网站| 中文字幕一区二区三区av| 日韩精品福利视频| 日本人妖在线| 91在线观看视频| 好吊妞www.84com只有这里才有精品| 国产女无套免费视频| 卡一卡二国产精品| 国产在线视频不卡| 91一区二区视频| 毛片av一区二区| 成人精品一区二区三区电影免费 | 婷婷电影在线观看| 动漫精品一区二区| 欧美在线观看成人| 成年美女黄网站色大片不卡| 欧美日韩一区二区在线| 成年网站在线免费观看| 英国三级经典在线观看| 色婷婷综合久久久久中文一区二区| 精品一区二区中文字幕| 成人激情综合| 欧美挠脚心视频网站| 黄色一级片免费的| 欧美日韩午夜电影网| 日韩免费观看高清完整版在线观看| 亚洲综合20p| 色婷婷成人网| 精品欧美乱码久久久久久1区2区| 超碰人人cao| 欧美成人基地| 国产一区二区三区在线看 | 国产精品草莓在线免费观看| 中文字幕一区二区三区免费看| 久久99精品视频| 国产精品久久久久久久久久久久午夜片 | 久热成人在线视频| 99久久精品免费看国产四区| 外国精品视频在线观看 | 欧美亚洲黄色片| 免费h在线看| 欧美三区在线观看| av在线天堂网| 九九综合久久| 欧美成在线视频| 国产91精品一区| 久久99久久久久| 久久人人九九| av毛片在线免费看| 色综合久久久久久久久久久| 欧洲在线免费视频| 六月丁香久久丫| 色狠狠久久aa北条麻妃| 久久无码精品丰满人妻| 久久久久国内| 国产成人av一区二区三区| 国内精品一区视频| 亚洲愉拍自拍另类高清精品| 色婷婷狠狠18| 无码日韩精品一区二区免费| 免费97视频在线精品国自产拍| 老熟妇仑乱一区二区av| 国产成都精品91一区二区三| 日韩在线三级| 51精品在线| 正在播放一区二区| 99久久精品免费视频| 影音先锋亚洲电影| 91情侣偷在线精品国产| 九色视频在线观看免费播放| 亚洲国产视频在线| 蜜臀一区二区三区精品免费视频| 午夜精品福利影院| 欧美国产第一页| 97免费观看视频| 国产偷国产偷亚洲高清人白洁 | 日本午夜精品电影| av在线小说| 欧美一区二区三区视频在线观看| 国产jk精品白丝av在线观看| 在线亚洲观看| 国产欧美日韩综合一区在线观看| caopeng在线| 欧美日韩不卡视频| 91精品在线观| 欧美成人中文字幕| 国产精品久久久久久久久久久久久久 | 欧美美女在线观看| 97在线免费观看| 国产精品乱码一区二区| 国产女人18毛片水真多成人如厕 | ririsao久久精品一区| 欧美日韩精品久久久| 夜夜春很很躁夜夜躁| 国产精品久久久久久久免费软件| 国产精品国产一区二区 | 亚洲午夜久久久久久久久电影网| 欧美特黄aaa| 国产精品99一区二区三区| 国产精品无av码在线观看| 国产精品一二三区视频| 色88888久久久久久影院野外| 日韩av一二区| 蜜桃av综合| 欧美一区二区视频17c| 免费观看亚洲| 亚洲三级av在线| a片在线免费观看| 国产精品系列在线| 中文字幕视频三区| 欧美va天堂在线| 国产在线精品一区二区三区| 男人久久天堂| 亚洲天堂男人天堂| 中文字幕日本人妻久久久免费| 国产精品日日摸夜夜摸av| 亚洲欧美aaa| 午夜国产欧美理论在线播放| 懂色一区二区三区av片| 毛片在线网站| 中文字幕一区日韩电影| 国产一区二区波多野结衣| 亚洲精品成人在线| 中文字幕a在线观看| 亚洲综合欧美| 亚洲三区在线观看| 秋霞一区二区| 欧美中文字幕在线观看| yw视频在线观看| 6080午夜不卡| 成人免费看片98欧美| 久久精品夜色噜噜亚洲a∨| 三级视频中文字幕| 欧美日韩中文| 欧美日韩一区二区视频在线观看| 麻豆久久久久| 欧美激情综合色综合啪啪五月| 天天干天天干天天干| 在线观看亚洲a| 九九热这里有精品视频| 久久婷婷综合激情| 伊人成人222| 亚洲一区区二区| 中文字幕一区二区三区最新 | 在线免费观看一区二区三区| 视频二区欧美| 国产精品久久久久久久av电影 | 国产精品日韩欧美| 成人在线免费观看黄色| 国产亚洲欧美aaaa| 人妻精品一区二区三区| 欧美性色欧美a在线播放| 毛片aaaaa| 欧美极品另类videosde| 秘密基地免费观看完整版中文 | 欧美大波大乳巨大乳| 国产激情视频一区二区三区欧美| 欧美 日韩精品| 中文字幕日韩欧美精品高清在线| 久久伊人资源站| 久久国产精品美女| 国产精品va在线播放| a级片免费在线观看| www.欧美三级电影.com| 天堂a中文在线| 日韩一级视频免费观看在线| 波多野结衣在线电影| 亚洲6080在线| 破处女黄色一级片| 国产精品视频一二| 久操视频免费看| 成人自拍视频在线| 免费国偷自产拍精品视频| 青娱乐精品在线视频| 精品国产免费av| 亚洲国产精品一区制服丝袜| 日本特级黄色大片| 精品香蕉视频| 免费成人深夜夜行视频| 久久九九热re6这里有精品| 亚洲综合最新在线| 亚洲综合资源| 国产噜噜噜噜噜久久久久久久久| 久久电影tv| 欧美性资源免费| 久草在线资源站手机版| 久久久女人电视剧免费播放下载| 91xxx在线观看| 夜夜躁日日躁狠狠久久88av| 你懂的视频在线| 精品一区二区三区四区在线| 天天综合在线视频| 亚洲国产精品网站| 欧美一区二区黄片| 亚洲福利在线播放| 黄色av免费观看| 亚洲第一福利网站| 韩国av永久免费| 亚洲激情第一页| 成人午夜福利视频| 欧美精品一区二区不卡| 人妻精品一区一区三区蜜桃91| 精品国免费一区二区三区| 成人精品在线播放| 亚洲精品久久久久久久久久久久久| 成人午夜视频一区二区播放| 精品嫩草影院久久| 婷婷五月综合激情| 国产视频精品在线| 国产永久免费高清在线观看| 一区二区三区四区精品| 在线免费看黄| 欧美xxxx做受欧美| 丁香影院在线| 欧美中文字幕第一页| 成人福利片在线| 国产精品视频一区二区三区四 | 久久久久久福利| 亚洲va欧美va人人爽| 男人日女人网站| 在线观看亚洲专区| 国产黄色av片| 亚洲精品国精品久久99热一| 国产原创av在线| 久久精品视频一| 丁香花视频在线观看| 日本韩国在线不卡| 日韩亚洲国产免费| http;//www.99re视频| 欧美大胆视频| 伊人久久大香线蕉午夜av| 欧美日韩国产高清| 青青视频在线播放| 国产一区91精品张津瑜| 中文字幕在线永久| 国产精品美女久久久久久| 九九热精品在线观看| 色狠狠色噜噜噜综合网| 国产三区在线播放| 亚洲美女又黄又爽在线观看| 欧美一区二区三区| 97超级碰碰碰| www.欧美视频| 欧美一区少妇| 欧美日韩亚洲一区在线观看| 97在线免费公开视频| 国内一区二区视频| 蜜桃传媒一区二区亚洲av| 最近中文字幕一区二区三区| 国产三级av片| 日韩一区二区在线观看| 国产区高清在线| 国产综合在线看| 成人豆花视频| 日韩高清dvd| 影音国产精品| 亚洲男人天堂2021| 国产日产欧美一区二区视频| 18精品爽视频在线观看| 欧美日韩不卡一区二区| 邻家有女韩剧在线观看国语| 色综合男人天堂| 欧美成人家庭影院| 欧美另类高清视频在线| 好看不卡的中文字幕| 欧美成人三级在线播放| 久久日韩精品一区二区五区| 久久精品第一页| 欧美肥妇毛茸茸| 999国产在线视频| 青草青草久热精品视频在线观看| 视频国产精品| 中国黄色录像片| 久草热8精品视频在线观看| 97人妻精品一区二区免费| 午夜视频一区在线观看| 亚洲乱色熟女一区二区三区| 久久九九免费视频| 精品九九久久| 亚洲国产精品www| 久久精品日产第一区二区| 最近中文字幕无免费| 亚洲影院久久精品| 亚洲av无码国产精品久久不卡| 日韩有码在线播放| 精品久久99| 一本色道久久综合亚洲二区三区| 人人狠狠综合久久亚洲| 欧洲av一区二区三区| 色网站国产精品| 黄色免费在线播放| 日本亚洲欧洲色| 国产一区二区三区四区五区传媒| 1024av视频| 久久一区二区三区四区| 在线精品免费视| 亚洲毛片在线免费观看| 欧美xxx视频| 色一情一乱一伦一区二区三区丨 | 1024国产在线| 国产精品一区二区女厕厕| 99成人在线视频| 日韩成人av免费| 亚洲一区中文日韩| 亚洲精品国产精品国| 97精品欧美一区二区三区| 奇米影视777在线欧美电影观看| 丝袜老师办公室里做好紧好爽| 久久久久88色偷偷免费| 久久永久免费视频| 中文字幕亚洲一区二区三区| 精品美女一区| 超薄肉色丝袜足j调教99| 成人污视频在线观看| 韩国av免费观看| 亚洲午夜激情免费视频| 外国成人毛片| 成人短视频在线观看免费| www.成人网.com| 日韩国产成人在线| www.欧美三级电影.com| 成人免费直播在线| 国产日韩一区二区在线观看| 国产精品你懂的| 午夜精品久久久久久久99| 88国产精品欧美一区二区三区| 欧美老女人另类| 久久久久久国产精品日本| 午夜欧美视频在线观看| 国产黄色片在线观看| 亚洲一区二区久久久久久久| 在线欧美视频| www久久久久久久| 日韩一区二区免费在线观看| 欧亚av在线| 曰韩不卡视频| 97久久精品人人澡人人爽| 一区二区视频免费观看| 欧美国产亚洲精品久久久8v| 国语产色综合| 久久久久国产免费| 在线观看视频一区二区欧美日韩| 成人无遮挡免费网站视频在线观看| 国产不卡一区二区在线观看| 男人操女人的视频在线观看欧美 | 国产精品刘玥久久一区| 精品午夜一区二区三区| 久久精品国产一区二区三| 国产成人精品a视频一区| 中文字幕日韩在线视频| 国产精品chinese在线观看| 色婷婷综合网站| 欧美午夜丰满在线18影院| 在线看三级电影| 亚洲精品成人久久久998|