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

一文帶你深入了解Redis復制技術及主從架構

開發 架構 Redis
主從架構可以說是互聯網必備的架構了,第一是為了保證服務的高可用,第二是為了實現讀寫分離,你可能熟悉我們常用的 MySQL 數據庫的主從架構,對于我們 redis 來說也不意外。

 [[283969]]

主從架構可以說是互聯網必備的架構了,第一是為了保證服務的高可用,第二是為了實現讀寫分離,你可能熟悉我們常用的 MySQL 數據庫的主從架構,對于我們 redis 來說也不意外,redis 數據庫也有各種各樣的主從架構方式,在主從架構中會涉及到主節點與從節點之間的數據同步,這個數據同步的過程在 redis 中叫做復制,這在篇文章中,我們詳細的聊一聊 redis 的復制技術和主從架構 ,本文主要有以下內容:

1.主從架構環境搭建

  • 主從架構的建立方式
  • 主從架構的斷開

2.復制技術的原理

  • 數據同步過程
  • 心跳檢測

3.主從拓撲架構

  • 一主一從
  • 一主多從
  • 樹狀結構

主從環境搭建

redis 的實例在默認的情況下都是主節點,所以我們需要修改一些配置來搭建主從架構,redis 的主從架構搭建還是比較簡單的,redis 提供了三種方式來搭建主從架構,在后面我們將就介紹,在介紹之前我們要先了解主從架構的特性:在主從架構中有一個主節點(master)和最少一個從節點(slave),并且數據復制是單向的,只能從主節點復制到從節點,不能由從節點到主節點。

主從架構的建立方式

主從架構的建立有以下三種方式:

  • 在 Redis.conf 配置文件中加入 slaveof {masterHost} {masterPort} 命令,隨 Redis 實例的啟動生效
  • 在 redis-server 啟動命令后加入 --slaveof {masterHost} {masterPort} 參數
  • 在 redis-cli 交互窗口下直接使用命令:slaveof {masterHost} {masterPort}

上面三種方式都可以搭建 Redis 主從架構,我們以第一種方式來演示,其他兩種方式自行嘗試,由于是演示,所以就在本地啟動兩個 Redis 實例,并不在多臺機器上啟動 redis 的實例了,我們準備一個端口 6379 的主節點實例,準備一個端口 6480 從節點的實例,端口 6480 的 redis 實例配置文件取名為 6480.conf 并且在里面添加 slaveof 語句,在配置文件最后加入如下一條語句。

  1. slaveof 127.0.0.1 6379 

分別啟動兩個 redis 實例,啟動之后他們會自動建立主從關系,關于這背后的原理,我們后面在詳細的聊一聊,先來驗證一下我們的主從架構是否搭建成功,我們先在 6379 master 節點上新增一條數據:

 

master 節點新增數據

然后再 6480 slave 節點上獲取該數據:

 

slave 節點獲取數據

可以看出我們在 slave 節點上已經成功的獲取到了在 master 節點新增的值,說明主從架構已經搭建成功了,我們使用 info replication 命令來查看兩個節點的信息,先來看看主節點的信息。

 

master info replication

可以看出 6379 端口的實例 role 為 master,有一個正在連接的實例,還有其他運行的信息,我們再來看看 6480 端口的 redis 實例信息。

 

slave info replication

可以看出兩個節點之間相互記錄著對象的信息,這些信息在數據復制時候將會用到。在這里有一點需要說明一下,默認情況下 slave 節點是只讀的,并不支持寫入,也不建議開啟寫入,我們可以驗證一下,在 6480 實例上寫入一條數據。

  1. 127.0.0.1:6480> set x 3 
  2. (error) READONLY You can't write against a read only replica. 
  3. 127.0.0.1:6480> 

提示只讀,并不支持寫入操作,當然我們也可以修改該配置,在配置文件中 replica-read-only yes 配置項就是用來控制從服務器只讀的,為什么只能只讀?因為我們知道復制是單向的,數據只能由 master 到 slave 節點,如果在 salve 節點上開啟寫入的話,那么修改了 slave 節點的數據, master 節點是感知不到的,slave 節點的數據并不能復制到 master 節點上,這樣就會造成數據不一致的情況,所以建議 slave 節點只讀。

主從架構的斷開

