日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis:史上最强【集群】入门实践教程

發(fā)布時間:2023/12/14 数据库 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis:史上最强【集群】入门实践教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:我沒有三顆心臟

一、Redis 集群概述

Redis 主從復(fù)制

到 目前 為止,我們所學(xué)習(xí)的 Redis 都是 單機(jī)版 的,這也就意味著一旦我們所依賴的 Redis 服務(wù)宕機(jī)了,我們的主流程也會受到一定的影響,這當(dāng)然是我們不能夠接受的。

所以一開始我們的想法是:搞一臺備用機(jī)。這樣我們就可以在一臺服務(wù)器出現(xiàn)問題的時候切換動態(tài)地到另一臺去:

幸運的是,兩個節(jié)點數(shù)據(jù)的同步我們可以使用 Redis 的 主從同步 功能幫助到我們,這樣一來,有個備份,心里就踏實多了。

Redis 哨兵

后來因為某種神秘力量,Redis 老會在莫名其妙的時間點出問題 (比如半夜 2 點),我總不能 24 小時時刻守在電腦旁邊切換節(jié)點吧,于是另一個想法又開始了:給所有的節(jié)點找一個 "管家",自動幫我監(jiān)聽照顧節(jié)點的狀態(tài)并切換:

這大概就是 Redis 哨兵 (Sentinel) 的簡單理解啦。什么?管家宕機(jī)了怎么辦?相較于有大量請求的 Redis 服務(wù)來說,管家宕機(jī)的概率就要小得多啦.. 如果真的宕機(jī)了,我們也可以直接切換成當(dāng)前可用的節(jié)點保證可用..

Redis 集群化

好了,通過上面的一些解決方案我們對 Redis 的 穩(wěn)定性 稍微有了一些底氣了,但單臺節(jié)點的計算能力始終有限,所謂人多力量大,如果我們把 多個節(jié)點組合一個可用的工作節(jié)點,那就大大增加了 Redis 的 ?高可用、可擴(kuò)展、分布式、容錯 等特性:

二、主從復(fù)制

主從復(fù)制,是指將一臺 Redis 服務(wù)器的數(shù)據(jù),復(fù)制到其他的 Redis 服務(wù)器。前者稱為 主節(jié)點(master),后者稱為 從節(jié)點(slave)。且數(shù)據(jù)的復(fù)制是 單向 的,只能由主節(jié)點到從節(jié)點。Redis 主從復(fù)制支持 主從同步從從同步 兩種,后者是 Redis 后續(xù)版本新增的功能,以減輕主節(jié)點的同步負(fù)擔(dān)。

主從復(fù)制主要的作用

  • 數(shù)據(jù)冗余: 主從復(fù)制實現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。

  • 故障恢復(fù): 當(dāng)主節(jié)點出現(xiàn)問題時,可以由從節(jié)點提供服務(wù),實現(xiàn)快速的故障恢復(fù) (實際上是一種服務(wù)的冗余)。

  • 負(fù)載均衡: 在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點提供寫服務(wù),由從節(jié)點提供讀服務(wù) (即寫 Redis 數(shù)據(jù)時應(yīng)用連接主節(jié)點,讀 Redis 數(shù)據(jù)時應(yīng)用連接從節(jié)點),分擔(dān)服務(wù)器負(fù)載。尤其是在寫少讀多的場景下,通過多個從節(jié)點分擔(dān)讀負(fù)載,可以大大提高 Redis 服務(wù)器的并發(fā)量。

  • 高可用基石: 除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑?基礎(chǔ),因此說主從復(fù)制是 Redis 高可用的基礎(chǔ)。

■快速體驗

Redis 中,用戶可以通過執(zhí)行 SLAVEOF 命令或者設(shè)置 slaveof 選項,讓一個服務(wù)器去復(fù)制另一個服務(wù)器,以下三種方式是 完全等效 的:

  • 配置文件:在從服務(wù)器的配置文件中加入:slaveof <masterip> <masterport>

  • 啟動命令:redis-server 啟動命令后加入 --slaveof <masterip> <masterport>

  • 客戶端命令:Redis 服務(wù)器啟動后,直接通過客戶端執(zhí)行命令:slaveof <masterip> <masterport>,讓該 Redis 實例成為從節(jié)點。

需要注意的是:主從復(fù)制的開啟,完全是在從節(jié)點發(fā)起的,不需要我們在主節(jié)點做任何事情。

第一步:本地啟動兩個節(jié)點

在正確安裝好 Redis 之后,我們可以使用 redis-server --port <port> 的方式指定創(chuàng)建兩個不同端口的 Redis 實例,例如,下方我分別創(chuàng)建了一個 6379 和 6380 的兩個 Redis 實例:

# 創(chuàng)建一個端口為 6379 的 Redis 實例 redis-server --port 6379 # 創(chuàng)建一個端口為 6380 的 Redis 實例 redis-server --port 6380

此時兩個 Redis 節(jié)點啟動后,都默認(rèn)為 主節(jié)點

第二步:建立復(fù)制

我們在 6380 端口的節(jié)點中執(zhí)行 slaveof 命令,使之變?yōu)閺墓?jié)點:

# 在 6380 端口的 Redis 實例中使用控制臺 redis-cli -p 6380 # 成為本地 6379 端口實例的從節(jié)點 127.0.0.1:6380> SLAVEOF 127.0.0.1? 6379 OK

第三步:觀察效果

下面我們來驗證一下,主節(jié)點的數(shù)據(jù)是否會復(fù)制到從節(jié)點之中:

  • 先在 從節(jié)點 中查詢一個 不存在 的 key:

127.0.0.1:6380> GET mykey (nil)
  • 再在 主節(jié)點 中添加這個 key:

127.0.0.1:6379> SET mykey myvalue OK
  • 此時再從 從節(jié)點 中查詢,會發(fā)現(xiàn)已經(jīng)從 主節(jié)點 同步到 從節(jié)點

127.0.0.1:6380> GET mykey "myvalue"

第四步:斷開復(fù)制

通過 slaveof <masterip> <masterport> 命令建立主從復(fù)制關(guān)系以后,可以通過 slaveof no one 斷開。需要注意的是,從節(jié)點斷開復(fù)制后,不會刪除已有的數(shù)據(jù),只是不再接受主節(jié)點新的數(shù)據(jù)變化。

從節(jié)點執(zhí)行 slaveof no one 之后,從節(jié)點和主節(jié)點分別打印日志如下:、

# 從節(jié)點打印日志 61496:M 17 Mar 2020 08:10:22.749 # Connection with master lost. 61496:M 17 Mar 2020 08:10:22.749 * Caching the disconnected master state. 61496:M 17 Mar 2020 08:10:22.749 * Discarding previously cached master state. 61496:M 17 Mar 2020 08:10:22.749 * MASTER MODE enabled (user request from 'id=4 addr=127.0.0.1:55096 fd=8 name= age=1664 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=34 qbuf-free=32734 obl=0 oll=0 omem=0 events=r cmd=slaveof')# 主節(jié)點打印日志 61467:M 17 Mar 2020 08:10:22.749 # Connection with replica 127.0.0.1:6380 lost.

■實現(xiàn)原理簡析

為了節(jié)省篇幅,我把主要的步驟都 濃縮 在了上圖中,其實也可以 簡化成三個階段:準(zhǔn)備階段-數(shù)據(jù)同步階段-命令傳播階段。下面我們來進(jìn)行一些必要的說明。

身份驗證 | 主從復(fù)制安全問題

在上面的 快速體驗 過程中,你會發(fā)現(xiàn) slaveof 這個命令居然不需要驗證?這意味著只要知道了 ip 和端口就可以隨意拷貝服務(wù)器上的數(shù)據(jù)了?

那當(dāng)然不能夠了,我們可以通過在 主節(jié)點 配置 requirepass 來設(shè)置密碼,這樣就必須在 從節(jié)點 中對應(yīng)配置好 masterauth 參數(shù) (與主節(jié)點 requirepass 保持一致) 才能夠進(jìn)行正常復(fù)制了。

SYNC 命令是一個非常耗費資源的操作

