国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

實現故障恢復自動化:詳解Redis哨兵技術

數據庫 其他數據庫 自動化 Redis
本文將要介紹的哨兵,它基于Redis主從復制,主要作用便是解決主節點故障恢復的自動化問題,進一步提高系統的高可用性。

實現故障恢復自動化:詳解Redis哨兵技術

在前面分享的《讀完這篇文章,就基本搞定了Redis主從復制》中我們曾提到,Redis主從復制的作用有數據熱備、負載均衡、故障恢復等;但主從復制存在的一個問題是故障恢復無法自動化。本文將要介紹的哨兵,它基于Redis主從復制,主要作用便是解決主節點故障恢復的自動化問題,進一步提高系統的高可用性。

注:本文內容基于Redis 3.0版本。

一、作用和架構

1.作用

在介紹哨兵之前,首先從宏觀角度回顧一下Redis實現高可用相關的技術。它們包括:持久化、復制、哨兵和集群,其主要作用和解決的問題是:

  • 持久化:持久化是最簡單的高可用方法(有時甚至不被歸為高可用的手段),主要作用是數據備份,即將數據存儲在硬盤,保證數據不會因進程退出而丟失。

  • 復制:復制是高可用Redis的基礎,哨兵和集群都是在復制基礎上實現高可用的。復制主要實現了數據的多機備份,以及對于讀操作的負載均衡和簡單的故障恢復。缺陷是故障恢復無法自動化;寫操作無法負載均衡;存儲能力受到單機的限制。

  • 哨兵:在復制的基礎上,哨兵實現了自動化的故障恢復。缺陷是寫操作無法負載均衡;存儲能力受到單機的限制。

  • 集群:通過集群,Redis解決了寫操作無法負載均衡,以及存儲能力受到單機限制的問題,實現了較為完善的高可用方案。

詳細內容可回顧:

下面說回哨兵。

Redis Sentinel,即Redis哨兵,在Redis 2.8版本開始引入。哨兵的核心功能是主節點的自動故障轉移。下面是Redis官方文檔對于哨兵功能的描述:

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

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

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

  • 通知(Notification):哨兵可以將故障轉移的結果發送給客戶端。

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

這里對“客戶端”一詞在文章中的用法做一個說明:在前面的文章中,只要通過API訪問Redis服務器,都會稱作客戶端,包括Redis-cli、Java客戶端Jedis等。為了便于區分說明,本文中的客戶端并不包括Redis-cli,而是比Redis-cli更加復雜:Redis-cli使用的是Redis提供的底層接口,而客戶端則對這些接口、功能進行了封裝,以便充分利用哨兵的配置提供者和通知功能。

2.架構

典型的哨兵架構圖如下所示:

實現故障恢復自動化:詳解Redis哨兵技術

它由兩部分組成:

  • 哨兵節點:哨兵系統由一個或多個哨兵節點組成,哨兵節點是特殊的Redis節點,不存儲數據。

  • 數據節點:主節點和從節點都是數據節點。

二、部署

這一部分將部署一個簡單的哨兵系統,包含1個主節點、2個從節點和3個哨兵節點。方便起見,所有這些節點都部署在一臺機器上(局域網IP:192.168.92.128),使用端口號區分;且節點的配置盡可能簡化。

1.部署主從節點

哨兵系統中的主從節點,與普通的主從節點配置是一樣的,并不需要做任何額外配置。下面分別是主節點(port=6379)和2個從節點(port=6380/6381)的配置文件,配置都比較簡單,不再詳述:

 

  1. #redis-6379.conf  
  2. port 6379  
  3. daemonize yes  
  4. logfile "6379.log"  
  5. dbfilename "dump-6379.rdb"  
  6. #redis-6380.conf  
  7. port 6380  
  8. daemonize yes  
  9. logfile "6380.log"  
  10. dbfilename "dump-6380.rdb"  
  11. slaveof 192.168.92.128 6379  
  12. #redis-6381.conf  
  13. port 6381  
  14. daemonize yes  
  15. logfile "6381.log"  
  16. dbfilename "dump-6381.rdb"  
  17. slaveof 192.168.92.128 6379 

 