主從架構的斷開同樣是 slaveof 命令,在從節點上執行 slaveof no one 命令就可以與主節點斷開追隨關系,我們在 6480 節點上執行 slaveof no one 命令。

  1. 127.0.0.1:6480> slaveof no one 
  2. OK 
  3. 127.0.0.1:6480> info replication 
  4. # Replication 
  5. role:master 
  6. connected_slaves:0 
  7. master_replid:a54f3ba841c67762d6c1e33456c97b94c62f6ac0 
  8. master_replid2:e5c1ab2a68064690aebef4bd2bd4f3ddfba9cc27 
  9. master_repl_offset:4367 
  10. second_repl_offset:4368 
  11. repl_backlog_active:1 
  12. repl_backlog_size:1048576 
  13. repl_backlog_first_byte_offset:1 
  14. repl_backlog_histlen:4367 
  15. 127.0.0.1:6480> 

執行完 slaveof no one 命令之后,6480 節點的角色立馬恢復成了 master ,我們再來看看時候還和 6379 實例連接在一起,我們在 6379 節點上新增一個 key-value。

  1. 127.0.0.1:6379> set y 3 
  2. OK 

在 6480 節點上 get y

  1. 127.0.0.1:6480> get y 
  2. (nil) 
  3. 127.0.0.1:6480> 

在 6480 節點上獲取不到 y ,因為 6480 節點已經跟 6379 節點斷開的聯系,不存在主從關系了,slaveof 命令不僅能夠斷開連接,還能切換主服務器,使用命令為 slaveof {newMasterIp} {newMasterPort},我們讓 6379 成為 6480 的從節點, 在 6379 節點上執行 slaveof 127.0.0.1 6480 命令,我們在來看看 6379 的 info replication。

  1. 127.0.0.1:6379> info replication 
  2. # Replication 
  3. role:slave 
  4. master_host:127.0.0.1 
  5. master_port:6480 
  6. master_link_status:up 
  7. master_last_io_seconds_ago:2 
  8. master_sync_in_progress:0 
  9. slave_repl_offset:4367 
  10. slave_priority:100 
  11. slave_read_only:1 
  12. connected_slaves:0 
  13. master_replid:99624d4b402b5091552b9cb3dd9a793a3005e2ea 
  14. master_replid2:0000000000000000000000000000000000000000 
  15. master_repl_offset:4367 
  16. second_repl_offset:-1 
  17. repl_backlog_active:1 
  18. repl_backlog_size:1048576 
  19. repl_backlog_first_byte_offset:4368 
  20. repl_backlog_histlen:0 
  21. 127.0.0.1:6379> 

6379 節點的角色已經是 slave 了,并且主節點的是 6480 ,我們可以再看看 6480 節點的 info replication。

  1. 127.0.0.1:6480> info replication 
  2. # Replication 
  3. role:master 
  4. connected_slaves:1 
  5. slave0:ip=127.0.0.1,port=6379,state=online,offset=4479,lag=1 
  6. master_replid:99624d4b402b5091552b9cb3dd9a793a3005e2ea 
  7. master_replid2:a54f3ba841c67762d6c1e33456c97b94c62f6ac0 
  8. master_repl_offset:4479 
  9. second_repl_offset:4368 
  10. repl_backlog_active:1 
  11. repl_backlog_size:1048576 
  12. repl_backlog_first_byte_offset:1 
  13. repl_backlog_histlen:4479 
  14. 127.0.0.1:6480> 

在 6480 節點上有 6379 從節點的信息,可以看出 slaveof 命令已經幫我們完成了主服務器的切換。

復制技術的原理

redis 的主從架構好像很簡單一樣,我們就執行了一條命令就成功搭建了主從架構,并且數據復制也沒有問題,使用起來確實簡單,但是這背后 redis 還是幫我們做了很多的事情,比如主從服務器之間的數據同步、主從服務器的狀態檢測等,這背后 redis 是如何實現的呢?接下來我們就一起看看。

數據復制原理

我們執行完 slaveof 命令之后,我們的主從關系就建立好了,在這個過程中, master 服務器與 slave 服務器之間需要經歷多個步驟,如下圖所示:

 

redis 復制原理

slaveof 命令背后,主從服務器大致經歷了七步,其中權限驗證這一步不是必須的,為了能夠更好的理解這些步驟,就以我們上面搭建的 redis 實例為例來詳細聊一聊各步驟。

1、保存主節點信息

在 6480 的客戶端向 6480 節點服務器發送 slaveof 127.0.0.1 6379 命令時,我們會立馬得到一個 OK。

  1. 127.0.0.1:6480> slaveof 127.0.0.1 6379 
  2. OK 
  3. 127.0.0.1:6480> 

這時候數據復制工作并沒有開始,數據復制工作是在返回 OK 之后才開始執行的,這時候 6480 從節點做的事情是將給定的主服務器 IP 地址 127.0.0.1 以及端口 6379 保存到服務器狀態的 masterhost 屬性和 masterport 屬性里面。

2、建立 socket 連接