每次執(zhí)行 SYNC 命令,主從服務(wù)器需要執(zhí)行如下動作:

  • 主服務(wù)器 需要執(zhí)行 BGSAVE 命令來生成 RDB 文件,這個生成操作會 消耗 主服務(wù)器大量的 CPU、內(nèi)存和磁盤 I/O 的資源

  • 主服務(wù)器 需要將自己生成的 RDB 文件 發(fā)送給從服務(wù)器,這個發(fā)送操作會 消耗 主服務(wù)器 大量的網(wǎng)絡(luò)資源 (帶寬和流量),并對主服務(wù)器響應(yīng)命令請求的時間產(chǎn)生影響;

  • 接收到 RDB 文件的 從服務(wù)器 需要載入主服務(wù)器發(fā)來的 RBD 文件,并且在載入期間,從服務(wù)器 會因為阻塞而沒辦法處理命令請求

  • 特別是當(dāng)出現(xiàn) 斷線重復(fù)制 的情況是時,為了讓從服務(wù)器補(bǔ)足斷線時確實的那一小部分?jǐn)?shù)據(jù),卻要執(zhí)行一次如此耗資源的 SYNC 命令,顯然是不合理的。

    PSYNC 命令的引入

    所以在 Redis 2.8 中引入了 PSYNC 命令來代替 SYNC,它具有兩種模式:

  • 全量復(fù)制: 用于初次復(fù)制或其他無法進(jìn)行部分復(fù)制的情況,將主節(jié)點中的所有數(shù)據(jù)都發(fā)送給從節(jié)點,是一個非常重型的操作;

  • 部分復(fù)制: 用于網(wǎng)絡(luò)中斷等情況后的復(fù)制,只將 中斷期間主節(jié)點執(zhí)行的寫命令 發(fā)送給從節(jié)點,與全量復(fù)制相比更加高效。需要注意 的是,如果網(wǎng)絡(luò)中斷時間過長,導(dǎo)致主節(jié)點沒有能夠完整地保存中斷期間執(zhí)行的寫命令,則無法進(jìn)行部分復(fù)制,仍使用全量復(fù)制;

  • 部分復(fù)制的原理主要是靠主從節(jié)點分別維護(hù)一個 復(fù)制偏移量,有了這個偏移量之后斷線重連之后一比較,之后就可以僅僅把從服務(wù)器斷線之后確實的這部分?jǐn)?shù)據(jù)給補(bǔ)回來了。

    更多的詳細(xì)內(nèi)容可以參考下方 參考資料 3

    三、Redis Sentinel 哨兵

    上圖 展示了一個典型的哨兵架構(gòu)圖,它由兩部分組成,哨兵節(jié)點和數(shù)據(jù)節(jié)點:

    • 哨兵節(jié)點: 哨兵系統(tǒng)由一個或多個哨兵節(jié)點組成,哨兵節(jié)點是特殊的 Redis 節(jié)點,不存儲數(shù)據(jù);

    • 數(shù)據(jù)節(jié)點: 主節(jié)點和從節(jié)點都是數(shù)據(jù)節(jié)點;

    在復(fù)制的基礎(chǔ)上,哨兵實現(xiàn)了 自動化的故障恢復(fù) 功能,下方是官方對于哨兵功能的描述:

    • 監(jiān)控(Monitoring): 哨兵會不斷地檢查主節(jié)點和從節(jié)點是否運作正常。

    • 自動故障轉(zhuǎn)移(Automatic failover): 當(dāng) 主節(jié)點 不能正常工作時,哨兵會開始 自動故障轉(zhuǎn)移操作,它會將失效主節(jié)點的其中一個 從節(jié)點升級為新的主節(jié)點,并讓其他從節(jié)點改為復(fù)制新的主節(jié)點。

    • 配置提供者(Configuration provider): 客戶端在初始化時,通過連接哨兵來獲得當(dāng)前 Redis 服務(wù)的主節(jié)點地址。

    • 通知(Notification): 哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端。

    其中,監(jiān)控和自動故障轉(zhuǎn)移功能,使得哨兵可以及時發(fā)現(xiàn)主節(jié)點故障并完成轉(zhuǎn)移。而配置提供者和通知功能,則需要在與客戶端的交互中才能體現(xiàn)。

    ■快速體驗

    第一步:創(chuàng)建主從節(jié)點配置文件并啟動

    正確安裝好 Redis 之后,我們?nèi)サ?Redis 的安裝目錄 (mac 默認(rèn)在 /usr/local/),找到 redis.conf 文件復(fù)制三份分別命名為 redis-master.conf/redis-slave1.conf/redis-slave2.conf,分別作為 1 個主節(jié)點和 2 個從節(jié)點的配置文件 (下圖演示了我本機(jī)的 redis.conf 文件的位置)

    打開可以看到這個 .conf 后綴的文件里面有很多說明的內(nèi)容,全部刪除然后分別改成下面的樣子:

    #redis-master.conf port 6379 daemonize yes logfile "6379.log" dbfilename "dump-6379.rdb"#redis-slave1.conf port 6380 daemonize yes logfile "6380.log" dbfilename "dump-6380.rdb" slaveof 127.0.0.1 6379#redis-slave2.conf port 6381 daemonize yes logfile "6381.log" dbfilename "dump-6381.rdb" slaveof 127.0.0.1 6379

    然后我們可以執(zhí)行 redis-server <config file path> 來根據(jù)配置文件啟動不同的 Redis 實例,依次啟動主從節(jié)點:

    redis-server /usr/local/redis-5.0.3/redis-master.conf redis-server /usr/local/redis-5.0.3/redis-slave1.conf redis-server /usr/local/redis-5.0.3/redis-slave2.conf

    節(jié)點啟動后,我們執(zhí)行 redis-cli 默認(rèn)連接到我們端口為 6379 的主節(jié)點執(zhí)行 info Replication 檢查一下主從狀態(tài)是否正常:(可以看到下方正確地顯示了兩個從節(jié)點)

    第二步:創(chuàng)建哨兵節(jié)點配置文件并啟動

    按照上面同樣的方法,我們給哨兵節(jié)點也創(chuàng)建三個配置文件。(哨兵節(jié)點本質(zhì)上是特殊的 Redis 節(jié)點,所以配置幾乎沒什么差別,只是在端口上做區(qū)分就好)

    # redis-sentinel-1.conf port 26379 daemonize yes logfile "26379.log" sentinel monitor mymaster 127.0.0.1 6379 2# redis-sentinel-2.conf port 26380 daemonize yes logfile "26380.log" sentinel monitor mymaster 127.0.0.1 6379 2# redis-sentinel-3.conf port 26381 daemonize yes logfile "26381.log" sentinel monitor mymaster 127.0.0.1 6379 2

    其中,sentinel monitor mymaster 127.0.0.1 6379 2 配置的含義是:該哨兵節(jié)點監(jiān)控 127.0.0.1:6379 這個主節(jié)點,該主節(jié)點的名稱是 mymaster,最后的 2 的含義與主節(jié)點的故障判定有關(guān):至少需要 2 個哨兵節(jié)點同意,才能判定主節(jié)點故障并進(jìn)行故障轉(zhuǎn)移。

    執(zhí)行下方命令將哨兵節(jié)點啟動起來:

    redis-server /usr/local/redis-5.0.3/redis-sentinel-1.conf --sentinel redis-server /usr/local/redis-5.0.3/redis-sentinel-2.conf --sentinel redis-server /usr/local/redis-5.0.3/redis-sentinel-3.conf --sentinel

    使用 redis-cil 工具連接哨兵節(jié)點,并執(zhí)行 info Sentinel 命令來查看是否已經(jīng)在監(jiān)視主節(jié)點了:

    # 連接端口為 26379 的 Redis 節(jié)點 ? ~ redis-cli -p 26379 127.0.0.1:26379> info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

    此時你打開剛才寫好的哨兵配置文件,你還會發(fā)現(xiàn)出現(xiàn)了一些變化:

    第三步:演示故障轉(zhuǎn)移

    首先,我們使用 kill -9 命令來殺掉主節(jié)點,同時 在哨兵節(jié)點中執(zhí)行 info Sentinel 命令來觀察故障節(jié)點的過程:

    ? ~ ps aux | grep 6379 longtao 74529 0.3 0.0 4346936 2132 ?? Ss 10:30上午 0:03.09 redis-server *:26379 [sentinel] longtao 73541 0.2 0.0 4348072 2292 ?? Ss 10:18上午 0:04.79 redis-server *:6379 longtao 75521 0.0 0.0 4286728 728 s008 S+ 10:39上午 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn 6379 longtao 74836 0.0 0.0 4289844 944 s006 S+ 10:32上午 0:00.01 redis-cli -p 26379 ? ~ kill -9 73541

    如果 剛殺掉瞬間 在哨兵節(jié)點中執(zhí)行 info 命令來查看,會發(fā)現(xiàn)主節(jié)點還沒有切換過來,因為哨兵發(fā)現(xiàn)主節(jié)點故障并轉(zhuǎn)移需要一段時間:

    # 第一時間查看哨兵節(jié)點發(fā)現(xiàn)并未轉(zhuǎn)移,還在 6379 端口 127.0.0.1:26379> info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

    一段時間之后你再執(zhí)行 info 命令,查看,你就會發(fā)現(xiàn)主節(jié)點已經(jīng)切換成了 6381 端口的從節(jié)點:

    # 過一段時間之后在執(zhí)行,發(fā)現(xiàn)已經(jīng)切換了 6381 端口 127.0.0.1:26379> info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=3

    但同時還可以發(fā)現(xiàn),哨兵節(jié)點認(rèn)為新的主節(jié)點仍然有兩個從節(jié)點 (上方 slaves=2),這是因為哨兵在將 6381 切換成主節(jié)點的同時,將 6379 節(jié)點置為其從節(jié)點。雖然 6379 從節(jié)點已經(jīng)掛掉,但是由于 哨兵并不會對從節(jié)點進(jìn)行客觀下線,因此認(rèn)為該從節(jié)點一直存在。當(dāng) 6379 節(jié)點重新啟動后,會自動變成 6381 節(jié)點的從節(jié)點。

    另外,在故障轉(zhuǎn)移的階段,哨兵和主從節(jié)點的配置文件都會被改寫:

    • 對于主從節(jié)點: 主要是 slaveof 配置的變化,新的主節(jié)點沒有了 slaveof 配置,其從節(jié)點則 slaveof 新的主節(jié)點。

    • 對于哨兵節(jié)點: 除了主從節(jié)點信息的變化,紀(jì)元(epoch) (記錄當(dāng)前集群狀態(tài)的參數(shù)) 也會變化,紀(jì)元相關(guān)的參數(shù)都 +1 了。

    ■客戶端訪問哨兵系統(tǒng)代碼演示

    上面我們在 快速體驗 中主要感受到了服務(wù)端自己對于當(dāng)前主從節(jié)點的自動化治理,下面我們以 Java 代碼為例,來演示一下客戶端如何訪問我們的哨兵系統(tǒng):

    public static void testSentinel() throws Exception {String masterName = "mymaster";Set<String> sentinels = new HashSet<>();sentinels.add("127.0.0.1:26379");sentinels.add("127.0.0.1:26380");sentinels.add("127.0.0.1:26381");// 初始化過程做了很多工作JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels);Jedis jedis = pool.getResource();jedis.set("key1", "value1");pool.close(); }

    客戶端原理

    Jedis 客戶端對哨兵提供了很好的支持。如上述代碼所示,我們只需要向 Jedis 提供哨兵節(jié)點集合和 masterName ,構(gòu)造 JedisSentinelPool 對象,然后便可以像使用普通 Redis 連接池一樣來使用了:通過 pool.getResource() 獲取連接,執(zhí)行具體的命令。

    在整個過程中,我們的代碼不需要顯式的指定主節(jié)點的地址,就可以連接到主節(jié)點;代碼中對故障轉(zhuǎn)移沒有任何體現(xiàn),就可以在哨兵完成故障轉(zhuǎn)移后自動的切換主節(jié)點。之所以可以做到這一點,是因為在 JedisSentinelPool 的構(gòu)造器中,進(jìn)行了相關(guān)的工作;主要包括以下兩點:

  • 遍歷哨兵節(jié)點,獲取主節(jié)點信息: 遍歷哨兵節(jié)點,通過其中一個哨兵節(jié)點 + masterName 獲得主節(jié)點的信息;該功能是通過調(diào)用哨兵節(jié)點的 sentinel get-master-addr-by-name 命令實現(xiàn);

  • 增加對哨兵的監(jiān)聽: 這樣當(dāng)發(fā)生故障轉(zhuǎn)移時,客戶端便可以收到哨兵的通知,從而完成主節(jié)點的切換。具體做法是:利用 Redis 提供的 發(fā)布訂閱 功能,為每一個哨兵節(jié)點開啟一個單獨的線程,訂閱哨兵節(jié)點的 + switch-master 頻道,當(dāng)收到消息時,重新初始化連接池。

  • ■新的主服務(wù)器是怎樣被挑選出來的?

    故障轉(zhuǎn)移操作的第一步 要做的就是在已下線主服務(wù)器屬下的所有從服務(wù)器中,挑選出一個狀態(tài)良好、數(shù)據(jù)完整的從服務(wù)器,然后向這個從服務(wù)器發(fā)送 slaveof no one 命令,將這個從服務(wù)器轉(zhuǎn)換為主服務(wù)器。但是這個從服務(wù)器是怎么樣被挑選出來的呢?

    簡單來說 Sentinel 使用以下規(guī)則來選擇新的主服務(wù)器:

  • 在失效主服務(wù)器屬下的從服務(wù)器當(dāng)中, 那些被標(biāo)記為主觀下線、已斷線、或者最后一次回復(fù) PING 命令的時間大于五秒鐘的從服務(wù)器都會被 淘汰

  • 在失效主服務(wù)器屬下的從服務(wù)器當(dāng)中, 那些與失效主服務(wù)器連接斷開的時長超過 down-after 選項指定的時長十倍的從服務(wù)器都會被 淘汰

  • 經(jīng)歷了以上兩輪淘汰之后 剩下來的從服務(wù)器中, 我們選出 復(fù)制偏移量(replication offset)最大 的那個 從服務(wù)器 作為新的主服務(wù)器;如果復(fù)制偏移量不可用,或者從服務(wù)器的復(fù)制偏移量相同,那么 帶有最小運行 ID 的那個從服務(wù)器成為新的主服務(wù)器。

  • 四、Redis 集群

    上圖 展示了 Redis Cluster 典型的架構(gòu)圖,集群中的每一個 Redis 節(jié)點都 互相兩兩相連,客戶端任意 直連 到集群中的 任意一臺,就可以對其他 Redis 節(jié)點進(jìn)行 讀寫 的操作。

    基本原理

    Redis 集群中內(nèi)置了 16384 個哈希槽。當(dāng)客戶端連接到 Redis 集群之后,會同時得到一份關(guān)于這個 集群的配置信息,當(dāng)客戶端具體對某一個 key 值進(jìn)行操作時,會計算出它的一個 Hash 值,然后把結(jié)果對 16384 ?求余數(shù),這樣每個 key 都會對應(yīng)一個編號在 0-16383 之間的哈希槽,Redis 會根據(jù)節(jié)點數(shù)量 大致均等 的將哈希槽映射到不同的節(jié)點。

    再結(jié)合集群的配置信息就能夠知道這個 key 值應(yīng)該存儲在哪一個具體的 Redis 節(jié)點中,如果不屬于自己管,那么就會使用一個特殊的 MOVED 命令來進(jìn)行一個跳轉(zhuǎn),告訴客戶端去連接這個節(jié)點以獲取數(shù)據(jù):

    GET x -MOVED 3999 127.0.0.1:6381

    MOVED 指令第一個參數(shù) 3999 是 key 對應(yīng)的槽位編號,后面是目標(biāo)節(jié)點地址,MOVED 命令前面有一個減號,表示這是一個錯誤的消息。客戶端在收到 MOVED 指令后,就立即糾正本地的 槽位映射表,那么下一次再訪問 key 時就能夠到正確的地方去獲取了。

    集群的主要作用

  • 數(shù)據(jù)分區(qū): 數(shù)據(jù)分區(qū) (或稱數(shù)據(jù)分片) 是集群最核心的功能。集群將數(shù)據(jù)分散到多個節(jié)點,一方面 突破了 Redis 單機(jī)內(nèi)存大小的限制,存儲容量大大增加另一方面 每個主節(jié)點都可以對外提供讀服務(wù)和寫服務(wù),大大提高了集群的響應(yīng)能力。Redis 單機(jī)內(nèi)存大小受限問題,在介紹持久化和主從復(fù)制時都有提及,例如,如果單機(jī)內(nèi)存太大,bgsave 和 bgrewriteaof 的 fork 操作可能導(dǎo)致主進(jìn)程阻塞,主從環(huán)境下主機(jī)切換時可能導(dǎo)致從節(jié)點長時間無法提供服務(wù),全量復(fù)制階段主節(jié)點的復(fù)制緩沖區(qū)可能溢出……

  • 高可用: 集群支持主從復(fù)制和主節(jié)點的 自動故障轉(zhuǎn)移 (與哨兵類似),當(dāng)任一節(jié)點發(fā)生故障時,集群仍然可以對外提供服務(wù)。

  • ■快速體驗

    第一步:創(chuàng)建集群節(jié)點配置文件

    首先我們找一個地方創(chuàng)建一個名為 redis-cluster 的目錄:

    mkdir -p ~/Desktop/redis-cluster

    然后按照上面的方法,創(chuàng)建六個配置文件,分別命名為:redis_7000.conf/redis_7001.conf.....redis_7005.conf,然后根據(jù)不同的端口號修改對應(yīng)的端口值就好了:

    # 后臺執(zhí)行 daemonize yes # 端口號 port 7000 # 為每一個集群節(jié)點指定一個 pid_file pidfile ~/Desktop/redis-cluster/redis_7000.pid # 啟動集群模式 cluster-enabled yes # 每一個集群節(jié)點都有一個配置文件,這個文件是不能手動編輯的。確保每一個集群節(jié)點的配置文件不通 cluster-config-file nodes-7000.conf # 集群節(jié)點的超時時間,單位:ms,超時后集群會認(rèn)為該節(jié)點失敗 cluster-node-timeout 5000 # 最后將 appendonly 改成 yes(AOF 持久化) appendonly yes

    記得把對應(yīng)上述配置文件中根端口對應(yīng)的配置都修改掉 (port/ pidfile/ cluster-config-file)。

    第二步:分別啟動 6 個 Redis 實例

    redis-server ~/Desktop/redis-cluster/redis_7000.conf redis-server ~/Desktop/redis-cluster/redis_7001.conf redis-server ~/Desktop/redis-cluster/redis_7002.conf redis-server ~/Desktop/redis-cluster/redis_7003.conf redis-server ~/Desktop/redis-cluster/redis_7004.conf redis-server ~/Desktop/redis-cluster/redis_7005.conf

    然后執(zhí)行 ps -ef | grep redis 查看是否啟動成功:

    可以看到 6 個 Redis 節(jié)點都以集群的方式成功啟動了,但是現(xiàn)在每個節(jié)點還處于獨立的狀態(tài),也就是說它們每一個都各自成了一個集群,還沒有互相聯(lián)系起來,我們需要手動地把他們之間建立起聯(lián)系。

    第三步:建立集群

    執(zhí)行下列命令:

    redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    • 這里稍微解釋一下這個 --replicas 1 的意思是:我們希望為集群中的每個主節(jié)點創(chuàng)建一個從節(jié)點。

    觀察控制臺輸出:

    看到 [OK] 的信息之后,就表示集群已經(jīng)搭建成功了,可以看到,這里我們正確地創(chuàng)建了三主三從的集群。

    第四步:驗證集群

    我們先使用 redic-cli 任意連接一個節(jié)點:

    redis-cli -c -h 127.0.0.1 -p 7000 127.0.0.1:7000>
    • -c表示集群模式;-h 指定 ip 地址;-p 指定端口。

    然后隨便 set 一些值觀察控制臺輸入:

    127.0.0.1:7000> SET name wmyskxz -> Redirected to slot [5798] located at 127.0.0.1:7001 OK 127.0.0.1:7001>

    可以看到這里 Redis 自動幫我們進(jìn)行了 Redirected 操作跳轉(zhuǎn)到了 7001 這個實例上。

    我們再使用 cluster info (查看集群信息) 和 cluster nodes (查看節(jié)點列表) 來分別看看:(任意節(jié)點輸入均可)

    127.0.0.1:7001> CLUSTER INFO cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:2 cluster_stats_messages_ping_sent:1365 cluster_stats_messages_pong_sent:1358 cluster_stats_messages_meet_sent:4 cluster_stats_messages_sent:2727 cluster_stats_messages_ping_received:1357 cluster_stats_messages_pong_received:1369 cluster_stats_messages_meet_received:1 cluster_stats_messages_received:2727127.0.0.1:7001> CLUSTER NODES 56a04742f36c6e84968cae871cd438935081e86f 127.0.0.1:7003@17003 slave 4ec8c022e9d546c9b51deb9d85f6cf867bf73db6 0 1584428884000 4 connected 4ec8c022e9d546c9b51deb9d85f6cf867bf73db6 127.0.0.1:7000@17000 master - 0 1584428884000 1 connected 0-5460 e2539c4398b8258d3f9ffa714bd778da107cb2cd 127.0.0.1:7005@17005 slave a3406db9ae7144d17eb7df5bffe8b70bb5dd06b8 0 1584428885222 6 connected d31cd1f423ab1e1849cac01ae927e4b6950f55d9 127.0.0.1:7004@17004 slave 236cefaa9cdc295bc60a5bd1aed6a7152d4f384d 0 1584428884209 5 connected 236cefaa9cdc295bc60a5bd1aed6a7152d4f384d 127.0.0.1:7001@17001 myself,master - 0 1584428882000 2 connected 5461-10922 a3406db9ae7144d17eb7df5bffe8b70bb5dd06b8 127.0.0.1:7002@17002 master - 0 1584428884000 3 connected 10923-16383 127.0.0.1:7001>

    ■數(shù)據(jù)分區(qū)方案簡析

    方案一:哈希值 % 節(jié)點數(shù)

    哈希取余分區(qū)思路非常簡單:計算 key 的 hash 值,然后對節(jié)點數(shù)量進(jìn)行取余,從而決定數(shù)據(jù)映射到哪個節(jié)點上。

    不過該方案最大的問題是,當(dāng)新增或刪減節(jié)點時,節(jié)點數(shù)量發(fā)生變化,系統(tǒng)中所有的數(shù)據(jù)都需要 重新計算映射關(guān)系,引發(fā)大規(guī)模數(shù)據(jù)遷移。

    方案二:一致性哈希分區(qū)

    一致性哈希算法將 整個哈希值空間 組織成一個虛擬的圓環(huán),范圍是 [0 - 232 - 1],對于每一個數(shù)據(jù),根據(jù) key 計算 hash 值,確數(shù)據(jù)在環(huán)上的位置,然后從此位置沿順時針行走,找到的第一臺服務(wù)器就是其應(yīng)該映射到的服務(wù)器:

    與哈希取余分區(qū)相比,一致性哈希分區(qū)將 增減節(jié)點的影響限制在相鄰節(jié)點。以上圖為例,如果在 node1 和 node2 之間增加 node5,則只有 node2 中的一部分?jǐn)?shù)據(jù)會遷移到 node5;如果去掉 node2,則原 node2 中的數(shù)據(jù)只會遷移到 node4 中,只有 node4 會受影響。

    一致性哈希分區(qū)的主要問題在于,當(dāng) 節(jié)點數(shù)量較少 時,增加或刪減節(jié)點,對單個節(jié)點的影響可能很大,造成數(shù)據(jù)的嚴(yán)重不平衡。還是以上圖為例,如果去掉 node2,node4 中的數(shù)據(jù)由總數(shù)據(jù)的 1/4 左右變?yōu)?1/2 左右,與其他節(jié)點相比負(fù)載過高。

    方案三:帶有虛擬節(jié)點的一致性哈希分區(qū)

    該方案在 一致性哈希分區(qū)的基礎(chǔ)上,引入了 虛擬節(jié)點 的概念。Redis 集群使用的便是該方案,其中的虛擬節(jié)點稱為 槽(slot)。槽是介于數(shù)據(jù)和實際節(jié)點之間的虛擬概念,每個實際節(jié)點包含一定數(shù)量的槽,每個槽包含哈希值在一定范圍內(nèi)的數(shù)據(jù)。

    在使用了槽的一致性哈希分區(qū)中,槽是數(shù)據(jù)管理和遷移的基本單位。槽 解耦數(shù)據(jù)和實際節(jié)點 之間的關(guān)系,增加或刪除節(jié)點對系統(tǒng)的影響很小。仍以上圖為例,系統(tǒng)中有 4 個實際節(jié)點,假設(shè)為其分配 16 個槽(0-15);

    • 槽 0-3 位于 node1;4-7 位于 node2;以此類推....

    如果此時刪除 node2,只需要將槽 4-7 重新分配即可,例如槽 4-5 分配給 node1,槽 6 分配給 node3,槽 7 分配給 node4;可以看出刪除 node2 后,數(shù)據(jù)在其他節(jié)點的分布仍然較為均衡。

    ■節(jié)點通信機(jī)制簡析

    集群的建立離不開節(jié)點之間的通信,例如我們上訪在 快速體驗 中剛啟動六個集群節(jié)點之后通過 redis-cli 命令幫助我們搭建起來了集群,實際上背后每個集群之間的兩兩連接是通過了 CLUSTER MEET <ip> <port> 命令發(fā)送 MEET 消息完成的,下面我們展開詳細(xì)說說。

    兩個端口

    哨兵系統(tǒng) 中,節(jié)點分為 數(shù)據(jù)節(jié)點哨兵節(jié)點:前者存儲數(shù)據(jù),后者實現(xiàn)額外的控制功能。在 集群 中,沒有數(shù)據(jù)節(jié)點與非數(shù)據(jù)節(jié)點之分:所有的節(jié)點都存儲數(shù)據(jù),也都參與集群狀態(tài)的維護(hù)。為此,集群中的每個節(jié)點,都提供了兩個 TCP 端口:

    • 普通端口: 即我們在前面指定的端口 (7000等)。普通端口主要用于為客戶端提供服務(wù) (與單機(jī)節(jié)點類似);但在節(jié)點間數(shù)據(jù)遷移時也會使用。

    • 集群端口: 端口號是普通端口 + 10000 (10000是固定值,無法改變),如 7000 節(jié)點的集群端口為 17000。集群端口只用于節(jié)點之間的通信,如搭建集群、增減節(jié)點、故障轉(zhuǎn)移等操作時節(jié)點間的通信;不要使用客戶端連接集群接口。為了保證集群可以正常工作,在配置防火墻時,要同時開啟普通端口和集群端口。

    Gossip 協(xié)議

    節(jié)點間通信,按照通信協(xié)議可以分為幾種類型:單對單、廣播、Gossip 協(xié)議等。重點是廣播和 Gossip 的對比。

    • 廣播是指向集群內(nèi)所有節(jié)點發(fā)送消息。優(yōu)點 是集群的收斂速度快(集群收斂是指集群內(nèi)所有節(jié)點獲得的集群信息是一致的),缺點 是每條消息都要發(fā)送給所有節(jié)點,CPU、帶寬等消耗較大。

    • Gossip 協(xié)議的特點是:在節(jié)點數(shù)量有限的網(wǎng)絡(luò)中,每個節(jié)點都 “隨機(jī)” 的與部分節(jié)點通信 (并不是真正的隨機(jī),而是根據(jù)特定的規(guī)則選擇通信的節(jié)點),經(jīng)過一番雜亂無章的通信,每個節(jié)點的狀態(tài)很快會達(dá)到一致。Gossip 協(xié)議的 優(yōu)點 有負(fù)載 (比廣播) 低、去中心化、容錯性高 (因為通信有冗余) 等;缺點 主要是集群的收斂速度慢。

    消息類型

    集群中的節(jié)點采用 固定頻率(每秒10次)定時任務(wù) 進(jìn)行通信相關(guān)的工作:判斷是否需要發(fā)送消息及消息類型、確定接收節(jié)點、發(fā)送消息等。如果集群狀態(tài)發(fā)生了變化,如增減節(jié)點、槽狀態(tài)變更,通過節(jié)點間的通信,所有節(jié)點會很快得知整個集群的狀態(tài),使集群收斂。

    節(jié)點間發(fā)送的消息主要分為 5 種:meet 消息、ping 消息、pong 消息、fail 消息、publish 消息。不同的消息類型,通信協(xié)議、發(fā)送的頻率和時機(jī)、接收節(jié)點的選擇等是不同的:

    • MEET 消息: 在節(jié)點握手階段,當(dāng)節(jié)點收到客戶端的 CLUSTER MEET 命令時,會向新加入的節(jié)點發(fā)送 MEET 消息,請求新節(jié)點加入到當(dāng)前集群;新節(jié)點收到 MEET 消息后會回復(fù)一個 PONG 消息。

    • PING 消息: 集群里每個節(jié)點每秒鐘會選擇部分節(jié)點發(fā)送 PING 消息,接收者收到消息后會回復(fù)一個 PONG 消息。PING 消息的內(nèi)容是自身節(jié)點和部分其他節(jié)點的狀態(tài)信息,作用是彼此交換信息,以及檢測節(jié)點是否在線。PING 消息使用 Gossip 協(xié)議發(fā)送,接收節(jié)點的選擇兼顧了收斂速度和帶寬成本,具體規(guī)則如下:(1)隨機(jī)找 5 個節(jié)點,在其中選擇最久沒有通信的 1 個節(jié)點;(2)掃描節(jié)點列表,選擇最近一次收到 PONG 消息時間大于 cluster_node_timeout / 2 的所有節(jié)點,防止這些節(jié)點長時間未更新。

    • PONG消息: PONG 消息封裝了自身狀態(tài)數(shù)據(jù)。可以分為兩種:第一種 是在接到 MEET/PING 消息后回復(fù)的 PONG 消息;第二種 是指節(jié)點向集群廣播 PONG 消息,這樣其他節(jié)點可以獲知該節(jié)點的最新信息,例如故障恢復(fù)后新的主節(jié)點會廣播 PONG 消息。

    • FAIL 消息: 當(dāng)一個主節(jié)點判斷另一個主節(jié)點進(jìn)入 FAIL 狀態(tài)時,會向集群廣播這一 FAIL 消息;接收節(jié)點會將這一 FAIL 消息保存起來,便于后續(xù)的判斷。

    • PUBLISH 消息: 節(jié)點收到 PUBLISH 命令后,會先執(zhí)行該命令,然后向集群廣播這一消息,接收節(jié)點也會執(zhí)行該 PUBLISH 命令。

    ■數(shù)據(jù)結(jié)構(gòu)簡析

    節(jié)點需要專門的數(shù)據(jù)結(jié)構(gòu)來存儲集群的狀態(tài)。所謂集群的狀態(tài),是一個比較大的概念,包括:集群是否處于上線狀態(tài)、集群中有哪些節(jié)點、節(jié)點是否可達(dá)、節(jié)點的主從狀態(tài)、槽的分布……

    節(jié)點為了存儲集群狀態(tài)而提供的數(shù)據(jù)結(jié)構(gòu)中,最關(guān)鍵的是 clusterNode 和 clusterState 結(jié)構(gòu):前者記錄了一個節(jié)點的狀態(tài),后者記錄了集群作為一個整體的狀態(tài)。

    clusterNode 結(jié)構(gòu)

    clusterNode 結(jié)構(gòu)保存了 一個節(jié)點的當(dāng)前狀態(tài),包括創(chuàng)建時間、節(jié)點 id、ip 和端口號等。每個節(jié)點都會用一個 clusterNode 結(jié)構(gòu)記錄自己的狀態(tài),并為集群內(nèi)所有其他節(jié)點都創(chuàng)建一個 clusterNode 結(jié)構(gòu)來記錄節(jié)點狀態(tài)。

    下面列舉了 clusterNode 的部分字段,并說明了字段的含義和作用:

    typedef struct clusterNode {//節(jié)點創(chuàng)建時間mstime_t ctime;//節(jié)點idchar name[REDIS_CLUSTER_NAMELEN];//節(jié)點的ip和端口號char ip[REDIS_IP_STR_LEN];int port;//節(jié)點標(biāo)識:整型,每個bit都代表了不同狀態(tài),如節(jié)點的主從狀態(tài)、是否在線、是否在握手等int flags;//配置紀(jì)元:故障轉(zhuǎn)移時起作用,類似于哨兵的配置紀(jì)元uint64_t configEpoch;//槽在該節(jié)點中的分布:占用16384/8個字節(jié),16384個比特;每個比特對應(yīng)一個槽:比特值為1,則該比特對應(yīng)的槽在節(jié)點中;比特值為0,則該比特對應(yīng)的槽不在節(jié)點中unsigned char slots[16384/8];//節(jié)點中槽的數(shù)量int numslots;………… } clusterNode;

    除了上述字段,clusterNode 還包含節(jié)點連接、主從復(fù)制、故障發(fā)現(xiàn)和轉(zhuǎn)移需要的信息等。

    clusterState 結(jié)構(gòu)

    clusterState 結(jié)構(gòu)保存了在當(dāng)前節(jié)點視角下,集群所處的狀態(tài)。主要字段包括:

    typedef struct clusterState {//自身節(jié)點clusterNode *myself;//配置紀(jì)元uint64_t currentEpoch;//集群狀態(tài):在線還是下線int state;//集群中至少包含一個槽的節(jié)點數(shù)量int size;//哈希表,節(jié)點名稱->clusterNode節(jié)點指針dict *nodes;//槽分布信息:數(shù)組的每個元素都是一個指向clusterNode結(jié)構(gòu)的指針;如果槽還沒有分配給任何節(jié)點,則為NULLclusterNode *slots[16384];………… } clusterState;

    除此之外,clusterState 還包括故障轉(zhuǎn)移、槽遷移等需要的信息。

    更多關(guān)于集群內(nèi)容請自行閱讀《Redis 設(shè)計與實現(xiàn)》,其中有更多細(xì)節(jié)方面的介紹 - http://redisbook.com/參考資料

  • 《Redis 設(shè)計與實現(xiàn)》 | 黃健宏 著 - http://redisbook.com/

  • 《Redis 深度歷險》 | 錢文品 著 - https://book.douban.com/subject/30386804/

  • 深入學(xué)習(xí)Redis(3):主從復(fù)制 - https://www.cnblogs.com/kismetv/p/9236731.html

  • Redis 主從復(fù)制 原理與用法 - https://blog.csdn.net/Stubborn_Cow/article/details/50442950

  • 深入學(xué)習(xí)Redis(4):哨兵 - https://www.cnblogs.com/kismetv/p/9609938.html

  • Redis 5 之后版本的高可用集群搭建 - https://www.jianshu.com/p/8045b92fafb2

  • 本文已收錄至Github 程序員成長系列 【More Than Java】,學(xué)習(xí),不止 Code,歡迎 star:https://github.com/wmyskxz/MoreThanJava

    END

    Java面試題專欄

    【51期】一道阿里面試題:說說你知道的關(guān)于BeanFactory和FactoryBean的區(qū)別

    【52期】記一道簡單的Java面試題,但答錯率很高!

    【53期】面試官:談一下數(shù)據(jù)庫分庫分表之后,你是如何解決事務(wù)問題?

    【54期】Java序列化三連問,是什么?為什么需要?如何實現(xiàn)?

    【55期】面試中經(jīng)常被問到Java引用類型原理,帶你深入剖析

    【56期】你說你熟悉并發(fā)編程,那么你說說Java鎖有哪些種類,以及區(qū)別

    【57期】面試官問,MySQL建索引需要遵循哪些原則呢?

    【58期】盤點那些面試中最常問的MySQL問題,第一彈!

    【59期】MySQL索引是如何提高查詢效率的呢?(MySQL面試第二彈)

    【60期】事務(wù)隔離級別中的可重復(fù)讀能防幻讀嗎?(MySQL面試第三彈)


    歡迎長按下圖關(guān)注公眾號后端技術(shù)精選

    總結(jié)

    以上是生活随笔為你收集整理的Redis:史上最强【集群】入门实践教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    中文字幕在线播放日韩 | 亚洲国产av精品毛片鲁大师 | 中文字幕首页 | 欧美va天堂va视频va在线 | 国产一级视频 | 97超视频免费观看 | 黄色一级免费网站 | 免费在线日韩 | 久久精品中文视频 | 国产精品美女 | 日韩一区二区三区视频在线 | 91av视频在线观看免费 | 精品国产一区二 | 91麻豆网| 麻豆91在线观看 | 精品v亚洲v欧美v高清v | 黄色小网站在线观看 | 青青河边草观看完整版高清 | 一区在线播放 | 国语精品视频 | 美女福利视频 | 久久精品这里精品 | 色婷婷成人网 | 九九在线视频免费观看 | 亚一亚二国产专区 | 日日摸日日添日日躁av | 少妇视频在线播放 | 国产一区二区免费 | 草久视频在线观看 | 欧美一区三区四区 | 日韩在线观看网站 | 国产久草在线 | 日韩中文字幕视频在线观看 | 久久久香蕉视频 | 国产一区国产精品 | 91福利小视频 | 草久久精品 | 一区二区视频电影在线观看 | 欧美日韩高清一区 | 欧美精选一区二区三区 | 五月天久久 | 日韩理论视频 | 中文字幕刺激在线 | 免费高清在线观看电视网站 | 欧洲精品在线视频 | 五月婷婷色丁香 | 婷婷色网 | 国产精品毛片久久蜜 | 国产色a在线观看 | 亚洲精品97| 天天色视频 | 亚洲欧美日韩不卡 | 综合伊人av | 欧美一级性生活视频 | 国产精品毛片一区二区在线看 | 天天干人人干 | 字幕网资源站中文字幕 | 亚洲精品国产精品久久99热 | 一区二区三区免费看 | 欧美日韩国产免费视频 | 国产精品欧美日韩 | 在线播放国产一区二区三区 | 91成人在线视频观看 | 国产精品久久久久久久免费观看 | www.狠狠| 伊人春色电影网 | 欧美日韩国产在线 | 在线欧美小视频 | 日韩久久在线 | 97国产情侣爱久久免费观看 | 国产精品亚洲视频 | 欧美动漫一区二区三区 | 在线免费观看视频一区二区三区 | 韩日精品中文字幕 | 久久久久久久久久久久99 | 久久草在线视频国产 | 五月天久久久久 | 在线免费观看视频一区二区三区 | 国产永久免费 | 亚洲一区精品二人人爽久久 | 91精品国产91p65 | 一区二区中文字幕在线观看 | 天天操狠狠操夜夜操 | 视频高清 | 91在线免费观看国产 | 亚洲美女精品 | 亚洲成aⅴ人片久久青草影院 | av福利资源 | 九九九热精品 | 99激情网 | 色狠狠综合 | 不卡的av电影 | 成人在线观看资源 | 中文字幕刺激在线 | 亚洲国内精品 | 国产成人一区在线 | 国产免费又黄又爽 | 久久久久久久久艹 | 欧美日韩视频一区二区 | 五月婷婷综合在线 | 亚洲最大成人网4388xx | 国产不卡av在线 | 国产精品情侣视频 | 国产录像在线观看 | 国产精品久久中文字幕 | 中文字幕欧美激情 | 91看片淫黄大片一级在线观看 | 日韩二区三区在线 | www.天天干 | 欧美在线a视频 | 久久精品视频在线观看免费 | 国产精品亚洲a | 在线观看aaa | 96在线 | 69中文字幕 | 欧美日韩国产二区 | 97精品超碰一区二区三区 | 国产色在线观看 | 五月婷婷丁香综合 | 96看片| 国产不卡一二三区 | 最新午夜电影 | 亚洲毛片在线观看. | 亚洲情影院 | 在线观看小视频 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 色综合婷婷久久 | 国产毛片久久久 | 国产精品久久久久久a | 国产精品毛片一区二区在线看 | 色综合天天色 | 色婷婷播放 | 亚洲精品永久免费视频 | 欧美在线视频一区二区 | 在线观看国产v片 | 精品久久久久久久久久久久 | 精品美女久久久久久免费 | 久久黄视频 | 日韩免费在线看 | 精品国产aⅴ麻豆 | 99re久久资源最新地址 | 国产高清日韩欧美 | 一级大片在线观看 | 九九久久国产 | 在线精品观看 | 天天爽天天爽夜夜爽 | 婷婷国产在线观看 | 亚洲第一区在线观看 | 四虎小视频 | 国产视频一区二区在线播放 | 91色偷偷 | 精品毛片久久久久久 | 亚洲区另类春色综合小说校园片 | 欧美激情视频一二三区 | 久久经典国产 | 天天射天天搞 | 一区二区三区在线播放 | 免费在线观看av的网站 | 欧美在线1区 | 久久亚洲日本 | 国内精品久久久久影院日本资源 | 亚洲乱亚洲乱亚洲 | 亚洲午夜久久久久久久久电影网 | 色综合久久久久综合体桃花网 | 黄色大片免费网站 | 久草在线视频新 | 天天操夜夜操夜夜操 | 久久综合婷婷综合 | 亚洲永久精品一区 | www.色午夜,com | 久久久久久久国产精品 | 久久久久久久久精 | 九九交易行官网 | 国产精品99久久久精品 | 91丨九色丨国产在线 | 天天玩天天操天天射 | 午夜国产福利在线 | 亚洲人成影院在线 | 久久久污 | 国产 精品 资源 | 亚洲国产中文字幕在线观看 | 91高清完整版在线观看 | 久草在线手机视频 | 久久久久久久网 | 日日夜夜人人精品 | 国产正在播放 | 久久久精品网 | 色综合久久88色综合天天 | 成人黄色电影免费观看 | 亚洲激情校园春色 | 色噜噜在线观看 | 日韩com| 亚洲精品国产精品国自产 | 99久久综合国产精品二区 | 欧美日韩国产精品一区 | 成人免费看黄 | 国产69精品久久99的直播节目 | 国产精品第一页在线 | 欧美一级黄色视屏 | 久久国产电影 | 国产精品久久久久久久久婷婷 | 国产伦精品一区二区三区四区视频 | 丁香狠狠 | 99在线免费视频 | 精品视频免费播放 | 久久精品波多野结衣 | 麻豆视频在线播放 | 久草视频视频在线播放 | 免费人成网| 久久特级毛片 | 玖玖在线精品 | 天天操网站| 在线观看黄网站 | 婷婷中文字幕在线观看 | 99久久精品无免国产免费 | 91久久人澡人人添人人爽欧美 | 久久成人一区 | 国产高清免费视频 | 婷婷午夜 | 在线精品视频免费观看 | 久久精品视频免费观看 | 美女精品国产 | 国产精品久久久久久电影 | 成人免费在线视频观看 | 91在线亚洲| 免费污片 | 成人在线播放免费观看 | 91香蕉视频好色先生 | 国产精品视频观看 | 欧美少妇xx | 欧美一级免费在线 | 久久综合之合合综合久久 | 欧美日韩在线网站 | 美女国内精品自产拍在线播放 | 久久毛片网站 | www.五月天婷婷.com | av成人在线播放 | 99久久婷婷国产综合精品 | 91手机视频在线 | 亚洲电影黄色 | 中文字幕 国产 一区 | 国产精品理论片在线观看 | 免费在线观看中文字幕 | 国产91成人 | 91高清完整版在线观看 | 亚洲精品成人免费 | 91九色国产在线 | www.国产在线视频 | 国产精品第一 | 色婷婷综合久久久久 | 亚洲午夜久久久久久久久久久 | 免费精品在线观看 | 久久人人做| 中文字幕韩在线第一页 | 久草精品在线 | 黄色电影网站在线观看 | 色婷婷97| 日韩免费看片 | 日韩视频一 | 亚洲精品在线一区二区三区 | 免费视频色 | 国产高清视频在线播放一区 | 九九三级毛片 | 黄色影院在线免费观看 | 日韩精品电影在线播放 | 国产精品久久久网站 | 久久久国产精华液 | 激情在线五月天 | 一区二区三区韩国免费中文网站 | 日韩激情中文字幕 | 99久久久国产精品免费99 | 中文字幕乱码日本亚洲一区二区 | 精品视频免费看 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 久久国产精品免费一区二区三区 | 国产免费av一区二区三区 | 色综合www| 精品久久福利 | 黄色成年片 | 一级黄色av | 色网址99| 欧洲精品码一区二区三区免费看 | 国产精品免费一区二区三区在线观看 | 色综合久久久久综合体桃花网 | 狠狠操夜夜操 | 中文字幕制服丝袜av久久 | 久久热亚洲 | 日本午夜免费福利视频 | 狠狠色婷婷丁香六月 | 国产女人18毛片水真多18精品 | 亚洲伦理中文字幕 | 亚洲最大的av网站 | 色综合天天天天做夜夜夜夜做 | 国产成人一区二区三区 | 免费看av在线 | 黄色a在线观看 | 亚洲综合激情网 | 18做爰免费视频网站 | 婷婷五月情 | 精品久久久久久久久久久久久 | 亚洲香蕉视频 | 久久综合五月天婷婷伊人 | 中文字幕成人av | 久久久久久久久免费视频 | 精品成人久久 | 92精品国产成人观看免费 | 视频在线一区二区三区 | 午夜视频欧美 | 激情综合亚洲 | 奇米影视777四色米奇影院 | av电影不卡在线 | 成人免费看片网址 | 免费三及片| 丝袜美腿在线播放 | 男女拍拍免费视频 | 亚洲激情综合网 | 免费观看www小视频的软件 | 免费日韩一区二区三区 | 精品九九九 | 色94色欧美 | 国产一区二区网址 | 91精品国产91久久久久久三级 | 国产日韩av在线 | 欧美日韩一区二区三区在线免费观看 | 国产999精品久久久久久 | 日韩激情免费视频 | 右手影院亚洲欧美 | 麻豆视频在线免费看 | av电影久久 | 精品视频在线看 | 欧美成人xxx | 久久久久免费精品视频 | 国产精品18久久久久vr手机版特色 | 久久久亚洲国产精品麻豆综合天堂 | 日韩剧情 | 精品国产一区在线观看 | 日韩18p| 99久久精品国产一区 | 中文字幕在线视频网站 | 嫩草av影院 | 久久tv | 99精品视频网站 | 国产精品中文字幕av | 九色激情网 | 激情五月婷婷综合网 | 亚洲我射av| 日韩激情视频 | 欧美人体xx | 五月综合激情网 | 中文字幕一区二区三区四区 | 狠狠的操狠狠的干 | 四虎在线免费观看 | 91亚洲视频在线观看 | av性网站| 久久久久久久久综合 | 在线看日韩av| 国产精品成人自产拍在线观看 | 色窝资源 | 香蕉在线视频播放网站 | www.夜夜爱| 久久免费视频在线观看30 | 日韩欧美在线视频一区二区 | 国产午夜精品福利视频 | 在线a视频免费观看 | 波多野结衣在线播放一区 | 日韩欧美高清不卡 | 久久免费精品一区二区三区 | 99r在线观看| 久久综合99| 久久av福利 | 精品视频免费久久久看 | 国产又粗又长又硬免费视频 | av一本久道久久波多野结衣 | 丁香六月在线观看 | 久久久久在线观看 | 久久久久久麻豆 | 国内99视频 | 五月综合网 | 波多野结衣在线播放视频 | 久久视频在线 | 久久免费视频这里只有精品 | 中文字幕乱码一区二区 | 九九免费在线观看 | 国产91国语对白在线 | 黄色软件网站在线观看 | 午夜资源站| 91香蕉视频好色先生 | 四虎小视频 | 亚洲乱码在线 | 精品一区电影 | 国产96精品 | 久草视频一区 | 日韩欧美成 | 免费看黄色大全 | 99久久精品视频免费 | 中文字幕影视 | 国产精品一区免费观看 | 中文字幕第一 | 国产精品99久久免费黑人 | 亚洲国产精品99久久久久久久久 | 99久国产| 国产一级大片在线观看 | 欧美日韩一区二区三区视频 | 日韩欧美高清在线 | 亚洲成aⅴ人在线观看 | 日韩特黄av | 亚洲精品tv | 久久精品一 | 国产又粗又猛又爽又黄的视频先 | 欧美亚洲成人免费 | 中文视频在线播放 | 亚洲高清视频在线观看 | 成人免费视频网站在线观看 | 色激情在线 | 日韩在线观看中文字幕 | 精品国产乱码久久久久久天美 | 欧美性色综合 | 日本精品小视频 | 伊人婷婷久久 | 天天操天天操一操 | 免费av在| 欧洲一区精品 | 99久久精品免费看国产一区二区三区 | 免费看三级黄色片 | 欧美性精品 | 中文字幕在线日亚洲9 | 免费av片在线 | 中文字幕精品www乱入免费视频 | 六月色 | 国产精品毛片一区二区三区 | 日韩在线视频不卡 | 99精品免费久久久久久日本 | 国产精品美女久久久免费 | 久久精品观看 | 97中文字幕 | 欧美贵妇性狂欢 | 国产精品24小时在线观看 | 日韩精品在线看 | 伊人激情网 | 午夜精品久久久久久久99无限制 | 日韩精品免费一区二区在线观看 | 久久国产高清视频 | 成人三级av | 国产精品第7页 | 五月激情在线 | 国产精品123 | 久久久av电影 | 国产精品美女久久久久久久久久久 | 成人18视频| 中文字幕有码在线观看 | 色小说av | 国产亚洲一区二区在线观看 | 91精品亚洲影视在线观看 | 四虎成人精品在永久免费 | 视频在线日韩 | 久久在线免费观看 | 国产成人三级三级三级97 | 麻豆91网站 | 18国产精品福利片久久婷 | 手机成人av在线 | 婷色在线 | 在线视频欧美日韩 | 处女av在线 | 国产欧美综合在线观看 | 国产精品一区一区三区 | 国产黄色一级片 | 丁香激情综合久久伊人久久 | 久草视频资源 | 亚洲国产视频在线 | 亚洲黄色一级电影 | 99视频精品免费观看, | 香蕉影院在线观看 | 视频成人免费 | 国产中文在线观看 | 国产精品久久婷婷六月丁香 | 亚洲精品视频免费观看 | 国产精品涩涩屋www在线观看 | 91精品国产电影 | 日韩av二区| 在线观看免费日韩 | 视频1区2区 | 免费观看性生活大片 | 久久久麻豆视频 | 亚洲精品白浆高清久久久久久 | 欧美另类成人 | 91精品国产综合久久久久久久 | 婷婷电影在线观看 | 97在线影视 | 精品在线视频一区二区三区 | 911国产 | 天天色天天色天天色 | 免费网址你懂的 | 就要色综合 | 国产高清区 | 91亚色视频在线观看 | 香蕉视频18| 亚洲人成精品久久久久 | 精品国产一二三四区 | 日韩一区正在播放 | 日韩av片无码一区二区不卡电影 | 又黄又爽的免费高潮视频 | 午夜精品一区二区三区免费 | 又粗又长又大又爽又黄少妇毛片 | 久草免费色站 | 超碰97网站| 免费在线播放黄色 | 婷婷五月在线视频 | 高清免费av在线 | 成年人在线观看免费视频 | 中文字幕.av.在线 | 最近日本中文字幕a | 欧洲精品视频一区 | 自拍超碰在线 | 亚洲伊人婷婷 | 欧美日韩精品在线一区二区 | 日日夜夜网 | 人人爽人人看 | 色片网站在线观看 | 久久综合九色综合97_ 久久久 | 国产精品久久久久久久久久直播 | 国内精品小视频 | 亚洲aⅴ在线 | 亚洲午夜久久久综合37日本 | 波多野结衣在线视频一区 | 日韩久久久久 | 69夜色精品国产69乱 | 国产成人精品一区二区三区 | 亚洲国产精品人久久电影 | 天天操天天色天天射 | 日韩av视屏在线观看 | 人人干人人模 | 99久久精品免费看国产一区二区三区 | 91热精品 | 国产网站色| 91精品国自产在线偷拍蜜桃 | 波多野结衣在线中文字幕 | 视频国产一区二区三区 | 豆豆色资源网xfplay | 色综合久久中文字幕综合网 | 玖玖在线资源 | 麻豆视频一区 | 免费观看性生活大片 | 亚洲久草在线视频 | av免费线看| 中文字幕亚洲精品日韩 | 国产精品免费观看网站 | 二区在线播放 | 久久综合久久综合这里只有精品 | 激情深爱.com | 国产又粗又长的视频 | 91精品国产电影 | 成人免费在线看片 | 日本不卡一区二区 | 日韩免费高清 | 人人射| 91av福利视频| 欧美xxxxx在线视频 | 天堂麻豆 | 国产手机在线播放 | 天天干,天天操,天天射 | 国内小视频在线观看 | 91麻豆福利 | 国产精品成人在线 | av高清免费在线 | 久久在视频 | 成人av动漫在线 | 国产精品久久人 | 免费在线成人 | 国产淫片 | 九色精品免费永久在线 | 成人午夜网 | 日韩欧美高清视频在线观看 | 福利久久久 | 在线免费观看黄色小说 | 天干啦夜天干天干在线线 | 国产精品久久久久久久久久直播 | 五月婷婷六月丁香在线观看 | 国产精品日韩久久久久 | 国产手机视频精品 | 亚洲精品在线观看的 | 欧美在线视频一区二区三区 | 日日日日日 | 又污又黄的网站 | 亚洲综合在| 在线观看免费版高清版 | 午夜精品一区二区国产 | 国产成人av在线影院 | 看国产黄色大片 | 免费进去里的视频 | 成人国产网站 | 国产精品女同一区二区三区久久夜 | 日韩精品视频免费在线观看 | 欧美xxxx性xxxxx高清 | 99热这里只有精品8 久久综合毛片 | 国产三级精品在线 | 在线观看免费福利 | 久久综合五月天婷婷伊人 | 亚洲精品高清一区二区三区四区 | 91污污| 国内精品久久久久久 | 午夜在线免费视频 | 中文字幕av在线不卡 | 亚洲丁香久久久 | 97在线视频免费观看 | 日韩理论片在线 | 97av在线 | 日韩中文字幕在线 | 国产精品九九视频 | 国产精品1区2区在线观看 | 最近乱久中文字幕 | 免费精品国产 | 成人黄色一级视频 | 成人av网站在线观看 | 丁香视频在线观看 | 国产亚洲精品v | 999久久久久久久久久久 | 97国产超碰在线 | 五月天激情婷婷 | av成人动漫 | 伊人av综合 | 国产原创在线视频 | 久久国产精品99久久久久久丝袜 | 国产视频精品视频 | 国内精品久久久久久久久 | 免费看色的网站 | www.五月婷婷.com | 久久综合之合合综合久久 | 久久久国产影视 | 欧美精品免费视频 | 免费99视频 | 亚州av网站| 日本aaaa级毛片在线看 | 99精品在线看 | 日韩激情视频在线观看 | 黄色av电影在线观看 | 免费看日韩 | 在线亚洲免费视频 | 日韩在线观看小视频 | 国产在线理论片 | 久久99精品久久久久久秒播蜜臀 | 91看国产 | 91传媒视频在线观看 | 日韩免费一级a毛片在线播放一级 | 天天se天天cao天天干 | 男女视频91 | 欧美91精品| 五月婷婷中文网 | 日韩中文字幕免费视频 | 在线观看精品国产 | 天天摸夜夜操 | 少妇搡bbbb搡bbb搡忠贞 | 日韩夜夜爽 | 欧美日韩首页 | 久久久国产网站 | 久久精品日韩 | 国产在线成人 | 少妇搡bbbb搡bbb搡aa | 亚洲国产69 | 欧美日韩视频精品 | av在线播放国产 | 91九色视频在线 | 97视频久久久 | 欧美亚洲一级片 | 亚洲视频 一区 | 天天综合网入口 | 伊人婷婷久久 | 久久久久国产精品厨房 | 99视频在线看 | 成人黄在线 | 国产精品 视频 | 免费看黄在线 | 东方av在线免费观看 | 国产高清久久久久 | 亚洲精选99 | 日本久久久亚洲精品 | 麻豆传媒视频在线 | 国产91全国探花系列在线播放 | 日韩大片在线播放 | 激情综合六月 | 国产成人精品综合久久久久99 | 成人久久精品 | 97国产精品 | 成人在线视频网 | 91爱爱电影| 欧美午夜性生活 | av字幕在线 | 日韩欧美高清不卡 | 国产精品一区免费在线观看 | 国产黄a三级三级三级三级三级 | 天天操夜夜操夜夜操 | 黄a网站| 欧美aaaxxxx做受视频 | 久久国产精品99久久久久 | 91亚洲精品久久久蜜桃借种 | 亚洲精品国产自产拍在线观看 | 久久免费国产精品1 | 亚洲91中文字幕无线码三区 | 亚洲区精品 | 久久视频免费看 | 国产中文字幕精品 | 91爱爱电影 | 精品国产一区二区三区男人吃奶 | 免费高清av在线看 | 国产综合视频在线观看 | 国产免费观看高清完整版 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产韩国日本高清视频 | 成人黄色小说网 | 五月天婷婷狠狠 | 色在线免费观看 | 成人久久综合 | 久久狠狠一本精品综合网 | 亚洲精品在线观看中文字幕 | 欧美一级特黄aaaaaa大片在线观看 | 欧美激情另类文学 | 日韩av伦理片 | 免费成人在线观看视频 | 国产视频在线观看一区二区 | 91chinese在线 | 91av原创 | 日韩久久一区二区 | 最新国产精品亚洲 | 久久精品激情 | 日韩欧美区 | aa级黄色大片 | 丁香九月婷婷综合 | 婷婷av网| 91精品国产成人www | 日韩av免费一区 | 国产免费亚洲 | 国产资源网站 | 日韩网站中文字幕 | 国产精品99久久久久久久久久久久 | 中文字幕刺激在线 | av中文字幕免费在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 久久婷婷久久 | 91在线最新 | 久久一区二区免费视频 | 午夜精品影院 | 精品国产一区二区三区久久久蜜臀 | 久久久99精品免费观看 | 激情文学综合丁香 | 日韩精品一区电影 | 韩国av电影在线观看 | 97超碰在线人人 | 久久超碰97 | 久久深爱网 | 中文字幕在线中文 | 久草视频在线资源 | 成人v| 欧美一区二区三区在线 | 91漂亮少妇露脸在线播放 | 亚洲综合射 | 在线观看精品一区 | 噜噜色官网 | 中文字幕在线视频精品 | 久久综合激情 | 黄色成品视频 | 一区二区久久久久 | 国产女教师精品久久av | 日韩精品一卡 | 天天操夜夜操天天射 | 亚洲高清视频在线观看免费 | 中文字幕首页 | 综合久久2023 | 色欧美成人精品a∨在线观看 | 国产精品久久久久久久久蜜臀 | 亚洲在线视频免费观看 | 99re热精品视频 | 亚洲国产中文在线 | 亚洲视频免费在线看 | 色综合久久中文综合久久牛 | 欧美一级黄色网 | 免费久草视频 | 久草新在线 | 久久国产欧美日韩精品 | 天天操天天干天天玩 | 亚洲精品国偷拍自产在线观看 | 五月婷网站 | 国产.精品.日韩.另类.中文.在线.播放 | 国产综合视频在线观看 | 美女搞黄国产视频网站 | 日批视频国产 | 欧美日韩一区二区三区在线免费观看 | 日韩中文字幕免费电影 | 免费观看全黄做爰大片国产 | 综合网中文字幕 | 在线观看的av | 91精品蜜桃 | 91看成人| 91精品视频导航 | 久久只有精品 | 欧美久久久久久久久中文字幕 | 91伊人| 色com | 久久手机视频 | 天天天天天天天操 | 热99在线视频 | 免费国产在线精品 | 国产精品一区二区三区视频免费 | 狠狠色丁香婷婷 | 色婷婷狠狠18 | 一级一片免费视频 | 四虎影视成人永久免费观看视频 | 国产精品久久久久久久免费大片 | 久久婷婷色 | 久久久久久久久久久综合 | 97超碰在| 国产色妞影院wwwxxx | 在线观看91精品国产网站 | 天天艹 | 天天爽综合网 | 国产香蕉97碰碰久久人人 | 午夜12点 | 国产黄色免费观看 | 免费亚洲视频 | 日韩电影一区二区三区在线观看 | 夜夜操网 | 亚洲精品国精品久久99热 | 在线观看中文字幕 | 在线免费亚洲 | 国产91对白在线播 | 五月天久久激情 | 久久人人精品 | 亚洲精品高清视频在线观看 | 国产亚洲精品成人av久久ww | 成年人视频在线免费 | 久久 亚洲视频 | 久久久美女 | 中文字幕欧美日韩va免费视频 | www.国产在线观看 | 成年人天堂com | 69xxxx欧美 | 在线视频欧美日韩 | 在线免费观看麻豆视频 | 四虎永久精品在线 | 国产成人久久精品77777综合 | 热久久这里只有精品 | 欧美国产精品久久久久久免费 | 日韩二区三区在线 | 99热超碰 | 日本视频久久久 | 天天摸天天操天天爽 | 国产免费嫩草影院 | 97人人澡人人添人人爽超碰 | 日本精品一区二区 | 五月婷婷综合久久 | 在线国产不卡 | 亚洲精品在线观看av | 日日干美女 | 亚洲九九精品 | 午夜精品久久久久久久久久久久 | 成人免费观看网址 | 在线免费黄网站 | 精品国内自产拍在线观看视频 | 五月天激情综合网 | 久久精品毛片基地 | 色婷婷免费视频 | av免费电影在线观看 | 中文国产在线观看 | 337p日本欧洲亚洲大胆裸体艺术 | 成人免费xxxxxx视频 | 国产精品18久久久久久久久久久久 | 91视频在线免费 | 美女视频免费精品 | 国内小视频在线观看 | 婷婷综合影院 | 亚洲免费永久精品国产 | 国产精品免费久久久久影院仙踪林 | 国产超碰在线观看 | 福利一区二区三区四区 | 在线视频你懂 | 国产成人久久精品77777 | 久久久av电影 | 久久久麻豆精品一区二区 | 日韩一区二区三免费高清在线观看 | 亚洲婷婷综合色高清在线 | 国产成人精品综合久久久久99 | 国产精品一区二区无线 | 久久久免费精品视频 | 日韩黄色中文字幕 | 麻豆国产精品永久免费视频 | 免费一级日韩欧美性大片 | 欧美精品一级视频 | 日韩高清 一区 | 色综合中文综合网 | 日韩激情片在线观看 | 亚洲视频综合在线 | 可以免费观看的av片 | 午夜美女视频 | 国产麻豆视频网站 | 97精品久久人人爽人人爽 | 久久人人爽人人 | 四虎在线免费观看 | 免费又黄又爽视频 | 国产精品视频久久久 | 久久久久久网址 | 国产精品一区免费看8c0m | 精品1区2区| 欧美日韩免费在线视频 | 波多野结衣视频一区 | 日本黄色黄网站 | 成人在线免费视频 | 国产色婷婷精品综合在线手机播放 | 国产精品久久久久毛片大屁完整版 | 九九热精 | 欧美激情片在线观看 | 人人天天夜夜 | 久久国产品 | 天天插日日射 | 免费看在线看www777 | 亚洲视频在线观看免费 | 国产一级视频在线观看 | 超碰在线资源 | 国产成人精品999在线观看 | 最新av网址大全 | 中文字幕视频观看 | 欧美91片| 国产亚洲片 | 五月综合色婷婷 | 四虎影视成人精品 | 中文字幕在线观看第一区 | 久产久精国产品 | 91手机视频| 国产中文字幕在线免费观看 | 中文字幕资源网在线观看 | 国产 一区二区三区 在线 | 日韩特黄一级欧美毛片特黄 | 免费在线黄网 | 免费观看一区二区 | 久草在线手机观看 | 国内久久久 | 欧洲精品视频一区二区 | 日韩免费高清在线观看 | 菠萝菠萝在线精品视频 | 在线播放一区二区三区 | 国产精品美女视频网站 | 午夜视频不卡 | 深爱开心激情网 | 一区 二区 精品 | 亚州日韩中文字幕 | 99欧美视频| 国产免费三级在线观看 | 久久久电影网站 | 亚洲精品免费在线观看视频 | 日韩在线第一区 | 久草久草在线 | 国产在线视频一区二区三区 | www.国产毛片 | 精品一区二区三区四区在线 | 国产精品久久久久久久久久久久午夜片 | 中文字幕在线看视频国产中文版 | 国产69久久精品成人看 | 美女天天操 | 国产精品18p| 久久综合久久综合久久 | www.午夜 | 丁香六月综合网 | 久久草av| 亚洲成人av片 | 国产精品福利无圣光在线一区 | 国产精品第54页 | 国产精品v欧美精品v日韩 | 日韩精品一区二区三区在线视频 | 成人a免费 | 成人国产精品久久久 | 日韩精品在线播放 | 国产a视频免费观看 | 国产在线免费观看 | 国产在线一卡 | 欧美夫妻生活视频 | av网站免费线看精品 | 国产精品一区二区免费看 | 91精品国产乱码 | 久久国产香蕉视频 | 蜜臀精品久久久久久蜜臀 | 久久精品日产第一区二区三区乱码 | 成人xxxx| 欧美 日韩 国产 中文字幕 | 久草网站| 经典三级一区 | 成人免费毛片aaaaaa片 | 成人黄大片 | 国内视频在线 | 久久免费一级片 | 91精选在线观看 | 麻豆传媒视频在线播放 | 99免在线观看免费视频高清 | 国产九九九视频 | 国产精品免费一区二区 | 亚洲a成人v | 97视频总站 | 成年人国产在线观看 | 免费在线观看成人av | 在线观看片 | 91天天操| 精品一区欧美 |