配置完成后,依次啟動主節點和從節點:

  • redis-server redis-6379.conf
  • redis-server redis-6380.conf
  • redis-server redis-6381.conf

節點啟動后,連接主節點查看主從狀態是否正常,如下圖所示:

實現故障恢復自動化:詳解Redis哨兵技術

2.部署哨兵節點

哨兵節點本質上是特殊的Redis節點。

3個哨兵節點的配置幾乎是完全一樣的,主要區別在于端口號的不同(26379 / 26380 / 263 81),下面以26379節點為例介紹節點的配置和啟動方式;配置部分盡量簡化,更多配置會在后面介紹:

 

  1. #sentinel-26379.conf  
  2. port 26379  
  3. daemonize yes  
  4. logfile "26379.log"  
  5. sentinel monitor mymaster 192.168.92.128 6379 2 

 

其中,sentinel monitor mymaster 192.168. 92.128 6379 2配置的含義是:該哨兵節點監控192.168.92.128:6379這個主節點,該主節點的名稱是mymaster,***的2的含義與主節點的故障判定有關:至少需要2個哨兵節點同意,才能判定主節點故障并進行故障轉移。

哨兵節點的啟動有兩種方式,二者作用是完全相同的:

  • redis-sentinel sentinel-26379.conf
  • redis-server sentinel-26379.conf --sentinel

按照上述方式配置和啟動之后,整個哨兵系統就啟動完畢了。可以通過Redis-cli連接哨兵節點進行驗證,如下圖所示:可以看出26379哨兵節點已經在監控mymaster主節點(即192.168.92.128:6379),并發現了其2個從節點和另外2個哨兵節點。

實現故障恢復自動化:詳解Redis哨兵技術

此時如果查看哨兵節點的配置文件,會發現一些變化,以26379為例:

實現故障恢復自動化:詳解Redis哨兵技術

其中,dir只是顯式聲明了數據和日志所在的目錄(在哨兵語境下只有日志);known-slave和known-sentinel顯示哨兵已經發現了從節點和其他哨兵;帶有epoch的參數與配置紀元有關(配置紀元是一個從0開始的計數器,每進行一次***哨兵選舉,都會+1;***哨兵選舉是故障轉移階段的一個操作,在后文原理部分會介紹)。

3.演示故障轉移

哨兵的4個作用中,配置提供者和通知需要客戶端的配合,本文將在下一章介紹客戶端訪問哨兵系統的方法時詳細介紹。這一小節將演示當主節點發生故障時,哨兵的監控和自動故障轉移功能。

Step1:首先,使用kill命令殺掉主節點:

實現故障恢復自動化:詳解Redis哨兵技術

Step2:如果此時立即在哨兵節點中使用info Sentinel命令查看,會發現主節點還沒有切換過來,因為哨兵發現主節點故障并轉移,需要一段時間。

實現故障恢復自動化:詳解Redis哨兵技術

Step3:一段時間以后,再次在哨兵節點中執行info Sentinel查看,發現主節點已經切換成6380節點。

實現故障恢復自動化:詳解Redis哨兵技術

但是同時可以發現,哨兵節點認為新的主節點仍然有2個從節點,這是因為哨兵在將6380切換成主節點的同時,將6379節點置為其從節點;雖然6379從節點已經掛掉,但是由于哨兵并不會對從節點進行客觀下線(其含義將在原理部分介紹),因此認為該從節點一直存在。當6379節點重新啟動后,會自動變成6380節點的從節點。下面驗證一下。

Step4:重啟6379節點,可以看到6379節點成為了6380節點的從節點。

實現故障恢復自動化:詳解Redis哨兵技術

Step5:在故障轉移階段,哨兵和主從節點的配置文件都會被改寫。

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

對于哨兵節點,除了主從節點信息的變化,紀元(epoch)也會變化,下圖中可以看到紀元相關的參數都+1了。

實現故障恢復自動化:詳解Redis哨兵技術