在 slaveof 命令執行完之后,從服務器會根據命令設置的 IP 地址和端口,跟主服務器創建套接字連接, 如果從服務器能夠跟主服務器成功的建立 socket 連接,那么從服務器將會為這個 socket 關聯一個專門用于處理復制工作的文件事件處理器,這個處理器將負責后續的復制工作,比如接受全量復制的 RDB 文件以及服務器傳來的寫命令。同樣主服務器在接受從服務器的 socket 連接之后,將為該 socket 創建一個客戶端狀態,這時候的從服務器同時具有服務器和客戶端兩個身份,從服務器可以向主服務器發送命令請求而主服務器則會向從服務器返回命令回復。

3、發送 ping 命令

從服務器與主服務器連接成功后,做的第一件事情就是向主服務器發送一個 ping 命令,發送 ping 命令主要有以下目的:

  • 檢測主從之間網絡套接字是否可用
  • 檢測主節點當前是否可接受處理命令

在發送 ping 命令之后,正常情況下主服務器會返回 pong 命令,接受到主服務器返回的 pong 回復之后就會進行下一步工作,如果沒有收到主節點的 pong 回復或者超時,比如網絡超時或者主節點正在阻塞無法響應命令,從服務器會斷開復制連接,等待下一次定時任務的調度。

4、身份驗證

從服務器在接收到主服務器返回的 pong 回復之后,下一步要做的事情就是根據配置信息決定是否需要身份驗證:

  • 如果從服務器設置了 masterauth 參數,則進行身份驗證
  • 如果從服務器沒有設置 masterauth 參數,則不進行身份驗證

在需要身份驗證的情況下,從服務器將就向主服務器發送一條 auth 命令,命令參數為從服務器 masterauth 選項的值,舉個例子,如果從服務器的配置里將 masterauth 參數設置為:123456,那么從服務器將向主服務器發送 auth 123456 命令,身份驗證的過程也不是一帆風順的,可能會遇到以下幾種情況:

  • 從服務器通過 auth 命令發送的密碼與主服務器的 requirepass 參數值一致,那么將繼續進行后續操作,如果密碼不一致,主服務將返回一個 invalid password 錯誤
  • 如果主服務器沒有設置 requirepass 參數,那么主服務器將返回一個 no password is set 錯誤

所有的錯誤情況都會令從服務器中止當前的復制工作,并且要從建立 socket 開始重新發起復制流程,直到身份驗證通過或者從服務器放棄執行復制為止。

5、發送端口信息

在身份驗證通過后,從服務器將執行 REPLCONF listening命令,向主服務器發送從服務器的監聽端口號,例如在我們的例子中從服務器監聽的端口為 6480,那么從服務器將向主服務器發送 REPLCONF listening 6480 命令,主服務器接收到這個命令之后,會將端口號記錄在從服務器所對應的客戶端狀態的 slave_listening_port 屬性了,也就是我們在 master 服務器的 info replication 里面看到的 port 值。

6、數據復制

數據復制是最復雜的一塊了,由 psync 命令來完成,從服務器會向主服務器發送一個 psync 命令來進行數據同步,在 redis 2.8 版本以前使用的是 sync 命令,除了命令不同之外,在復制的方式上也有很大的不同,在 redis 2.8 版本以前使用的都是全量復制,這對主節點和網絡會造成很大的開銷,在 redis 2.8 版本以后,數據同步將分為全量同步和部分同步。

  • 全量復制:一般用于初次復制場景,不管是新舊版本的 redis 在從服務器第一次與主服務連接時都將進行一次全量復制,它會把主節點的全部數據一次性發給從節點,當數據較大時,會對主節點和網絡造成很大的開銷,redis 的早期版本只支持全量復制,這不是一種高效的數據復制方式
  • 部分復制:用于處理在主從復制中因網絡閃斷等原因造成的數據丟失 場景,當從節點再次連上主節點后,如果條件允許,主節點會補發丟失數據 給從節點。因為補發的數據遠遠小于全量數據,可以有效避免全量復制的過高開銷,部分復制是對老版復制的重大優化,有效避免了不必要的全量復制操作

redis 之所以能夠支持全量復制和部分復制,主要是對 sync 命令的優化,在 redis 2.8 版本以后使用的是一個全新的 psync 命令,命令格式為:psync {runId} {offset},這兩個參數的意義:

  • runId:主節點運行的id
  • offset:當前從節點復制的數據偏移量

也許你對上面的 runid、offset 比較陌生,沒關系,我們先來看看下面三個概念:

1、復制偏移量

參與復制的主從節點都會分別維護自身復制偏移量:主服務器每次向從服務器傳播 N 個字節的數據時,就將自己的偏移量的值加上 N,從服務器每次接收到主服務器傳播的 N個字節的數據時,將自己的偏移量值加上 N。通過對比主從服務器的復制偏移量,就可以知道主從服務器的數據是否一致,如果主從服務器的偏移量總是相同,那么主從數據一致,相反,如果主從服務器兩個的偏移量并不相同,那么說明主從服務器并未處于數據一致的狀態,比如在有多個從服務器時,在傳輸的過程中某一個服務器離線了,如下圖所示:

 

offset 不一致

由于從服務器A 在數據傳輸時,由于網絡原因掉線了,導致偏移量與主服務器不一致,那么當從服務器A 重啟并且與主服務器連接成功后,重新向主服務器發送 psync 命令,這時候數據復制應該執行全量復制還是部分復制呢?如果執行部分復制,主服務器又如何補償從服務器A 在斷線期間丟失的那部分數據呢?這些問題的答案都在復制積壓緩沖區里面。

2、復制積壓緩沖區

復制積壓緩沖區是保存在主節點上的一個固定長度的隊列,默認大小為 1MB,當主節點有連接的從節點(slave)時被創建,這時主節點(master) 響應寫命令時,不但會把命令發送給從節點,還會寫入復制積壓緩沖區,如下圖所示:

復制積壓緩沖區

因此,主服務器的復制積壓緩沖區里面會保存著一部分最近傳播的寫命令,并且復制積壓緩沖區會為隊列中的每個字節記錄相應的復制偏移量。所以當從服務器重新連上主服務器時,從服務器通過 psync 命令將自己的復制偏移量 offset 發送給主服務器,主服務器會根據這個復制偏移量來決定對從服務器執行何種數據同步操作:

  • 如果從服務器的復制偏移量之后的數據仍然存在于復制積壓緩沖區里面,那么主服務器將對從服務器執行部分復制操作
  • 如果從服務器的復制偏移量之后的數據不存在于復制積壓緩沖區里面,那么主服務器將對從服務器執行全量復制操作

3、服務器運行ID

每個 Redis 節點啟動后都會動態分配一個 40 位的十六進制字符串作為運行 ID,運行 ID 的主要作用是用來唯一識別 Redis 節點,我們可以使用 info server 命令來查看

  1. 127.0.0.1:6379> info server 
  2. # Server 
  3. redis_version:5.0.5 
  4. redis_git_sha1:00000000 
  5. redis_git_dirty:0 
  6. redis_build_id:2ef1d58592147923 
  7. redis_mode:standalone 
  8. os:Linux 3.10.0-957.27.2.el7.x86_64 x86_64 
  9. arch_bits:64 
  10. multiplexing_api:epoll 
  11. atomicvar_api:atomic-builtin 
  12. gcc_version:4.8.5 
  13. process_id:25214 
  14. run_id:7b987673dfb4dfc10dd8d65b9a198e239d20d2b1 
  15. tcp_port:6379 
  16. uptime_in_seconds:14382 
  17. uptime_in_days:0 
  18. hz:10 
  19. configured_hz:10 
  20. lru_clock:14554933 
  21. executable:/usr/local/redis-5.0.5/src/./redis-server 
  22. config_file:/usr/local/redis-5.0.5/redis.conf 
  23. 127.0.0.1:6379> 

這里面有一個run_id 字段就是服務器運行的ID

了解這幾個概念之后,我們一起來看看 psync 命令的運行流程,psync 命令運行流程如下圖所示:

 

psync 運行流程

psync 命令的邏輯比較簡單,整個流程分為兩步:

1、從節點發送 psync 命令給主節點,參數 runId 是當前從節點保存的主節點運行ID,參數offset是當前從節點保存的復制偏移量,如果是第一次參與復制則默認值為 -1。

2、主節點接收到 psync 命令之后,會向從服務器返回以下三種回復中的一種:

  • 回復 +FULLRESYNC {runId} {offset}:表示主服務器將與從服務器執行一次全量復制操作,其中 runid 是這個主服務器的運行 id,從服務器會保存這個id,在下一次發送 psync 命令時使用,而 offset 則是主服務器當前的復制偏移量,從服務器會將這個值作為自己的初始化偏移量
  • 回復 +CONTINUE:那么表示主服務器與從服務器將執行部分復制操作,從服務器只要等著主服務器將自己缺少的那部分數據發送過來就可以了
  • 回復 +ERR:那么表示主服務器的版本低于 redis 2.8,它識別不了 psync 命令,從服務器將向主服務器發送 sync 命令,并與主服務器執行全量復制

7、命令持續復制

當主節點把當前的數據同步給從節點后,便完成了復制的建立流程。但是主從服務器并不會斷開連接,因為接下來主節點會持續地把寫命令發送給從節點,保證主從數據一致性。