4.總結

哨兵系統的搭建過程,有幾點需要注意:

  • 哨兵系統中的主從節點,與普通的主從節點并沒有什么區別,故障發現和轉移是由哨兵來控制和完成的。

  • 哨兵節點本質上是Redis節點。

  • 每個哨兵節點,只需要配置監控主節點,便可以自動發現其他的哨兵節點和從節點。

  • 在哨兵節點啟動和故障轉移階段,各個節點的配置文件會被重寫(Config Rewrite)。

  • 本章的例子中,一個哨兵只監控了一個主節點;實際上,一個哨兵可以監控多個主節點,通過配置多條sentinel monitor即可實現。

三、客戶端訪問哨兵系統

上一小節演示了哨兵的兩大作用:監控和自動故障轉移,本小節則結合客戶端演示哨兵的另外兩個作用:配置提供者和通知。

1.代碼示例

在介紹客戶端的原理之前,先以Java客戶端Jedis為例,演示一下使用方法:下面代碼可以連接我們剛剛搭建的哨兵系統,并進行各種讀寫操作:

 

  1. public static void testSentinel throws Exception {  
  2. String masterName = "mymaster" 
  3. Set<String> sentinels = new HashSet<>;  
  4. sentinels.add("192.168.92.128:26379");  
  5. sentinels.add("192.168.92.128:26380");  
  6. sentinels.add("192.168.92.128:26381");  
  7. JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels); //初始化過程做了很多工作  
  8. Jedis jedis = pool.getResource;  
  9. jedis.set("key1""value1");  
  10. pool.close 

 

(注:代碼中只演示如何連接哨兵,異常處理、資源關閉等未考慮)

2.客戶端原理

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

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

遍歷哨兵節點,獲取主節點信息:遍歷哨兵節點,通過其中一個哨兵節點+masterName獲得主節點的信息;該功能是通過調用哨兵節點的sentinel get-master-addr-by-name命令實現,該命令示例如下:

實現故障恢復自動化:詳解Redis哨兵技術

一旦獲得主節點信息,停止遍歷(因此一般來說遍歷到***個哨兵節點,循環就停止了)。

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

3.總結

通過客戶端原理的介紹,可以加深對哨兵功能的理解,如下:

配置提供者:客戶端可以通過哨兵節點+masterName獲取主節點信息,在這里哨兵起到的作用就是配置提供者。

需要注意的是,哨兵只是配置提供者,而不是代理。二者的區別在于:

  • 如果是配置提供者,客戶端在通過哨兵獲得主節點信息后,會直接建立到主節點的連接,后續的請求(如set/get)會直接發向主節點;

  • 如果是代理,客戶端的每一次請求都會發向哨兵,哨兵再通過主節點處理請求。

舉一個例子可以很好的理解哨兵的作用是配置提供者,而不是代理。在前面部署的哨兵系統中,將哨兵節點的配置文件進行如下修改:

sentinel monitor mymaster 192.168.92.128 6379 2

改為

sentinel monitor mymaster 127.0.0.1 6379 2

然后,將前述客戶端代碼在局域網的另外一臺機器上運行,會發現客戶端無法連接主節點;這是因為哨兵作為配置提供者,客戶端通過它查詢到主節點的地址為127.0.0.1:6379,客戶端會向127.0.0.1:6379建立Redis連接,自然無法連接。如果哨兵是代理,這個問題就不會出現了。

通知:哨兵節點在故障轉移完成后,會將新的主節點信息發送給客戶端,以便客戶端及時切換主節點。

四、基本原理

前面介紹了哨兵部署、使用的基本方法,本部分介紹哨兵實現的基本原理。

1.哨兵節點支持的命令

哨兵節點作為運行在特殊模式下的Redis節點,其支持的命令與普通的Redis節點不同。在運維中,我們可以通過這些命令查詢或修改哨兵系統;不過更重要的是,哨兵系統要實現故障發現、故障轉移等各種功能,離不開哨兵節點之間的通信,而通信的很大一部分是通過哨兵節點支持的命令來實現的。下面介紹哨兵節點支持的主要命令:

基礎查詢:

通過這些命令,可以查詢哨兵系統的拓撲結構、節點信息、配置信息等。

  • info sentinel:獲取監控的所有主節點的基本信息。

  • sentinel masters:獲取監控的所有主節點的詳細信息。

  • sentinel master mymaster:獲取監控的主節點mymaster的詳細信息。

  • sentinel slaves mymaster:獲取監控的主節點mymaster的從節點的詳細信息。

  • sentinel sentinels mymaster:獲取監控的主節點mymaster的哨兵節點的詳細信息。

  • sentinel get - master - addr - by- name mymaster:獲取監控的主節點mymaster的地址信息,前文已有介紹。

  • sentinel is-master-down-by-addr:哨兵節點之間可以通過該命令詢問主節點是否下線,從而對是否客觀下線做出判斷。

增加/移除對主節點的監控:

sentinel monitor mymaster2 192.168.92.128 16379 2:與部署哨兵節點時配置文件中的sentinel monitor功能完全一樣,不再詳述。

sentinel remove mymaster2:取消當前哨兵節點對主節點mymaster2的監控。

強制故障轉移:

sentinel failover mymaster:該命令可以強制對mymaster執行故障轉移,即便當前的主節點運行完好;例如,如果當前主節點所在機器即將報廢,便可以提前通過failover命令進行故障轉移。

2.基本原理

關于哨兵的原理,關鍵是了解以下幾個概念:

定時任務:每個哨兵節點維護了3個定時任務。定時任務的功能分別如下:通過向主從節點發送info命令獲取***的主從結構;通過發布訂閱功能獲取其他哨兵節點的信息;通過向其他節點發送ping命令進行心跳檢測,判斷是否下線。

主觀下線:在心跳檢測的定時任務中,如果其他節點超過一定時間沒有回復,哨兵節點就會將其進行主觀下線。顧名思義,主觀下線的意思是一個哨兵節點“主觀地”判斷下線;與主觀下線相對應的是客觀下線。

客觀下線:哨兵節點在對主節點進行主觀下線后,會通過sentinel is-master-down-by-addr命令詢問其他哨兵節點該主節點的狀態;如果判斷主節點下線的哨兵數量達到一定數值,則對該主節點進行客觀下線。

需要特別注意的是,客觀下線是主節點才有的概念;如果從節點和哨兵節點發生故障,被哨兵主觀下線后,不會再有后續的客觀下線和故障轉移操作。

選舉***哨兵節點:當主節點被判斷客觀下線以后,各個哨兵節點會進行協商,選舉出一個***哨兵節點,并由該***節點對其進行故障轉移操作。

監視該主節點的所有哨兵都有可能被選為***,選舉使用的算法是Raft算法;Raft算法的基本思路是先到先得:即在一輪選舉中,哨兵A向B發送成為***的申請,如果B沒有同意過其他哨兵,則會同意A成為***。選舉的具體過程這里不做詳細描述,一般來說,哨兵選擇的過程很快,誰先完成客觀下線,一般就能成為***。

故障轉移:選舉出的***哨兵,開始進行故障轉移操作,該操作大體可以分為3個步驟:

  • 在從節點中選擇新的主節點:選擇的原則是,首先過濾掉不健康的從節點;然后選擇優先級***的從節點(由slave-priority指定);如果優先級無法區分,則選擇復制偏移量***的從節點;如果仍無法區分,則選擇runid最小的從節點。

  • 更新主從狀態:通過slaveof no one命令,讓選出來的從節點成為主節點;并通過slaveof命令讓其他節點成為其從節點。

  • 將已經下線的主節點(即6379)設置為新的主節點的從節點,當6379重新上線后,它會成為新的主節點的從節點。

通過上述幾個關鍵概念,可以基本了解哨兵的工作原理。為了更形象的說明,下圖展示了***哨兵節點的日志,包括從節點啟動到完成故障轉移。

實現故障恢復自動化:詳解Redis哨兵技術

五、配置與實踐建議