經過上面 7 步就完成了主從服務器之間的數據同步,由于這篇文章的篇幅比較長,關于全量復制和部分復制的細節就不介紹了,全量復制就是將主節點的當前的數據生產 RDB 文件,發送給從服務器,從服務器再從本地磁盤加載,這樣當文件過大時就需要特別大的網絡開銷,不然由于數據傳輸比較慢會導致主從數據延時較大,部分復制就是主服務器將復制積壓緩沖區的寫命令直接發送給從服務器。

心跳檢測

心跳檢測是發生在主從節點在建立復制后,它們之間維護著長連接并彼此發送心跳命令,便以后續持續發送寫命令,主從心跳檢測如下圖所示:

 

主從心跳檢測

主從節點彼此都有心跳檢測機制,各自模擬成對方的客戶端進行通信,主從心跳檢測的規則如下:

  • 主節點默認每隔 10 秒對從節點發送 ping 命令,判斷從節點的存活性和連接狀態。可通過修改 redis.conf 配置文件里面的 repl-ping-replica-period 參數來控制發送頻率
  • 從節點在主線程中每隔 1 秒發送 replconf ack {offset} 命令,給主節點 上報自身當前的復制偏移量,這條命令除了檢測主從節點網絡之外,還通過發送復制偏移量來保證主從的數據一致

主節點根據 replconf 命令判斷從節點超時時間,體現在 info replication 統 計中的 lag 信息中,我們在主服務器上執行 info replication 命令:

  1. 127.0.0.1:6379> info replication 
  2. # Replication 
  3. role:master 
  4. connected_slaves:1 
  5. slave0:ip=127.0.0.1,port=6480,state=online,offset=25774,lag=0 
  6. master_replid:c62b6621e3acac55d122556a94f92d8679d93ea0 
  7. master_replid2:0000000000000000000000000000000000000000 
  8. master_repl_offset:25774 
  9. second_repl_offset:-1 
  10. repl_backlog_active:1 
  11. repl_backlog_size:1048576 
  12. repl_backlog_first_byte_offset:1 
  13. repl_backlog_histlen:25774 
  14. 127.0.0.1:6379> 

可以看出 slave0 字段的值最后面有一個 lag,lag 表示與從節點最后一次通信延遲的秒數,正常延遲應該在 0 和 1 之間。如果超過 repl-timeout 配置的值(默認60秒),則判定從節點下線并斷開復制客戶端連接,如果從節點重新恢復,心跳檢測會繼續進行。

主從拓撲架構

Redis 的主從拓撲結構可以支持單層或多層復制關系,根據拓撲復雜性可以分為以下三種:一主一從、一主多從、樹狀主從架構。

一主一從結構

一主一從結構是最簡單的復制拓撲結構,我們前面搭建的就是一主一從的架構,架構如圖所示:

 

一主一從架構

一主一從架構

用于主節點出現宕機時從節點 提供故障轉移支持,當應用寫命令并發量較高且需要持久化時,可以只在從節點上開啟 AOF,這樣既保證數據安全性同時也避免了持久化對主節點的性能干擾。但是這里有一個坑,需要你注意,就是當主節點關閉持久化功能時, 如果主節點脫機要避免自動重啟操作。因為主節點之前沒有開啟持久化功能自動重啟后數據集為空,這時從節點如果繼續復制主節點會導致從節點數據也被清空的情況,喪失了持久化的意義。安全的做法是在從節點上執行 slaveof no one 斷開與主節點的復制關系,再重啟主節點從而避免這一問題。

一主多從架構一主多從架構又稱為星形拓撲結構,一主多從架構如下圖所示:

 

一主多從架構

一主多從架構可以實現讀寫分離來減輕主服務器的壓力,對于讀占比較大的場景,可以把讀命令發送到 從節點來分擔主節點壓力。同時在日常開發中如果需要執行一些比較耗時的讀命令,如:keys、sort等,可以在其中一臺從節點上執行,防止慢查詢對主節點造成阻塞從而影響線上服務的穩定性。對于寫并發量較高的場景,多個從節點會導致主節點寫命令的多次發送從而過度消耗網絡帶寬,同時也加重了主節點的負載影響服務穩定性。

樹狀主從架構

樹狀主從架構又稱為樹狀拓撲架構,樹狀主從架構如下圖所示:

 

樹狀主從架構

樹狀主從架構使得從節點不但可以復制主節 數據,同時可以作為其他從節點的主節點繼續向下層復制。解決了一主多從架構中的不足,通過引入復制中 間層,可以有效降低主節點負載和需要傳送給從節點的數據量。如架構圖中,數據寫入節點A 后會同步到 B 和 C節點,B節點再把數據同步到 D 和 E節點,數據實現了一層一層的向下復制。當主節點需要掛載多個從節點時為了避免對主節點的性能干擾,可以采用樹狀主從結構降低主節點壓力。

 

責任編輯:華軒 來源: 平頭哥的技術博文
相關推薦

2021-01-27 11:10:49

JVM性能調優

2019-11-20 10:07:07

Redis數據系統

2019-07-09 08:29:51

TCPIP協議

2018-04-25 10:13:30

Redis內存模型

2021-01-12 09:03:17

MySQL復制半同步

2023-11-20 08:18:49

Netty服務器

2022-11-11 19:09:13

架構

2023-11-06 08:16:19

APM系統運維

2021-01-11 14:45:35

Redis數據庫命令

2023-10-27 08:15:45

2023-11-08 08:15:48

服務監控Zipkin

2022-02-24 07:34:10

SSL協議加密

2020-11-06 16:50:43

工具GitLab CICD

2018-06-07 15:56:26

移動開發iOSAndroid

2022-12-20 07:39:46

2018-09-04 16:20:46

MySQ索引數據結構

2020-02-02 15:14:24

HTTP黑科技前端

2022-04-28 09:22:46

Vue灰度發布代碼

2020-10-08 14:32:57

大數據工具技術

2025-09-12 16:31:04

TiDBMCP ServerAI工具
點贊
收藏

51CTO技術棧公眾號

92国产精品久久久久首页| 日韩中文字幕在线看| 国产极品粉嫩福利姬萌白酱 | 爽好久久久欧美精品| 亚洲最新视频在线| 色悠悠在线视频| 欧亚一区二区| 亚洲欧美日韩小说| 久久福利电影| 在线观看亚洲一区二区| 欧美女人交a| 亚洲美腿欧美偷拍| 91国产美女视频| 中文字幕无码精品亚洲资源网久久| www.久久精品.com| 久久九九电影| 欧美美最猛性xxxxxx| 91精品人妻一区二区| 50度灰在线| 国产乱码精品一品二品| 欧美精品在线免费播放| 亚洲一级黄色录像| 欧美日韩一区二区三区在线电影| 91精品国产91久久久久久一区二区| 一本一道久久a久久精品综合 | 99这里只有精品| 成人黄色在线播放| 中文字幕一区在线播放| 欧美日韩一卡| 久久精品国产99国产精品澳门| 黄色性生活一级片| av成人app永久免费| 91精品国产综合久久国产大片| 久久综合久久色| 福利在线免费视频| 亚洲一区二区美女| 中文字幕乱码免费| 日本www在线观看视频| 久久精品日韩一区二区三区| 久久香蕉综合色| 蜜桃av中文字幕| 国产在线国偷精品免费看| 成人有码在线播放| 91麻豆成人精品国产| 麻豆成人久久精品二区三区红| 国产成人精品免费视频| 日日夜夜狠狠操| 久久午夜精品一区二区| 国模吧一区二区| 国产午夜福利一区二区| 亚洲国产一区二区三区a毛片| 欧美大奶子在线| 麻豆成人在线视频| 尤物网精品视频| 97精品视频在线观看| 日产电影一区二区三区| 99精品欧美| 欧美在线影院在线视频| 无码人妻精品一区二区| 日韩va亚洲va欧美va久久| 国产精品久久久久久久久久小说| 国产91av在线播放| 日本va欧美va精品发布| 国产精品福利在线| 在线免费观看一级片| 韩国精品久久久| 97av自拍| 偷拍自拍在线| 国产日韩欧美电影| 天堂av免费看| 9999在线视频| 在线观看国产91| 女人高潮一级片| 亚洲成人黄色| 精品亚洲精品福利线在观看| 一区二区黄色片| 偷拍欧美精品| 久久久久日韩精品久久久男男| 全部毛片永久免费看| 日精品一区二区三区| 成人欧美一区二区三区黑人孕妇 | 在线精品国产欧美| 乱h高h女3p含苞待放| 亚洲人成免费| 国产精品视频最多的网站| a天堂视频在线| 99精品视频在线观看免费| 日韩高清三级| 日本色护士高潮视频在线观看| 福利一区视频在线观看| 思思久久精品视频| 欧美黄色网视频| www.日韩av.com| 在线观看日韩中文字幕| 另类的小说在线视频另类成人小视频在线 | 免费cad大片在线观看| 欧美日韩国产观看视频| 欧美人xxxx| 女同性恋一区二区三区| 天堂在线中文| 台湾亚洲精品一区二区tv| 国产一区二区精品丝袜| 精品一区在线视频| 看电视剧不卡顿的网站| 国内视频一区| yellow91字幕网在线| 一本大道久久a久久综合| 99热这里只有精品2| 精品久久一区| 韩国精品久久久999| 国产精品怡红院| 国产亚洲人成网站| 欧美不卡在线播放| 国产精品xnxxcom| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品国产精品国自| 亚洲人体偷拍| caoporen国产精品| 老司机午夜在线| 91福利在线观看| av无码一区二区三区| 欧美成人一品| 国产一区二区丝袜| av在线电影播放| 欧美性生活大片免费观看网址| 农村末发育av片一区二区| 91综合在线| 国产精品第七影院| 久草在现在线| 欧美视频在线看| 亚洲男人在线天堂| 亚洲黄色av| 成人看片视频| 色噜噜狠狠狠综合欧洲色8| 3751色影院一区二区三区| 日韩免费成人av| 日本亚洲免费观看| 日韩在线电影一区| 国产一区一一区高清不卡| 亚洲男人天堂九九视频| 免费看日批视频| 久久午夜色播影院免费高清| 久久9精品区-无套内射无码| 午夜精品福利影院| 欧美孕妇孕交黑巨大网站| 手机亚洲第一页| 色综合天天综合在线视频| 在线免费观看成年人视频| av不卡免费看| 欧美日韩精品中文字幕一区二区| 在线看片国产福利你懂的| 亚洲免费av电影| 精品国产xxx| 国产日韩成人精品| 欧美wwwwwww| 亚洲最新av| 成人免费视频网站| 在线免费av资源| 一区二区欧美久久| 国产精品国产三级国产aⅴ| 一区二区三区自拍| 国模私拍在线观看| 六月丁香综合| 特级毛片在线免费观看| 亚洲超碰在线观看| 琪琪第一精品导航| 亚洲精品传媒| 欧美刺激脚交jootjob| 久草国产精品视频| 久久精品人人做人人综合| 一道本视频在线观看| 欧美另类专区| 欧美日韩中文国产一区发布| 亚洲欧美一级| 久久久欧美精品| 国产乱子伦三级在线播放| 在线成人午夜影院| 亚州国产精品视频| 欧美国产欧美亚州国产日韩mv天天看完整| www.久久91| 最新国产乱人伦偷精品免费网站| 欧美日韩成人一区二区三区| 成人在线视频区| 午夜精品久久久久久久白皮肤 | 久久久久九九精品影院| 国内精品一区二区三区| av在线电影观看| 精品国产乱子伦一区| 亚洲大尺度在线观看| 亚洲美女在线一区| 人妻少妇无码精品视频区| 国产乱人伦偷精品视频免下载| 国产成人无码a区在线观看视频| 日韩激情一区| 国产在线精品日韩| 成人国产精选| 97色在线视频观看| 国产欧美久久久久久久久| 亚洲免费av网址| 亚洲第一大网站| 欧美午夜精品理论片a级按摩| 日韩免费一二三区| 亚洲欧洲99久久| 亚洲熟妇一区二区三区| 成人在线视频首页| 911av视频| 日本女优在线视频一区二区| 和岳每晚弄的高潮嗷嗷叫视频| 国产精品福利在线观看播放| 免费久久久一本精品久久区| 99亚洲乱人伦aⅴ精品| 国产狼人综合免费视频| 北岛玲heyzo一区二区| 欧美巨乳在线观看| 超碰在线免费播放| 色噜噜国产精品视频一区二区| 香蕉视频黄色片| 亚洲成年人在线| 国产女同91疯狂高潮互磨| 欧美日韩专区在线| 亚洲国产精品无码av| 精品人妻一区二区三区日产乱码| 亚洲成人777| 久久综合激情网| 亚洲欧美色图小说| 中文国语毛片高清视频| 日本一区二区动态图| 国产老熟女伦老熟妇露脸| 成人精品gif动图一区| 性xxxxxxxxx| 国产精品一区一区三区| 亚洲欧美天堂在线| 久久国产精品色婷婷| 一区二区三区视频在线观看免费| 久久国产一二区| 久久网站免费视频| 蘑菇福利视频一区播放| 一区二区传媒有限公司| 亚洲一区免费| 欧美性大战久久久久xxx| 夜夜嗨一区二区三区| 波多野结衣50连登视频| 国产日韩亚洲| 国产偷人视频免费| 久久久久国产精品午夜一区| 黑森林福利视频导航| 久久成人在线| 99免费视频观看| 日韩福利视频导航| 国产又大又黄又猛| 久久99九九99精品| 日本中文字幕在线不卡| 国产99久久久国产精品免费看| 在线观看欧美一区二区| 不卡一区二区三区四区| 日本xxx在线播放| 日本一区二区三级电影在线观看 | 第一福利在线| 最近2019中文字幕第三页视频| 日韩精品毛片| 欧美理论电影在线播放| 成av人片在线观看www| 日本午夜精品理论片a级appf发布| 欧美free嫩15| 成人精品在线观看| 中文字幕一区二区三区日韩精品| 国产精品区免费视频| 中文字幕中文字幕精品| 一区二区av| 欧美日韩视频| 久久久噜噜噜www成人网| 麻豆精品在线视频| 在线观看一区二区三区视频| 久久影院午夜片一区| 免费成人深夜蜜桃视频| 洋洋av久久久久久久一区| 五月天激情国产综合婷婷婷| 精品视频全国免费看| 性做久久久久久久| 亚洲人精品午夜在线观看| 成人日日夜夜| 欧美综合国产精品久久丁香| 欧美亚洲黄色| 精品久久蜜桃| 亚洲欧美在线专区| 男人亚洲天堂网| 国产成人免费av在线| 加勒比一区二区| 亚洲激情欧美激情| 加勒比在线一区| 欧美mv和日韩mv国产网站| 国产色a在线| 性色av一区二区咪爱| 日本久久二区| 久久亚洲高清| 欧美日韩第一区| 性欧美极品xxxx欧美一区二区| 成人性生交大片| 九九这里只有精品视频| 欧美日韩在线视频一区| 国产高清第一页| 伊人亚洲福利一区二区三区| 波多野结衣在线播放| 成人久久一区二区| 精品99在线| 老太脱裤子让老头玩xxxxx| 国产毛片精品视频| 萌白酱视频在线| 色婷婷一区二区| 天天操天天爱天天干| 超碰精品一区二区三区乱码 | 92国产精品久久久久首页| 啄木系列成人av电影| 国产免费一区二区视频| 激情欧美一区二区三区在线观看| 美女爆乳18禁www久久久久久 | 99在线无码精品入口| 最近2019中文免费高清视频观看www99| 涩涩av在线| 国产在线精品一区二区三区| 欧美国内亚洲| 久久久精品视频国产| 国产精品第四页| 欧美国产一级片| 亚洲色无码播放| 亚洲电影观看| 精品国产一区二区三区四区vr| 欧美日本国产| 成年人性生活视频| 自拍偷拍欧美精品| 国产精品乱码久久久| 色婷婷av一区二区三区久久| 成人看片网页| 日本最新一区二区三区视频观看| 久久aⅴ乱码一区二区三区| 亚洲一区二区三区四区五区六区| 亚洲第一福利视频在线| 黄色一级大片在线免费看国产一| 欧美精品亚州精品| 盗摄系列偷拍视频精品tp| 狠狠干视频网站| 国产成人av电影在线观看| 免费人成年激情视频在线观看| 欧美精品 国产精品| 久操视频在线观看| 亚洲一区亚洲二区| av中文字幕一区二区三区| 欧美日韩在线综合| aaa日本高清在线播放免费观看| 国产精品久久久久久久久影视| 青青草综合网| 一二三级黄色片| 亚洲国产精品一区二区久久| 香蕉视频成人在线| 国产精品国产三级国产aⅴ浪潮| 日韩大片在线播放| 国产探花在线观看视频| 夜夜嗨av一区二区三区| 十九岁完整版在线观看好看云免费| 97超级碰碰碰久久久| 欧美美女在线| 亚洲一区二区福利视频| 一区二区三区美女视频| 天天爱天天干天天操| 国产精品成人播放| 天天揉久久久久亚洲精品| 久久久无码人妻精品无码| 国产91在线精品| 免费的国产精品| 精品国产一区二区三区麻豆免费观看完整版 | 精精国产xxxx视频在线野外| 免费精品视频一区二区三区| 麻豆精品新av中文字幕| 久久久久久久久久网站| 亚洲国产精品久久久久久| 成人啊v在线| 国产日韩欧美大片| 91丝袜美腿高跟国产极品老师| 91丨九色丨海角社区| 久热精品视频在线观看| 国语一区二区三区| 亚洲一区在线不卡| 亚洲一区免费在线观看| 韩国免费在线视频| 91蜜桃网站免费观看| 日韩影院免费视频| 免费无遮挡无码永久在线观看视频| 精品亚洲一区二区三区在线观看| 另类一区二区三区| 日韩精品 欧美| 亚洲欧美国产毛片在线| 日本韩国一区| 3d动漫啪啪精品一区二区免费 | 成人美女av在线直播| 一区二区毛片| 欧美三级黄色大片| 亚洲老司机av| 粉嫩av一区二区| 国产日韩欧美久久| 欧美丝袜美女中出在线|