1.配置

下面介紹與哨兵相關的幾個配置。

配置1:sentinel monitor {masterName} {masterIp} {masterPort} {quorum}

sentinel monitor是哨兵最核心的配置,在前文講述部署哨兵節點時已說明,其中:masterName指定了主節點名稱,masterIp和masterPort指定了主節點地址,quorum是判斷主節點客觀下線的哨兵數量閾值:當判定主節點下線的哨兵數量達到quorum時,對主節點進行客觀下線。建議取值為哨兵數量的一半加1。

配置2:sentinel down-after-milliseconds {masterName} {time}

sentinel down-after-milliseconds與主觀下線的判斷有關:哨兵使用ping命令對其他節點進行心跳檢測,如果其他節點超過down-after-milliseconds配置的時間沒有回復,哨兵就會將其進行主觀下線。該配置對主節點、從節點和哨兵節點的主觀下線判定都有效。

down-after-milliseconds的默認值是30000,即30s;可以根據不同的網絡環境和應用要求來調整:值越大,對主觀下線的判定會越寬松,好處是誤判的可能性小,壞處是故障發現和故障轉移的時間變長,客戶端等待的時間也會變長。例如,如果應用對可用性要求較高,則可以將值適當調小,當故障發生時盡快完成轉移;如果網絡環境相對較差,可以適當提高該閾值,避免頻繁誤判。

配置3:sentinel parallel - syncs {masterName} {number}

sentinel parallel-syncs與故障轉移之后從節點的復制有關:它規定了每次向新的主節點發起復制操作的從節點個數。例如,假設主節點切換完成之后,有3個從節點要向新的主節點發起復制;如果parallel-syncs=1,則從節點會一個一個開始復制;如果parallel-syncs=3,則3個從節點會一起開始復制。

parallel-syncs取值越大,從節點完成復制的時間越快,但是對主節點的網絡負載、硬盤負載造成的壓力也越大;應根據實際情況設置。例如,如果主節點的負載較低,而從節點對服務可用的要求較高,可以適量增加parallel-syncs取值。parallel-syncs的默認值是1。

配置4:sentinel failover - timeout {masterName} {time}

sentinel failover-timeout與故障轉移超時的判斷有關,但是該參數不是用來判斷整個故障轉移階段的超時,而是其幾個子階段的超時,例如如果主節點晉升從節點時間超過timeout,或從節點向新的主節點發起復制操作的時間(不包括復制數據的時間)超過timeout,都會導致故障轉移超時失敗。

failover-timeout的默認值是180000,即180s;如果超時,則下一次該值會變為原來的2倍。

配置5:除上述幾個參數外,還有一些其他參數,如安全驗證相關的參數,這里不做介紹。

2.實踐建議

  • 哨兵節點的數量應不止一個。一方面增加哨兵節點的冗余,避免哨兵本身成為高可用的瓶頸;另一方面減少對下線的誤判。此外,這些不同的哨兵節點應部署在不同的物理機上。

  • 哨兵節點的數量應該是奇數,便于哨兵通過投票做出“決策”:***選舉的決策、客觀下線的決策等。

  • 各個哨兵節點的配置應一致,包括硬件、參數等;此外,所有節點都應該使用ntp或類似服務,保證時間準確、一致。

  • 哨兵的配置提供者和通知客戶端功能,需要客戶端的支持才能實現,如前文所說的Jedis;如果開發者使用的庫未提供相應支持,則可能需要開發者自己實現。

  • 當哨兵系統中的節點在Docker(或其他可能進行端口映射的軟件)中部署時,應特別注意端口映射可能會導致哨兵系統無法正常工作,因為哨兵的工作基于與其他節點的通信,而Docker的端口映射可能導致哨兵無法連接到其他節點。例如,哨兵之間互相發現,依賴于它們對外宣稱的IP和port,如果某個哨兵A部署在做了端口映射的Docker中,那么其他哨兵使用A宣稱的port無法連接到A。

六、總結

本文首先介紹了哨兵的作用:監控、故障轉移、配置提供者和通知;然后講述了哨兵系統的部署方法,以及通過客戶端訪問哨兵系統的方法;再然后簡要說明了哨兵實現的基本原理;***給出了關于哨兵實踐的一些建議。

在主從復制的基礎上,哨兵引入了主節點的自動故障轉移,進一步提高了Redis的高可用性;但是哨兵的缺陷同樣很明顯:哨兵無法對從節點進行自動故障轉移,在讀寫分離場景下,從節點故障會導致讀服務不可用,需要我們對從節點做額外的監控、切換操作。

此外,哨兵仍然沒有解決寫操作無法負載均衡、及存儲能力受到單機限制的問題;這些問題的解決需要使用集群,歡迎關注社群后續內容。

參考

  • https://redis.io/topics/sentinel

  • http://www.redis.cn/

  • 《Redis開發與運維》 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2018-05-10 15:54:39

2023-12-25 09:26:51

監控系統工具

2011-08-16 15:36:47

iPhone應用測試

2025-02-19 10:27:48

哨兵Redis故障轉移

2024-07-16 08:38:06

2016-05-18 17:35:44

2015-03-26 11:01:11

自動化AWS EBS快照恢復

2015-06-03 09:07:46

白盒審計PHPPHP自動化審計

2024-06-17 10:34:12

2015-10-21 15:08:25

電纜自動化

2022-02-08 15:29:27

故障運維服務器

2017-12-17 21:58:18

2018-12-14 09:48:23

Redis數據故障

2009-12-23 16:19:25

WPF UI自動化技術

2009-11-30 17:12:57

BMC

2024-06-11 10:41:14

2024-12-09 00:00:09

2013-07-25 14:50:03

2021-09-03 11:27:03

自動化人工智能 數據
點贊
收藏

51CTO技術棧公眾號

精品一区久久久久久| 中国成人亚色综合网站| 国产激情在线观看| 亚洲黄色性网站| 亚洲人成网站在线播| 手机福利视频欧美| 国产乱国产乱300精品| 国产精品扒开腿爽爽爽视频| 亚洲成人看片| 日本国产一区二区| 亚洲精品午夜在线观看| 国产伦精品一区二区三区视频青涩 | 91久久国产综合久久91猫猫| 亚洲综合免费观看高清在线观看| 国产成人一区二区三区别| 一区二区三区在线电影| 欧美—级高清免费播放| 惠美惠精品网| 日韩午夜精品视频| 小水嫩精品福利视频导航| 国产精品网站导航| 人妻av中文系列| 久久精品国产99| 久久国产精品亚洲va麻豆| 999久久久精品国产| 日本伊人精品一区二区三区介绍 | 成人午夜三级| 色悠悠久久88| 超碰99在线| 日韩欧美国产成人一区二区| 九色在线免费| 黄色一区二区在线| 免费成人高清| 一区二区三区四区乱视频| av网站在线不卡| 久久久久久久综合| 欧美三级一级片| 91老师片黄在线观看| 国产a级片网站| 成人av在线播放网址| 乱熟女高潮一区二区在线| 韩国视频一区二区| 亚洲精品国产suv一区88| 久久精品国内一区二区三区| 婷婷久久伊人| 精品一区二区免费在线观看| 伊人网在线免费| 成人aaaa免费全部观看| 久久久噜噜噜www成人网| 99久久久免费精品国产一区二区| 精品无码一区二区三区在线| 91麻豆国产自产在线观看| 成人在线激情网| 亚洲美女淫视频| 天海翼一区二区三区免费| 精品国产精品三级精品av网址| 台湾av在线二三区观看| 欧美视频一区二区三区在线观看| 国产精品刘玥久久一区| 日韩av在线网站| 久久久久久久性潮| 国语自产精品视频在线看一大j8 | 精品成人一区二区三区| 精精国产xxxx视频在线野外| 亚洲欧美国产精品| 亚洲香蕉久久| 日本午夜人人精品| 在线成人欧美| 中国女人做爰视频| 国产欧美精品一区二区色综合朱莉| 亚洲成人天堂网| 亚洲综合在线五月| 黄色免费网站在线| 亚洲性无码av在线| 色爱综合av| 久久96国产精品久久99软件| 国产盗摄精品一区二区三区在线| 日本久久久久久久久久久久| 日韩欧美aaa| 久久爱91午夜羞羞| 91高清视频免费| 亚洲电影在线| 国产黄色片免费在线观看| 国产精品欧美一区二区三区| 酒色婷婷桃色成人免费av网| 亚洲精品影视在线观看| 国产精品45p| 国产日韩久久| 99久久国产综合精品女不卡| 伊人网在线观看| 国产亚洲在线播放| 欧美gayvideo| 国产爆乳无码一区二区麻豆| 亚洲综合激情另类小说区| 人妖欧美1区| 日本久久久久久久久| 肉色丝袜一区二区| 九七影院理论片| 亚洲精品国产品国语在线| 丝袜久久网站| 欧美一区二区三区在线看| 91久久电影| 亚洲精品日韩在线观看| 久久久久久一级片| 五月香视频在线观看| 久久久国产精品亚洲一区| 永久亚洲成a人片777777| 欧美黄色免费网址| 欧美丝袜一区二区| 色哟哟欧美精品| 日韩天堂在线| 久久99热精品| 亚洲ww精品| 38少妇精品导航| 国产韩日影视精品| 一区二区三区日韩视频| 国产精品制服诱惑| 国产综合色在线视频区| 日本中文字幕电影| 日韩精品视频在线免费观看| 99国内精品久久久久久久| 凹凸日日摸日日碰夜夜爽1| 91精品国产乱码久久蜜臀| 偷拍亚洲色图| 欧美日韩一道本| 亚洲国产精品久久久久| 欧美一区影院| 麻豆福利视频| 欧美激情视频一区二区三区不卡| 欧美aaa在线| a√在线中文网新版址在线| 日本精品在线视频| www国产精品av| 欧美黄色网页| 亚洲第一导航| 欧美一区二区三区在线观看视频| 99热国内精品| 国产精品三级a三级三级午夜| 久久精品电影一区二区| 看片网站欧美日韩| 久草免费在线| 国产高清自拍一区| 天天影视网天天综合色在线播放| 欧美男人操女人视频| 国产亚洲精品网站| 最近2019免费中文字幕视频三| 久久精品久久精品| 丰满大乳少妇在线观看网站| 欧美日韩一区二区三区在线视频 | 一区二区日韩| 天堂…中文在线最新版在线| 日韩国产在线播放| 噜噜爱69成人精品| 免费在线观看黄色| 国产一区免费| 69p69国产精品| 尤物在线精品| 91精彩在线视频| 久久国产手机看片| 欧美一区二区三区四区视频| 99精品国产在热久久婷婷| 国产一区精品| 狠狠色综合一区二区| 欧美精品久久天天躁| 99精品视频免费全部在线| 成年人在线视频| 久久精品人成| 精品美女在线播放| 麻豆成人在线观看| 在线观看欧美| 欧美日韩久久久一区| 欧美性猛交xxxx黑人猛交| 亚洲欧美怡红院| 污片在线观看一区二区| 色94色欧美sute亚洲13| 亚洲三级在线播放| 99精品在线观看视频| 另类国产ts人妖高潮视频| 日韩成人综合| 欧美日韩一区二区三区四区在线观看| 欧美激情99| 99久久伊人| 欧洲亚洲两性| 日韩三级影视| 日韩在线观看中文字幕| av午夜在线观看| 国产精品3区| 蜜桃91丨九色丨蝌蚪91桃色| 在线播放亚洲一区| 国产亚洲一区| 国产视频亚洲视频| 高清在线观看日韩| 国产色综合一区| 欧美精品一区二区三区很污很色的| 亚洲精品日韩欧美| 国内精品久久久久久中文字幕| 日本一二区视频| 性欧美xxx69hd高清| 青娱乐极品盛宴一区二区| 国产精品一区二区男女羞羞无遮挡|