婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Redis cluster集群模式的原理解析

Redis cluster集群模式的原理解析

熱門標簽:超呼電話機器人 鄭州人工智能電銷機器人系統 日本中國地圖標注 魔獸2青云地圖標注 宿遷便宜外呼系統平臺 貴州電銷卡外呼系統 十堰營銷電銷機器人哪家便宜 北京400電話辦理收費標準 山東外呼銷售系統招商

redis cluster

redis cluster是Redis的分布式解決方案,在3.0版本推出后有效地解決了redis分布式方面的需求

自動將數據進行分片,每個master上放一部分數據

提供內置的高可用支持,部分master不可用時,還是可以繼續工作的

支撐N個redis master node,每個master node都可以掛載多個slave node

高可用,因為每個master都有salve節點,那么如果mater掛掉,redis cluster這套機制,就會自動將某個slave切換成master

redis cluster vs. replication + sentinal

如果你的數據量很少,主要是承載高并發高性能的場景,比如你的緩存一般就幾個G,單機足夠了

replication,一個mater,多個slave,要幾個slave跟你的要求的讀吞吐量有關系,然后自己搭建一個sentinal集群,去保證redis主從架構的高可用性,就可以了

redis cluster,主要是針對海量數據+高并發+高可用的場景,海量數據,如果你的數據量很大,那么建議就用redis cluster

數據分布算法

hash算法

比如你有 N 個 redis實例,那么如何將一個key映射到redis上呢,你很可能會采用類似下面的通用方法計算 key的 hash 值,然后均勻的映射到到 N 個 redis上:

hash(key)%N

如果增加一個redis,映射公式變成了 hash(key)%(N+1)

如果一個redis宕機了,映射公式變成了 hash(key)%(N-1)

在這兩種情況下,幾乎所有的緩存都失效了。會導致數據庫訪問的壓力陡增,嚴重情況,還可能導致數據庫宕機。

一致性hash算法

一個master宕機不會導致大部分緩存失效,可能存在緩存熱點問題

用虛擬節點改進

redis cluster的hash slot算法

redis cluster有固定的16384個hash slot,對每個key計算CRC16值,然后對16384取模,可以獲取key對應的hash slot

redis cluster中每個master都會持有部分slot,比如有3個master,那么可能每個master持有5000多個hash slot

hash slot讓node的增加和移除很簡單,增加一個master,就將其他master的hash slot移動部分過去,減少一個master,就將它的hash slot移動到其他master上去

移動hash slot的成本是非常低的

客戶端的api,可以對指定的數據,讓他們走同一個hash slot,通過hash tag來實現

127.0.0.1:7000>CLUSTER ADDSLOTS 0 1 2 3 4 ... 5000 可以將槽0-5000指派給節點7000負責。

每個節點都會記錄哪些槽指派給了自己,哪些槽指派給了其他節點。

客戶端向節點發送鍵命令,節點要計算這個鍵屬于哪個槽。

如果是自己負責這個槽,那么直接執行命令,如果不是,向客戶端返回一個MOVED錯誤,指引客戶端轉向正確的節點。

redis cluster 多master的寫入

在redis cluster寫入數據的時候,其實是你可以將請求發送到任意一個master上去執行

但是,每個master都會計算這個key對應的CRC16值,然后對16384個hashslot取模,找到key對應的hashslot,找到hashslot對應的master

如果對應的master就在自己本地的話,set mykey1 v1,mykey1這個key對應的hashslot就在自己本地,那么自己就處理掉了

但是如果計算出來的hashslot在其他master上,那么就會給客戶端返回一個moved error,告訴你,你得到哪個master上去執行這條寫入的命令

什么叫做多master的寫入,就是每條數據只能存在于一個master上,不同的master負責存儲不同的數據,分布式的數據存儲

100w條數據,5個master,每個master就負責存儲20w條數據,分布式數據存儲

默認情況下,redis cluster的核心的理念,主要是用slave做高可用的,每個master掛一兩個slave,主要是做數據的熱備,還有master故障時的主備切換,實現高可用的

redis cluster默認是不支持slave節點讀或者寫的,跟我們手動基于replication搭建的主從架構不一樣的

jedis客戶端,對redis cluster的讀寫分離支持不太好的

默認的話就是讀和寫都到master上去執行的

如果你要讓最流行的jedis做redis cluster的讀寫分離的訪問,那可能還得自己修改一點jedis的源碼,成本比較高

讀寫分離,是為了什么,主要是因為要建立一主多從的架構,才能橫向任意擴展slave node去支撐更大的讀吞吐量

redis cluster的架構下,實際上本身master就是可以任意擴展的,你如果要支撐更大的讀吞吐量,或者寫吞吐量,或者數據量,都可以直接對master進行橫向擴展就可以了

節點間的內部通信機制

1、基礎通信原理

(1)redis cluster節點間采取gossip協議進行通信

跟集中式不同,不是將集群元數據(節點信息,故障,等等)集中存儲在某個節點上,而是互相之間不斷通信,保持整個集群所有節點的數據是完整的

集中式:好處在于,元數據的更新和讀取,時效性非常好,一旦元數據出現了變更,立即就更新到集中式的存儲中,其他節點讀取的時候立即就可以感知到; 不好在于,所有的元數據的跟新壓力全部集中在一個地方,可能會導致元數據的存儲有壓力

gossip:好處在于,元數據的更新比較分散,不是集中在一個地方,更新請求會陸陸續續,打到所有節點上去更新,有一定的延時,降低了壓力; 缺點,元數據更新有延時,可能導致集群的一些操作會有一些滯后

(2)10000端口

每個節點都有一個專門用于節點間通信的端口,就是自己提供服務的端口號+10000,比如7001,那么用于節點間通信的就是17001端口

每隔節點每隔一段時間都會往另外幾個節點發送ping消息,同時其他幾點接收到ping之后返回pong

(3)交換的信息

故障信息,節點的增加和移除,hash slot信息,等等

2、gossip協議

gossip協議包含多種消息,包括ping,pong,meet,fail,等等

meet: 某個節點發送meet給新加入的節點,讓新節點加入集群中,然后新節點就會開始與其他節點進行通信

redis-trib.rb add-node

其實內部就是發送了一個gossip meet消息,給新加入的節點,通知那個節點去加入我們的集群

ping: 每個節點都會頻繁給其他節點發送ping,其中包含自己的狀態還有自己維護的集群元數據,互相通過ping交換元數據

每個節點每秒都會頻繁發送ping給其他的集群,ping,頻繁的互相之間交換數據,互相進行元數據的更新

pong: 返回ping和meet,包含自己的狀態和其他信息,也可以用于信息廣播和更新

fail: 某個節點判斷另一個節點fail之后,就發送fail給其他節點,通知其他節點,指定的節點宕機了

3、ping消息深入

ping很頻繁,而且要攜帶一些元數據,所以可能會加重網絡負擔

每個節點每秒會執行10次ping,每次會選擇5個最久沒有通信的其他節點

當然如果發現某個節點通信延時達到了cluster_node_timeout / 2,那么立即發送ping,避免數據交換延時過長,落后的時間太長了

比如說,兩個節點之間都10分鐘沒有交換數據了,那么整個集群處于嚴重的元數據不一致的情況,就會有問題

所以cluster_node_timeout可以調節,如果調節比較大,那么會降低發送的頻率

每次ping,一個是帶上自己節點的信息,還有就是帶上1/10其他節點的信息,發送出去,進行數據交換

至少包含3個其他節點的信息,最多包含總節點-2個其他節點的信息

基于重定向的客戶端

(1)請求重定向

客戶端可能會挑選任意一個redis實例去發送命令,每個redis實例接收到命令,都會計算key對應的hash slot

如果在本地就在本地處理,否則返回moved給客戶端,讓客戶端進行重定向

cluster keyslot mykey,可以查看一個key對應的hash slot是什么

用redis-cli的時候,可以加入-c參數,支持自動的請求重定向,redis-cli接收到moved之后,會自動重定向到對應的節點執行命令

(2)計算hash slot

計算hash slot的算法,就是根據key計算CRC16值,然后對16384取模,拿到對應的hash slot

用hash tag可以手動指定key對應的slot,同一個hash tag下的key,都會在一個hash slot中,比如set mykey1:{100}和set mykey2:{100}

(3)hash slot查找

節點間通過gossip協議進行數據交換,就知道每個hash slot在哪個節點上

smart jedis

(1)什么是smart jedis

基于重定向的客戶端,很消耗網絡IO,因為大部分情況下,可能都會出現一次請求重定向,才能找到正確的節點

所以大部分的客戶端,比如java redis客戶端,就是jedis,都是smart的

本地維護一份hashslot -> node的映射表,緩存,大部分情況下,直接走本地緩存就可以找到hashslot -> node,不需要通過節點進行moved重定向

(2)JedisCluster的工作原理

在JedisCluster初始化的時候,就會隨機選擇一個node,初始化hashslot -> node映射表,同時為每個節點創建一個JedisPool連接池

每次基于JedisCluster執行操作,首先JedisCluster都會在本地計算key的hashslot,然后在本地映射表找到對應的節點

如果那個node正好還是持有那個hashslot,那么就ok; 如果說進行了reshard這樣的操作,可能hashslot已經不在那個node上了,就會返回moved

如果JedisCluter API發現對應的節點返回moved,那么利用該節點的元數據,更新本地的hashslot -> node映射表緩存

重復上面幾個步驟,直到找到對應的節點,如果重試超過5次,那么就報錯,JedisClusterMaxRedirectionException

jedis老版本,可能會出現在集群某個節點故障還沒完成自動切換恢復時,頻繁更新hash slot,頻繁ping節點檢查活躍,導致大量網絡IO開銷

jedis最新版本,對于這些過度的hash slot更新和ping,都進行了優化,避免了類似問題

(3)hashslot遷移和ask重定向

如果hash slot正在遷移,那么會返回ask重定向給jedis

jedis接收到ask重定向之后,會重新定位到目標節點去執行,但是因為ask發生在hash slot遷移過程中,所以JedisCluster API收到ask是不會更新hashslot本地緩存

已經可以確定說,hashslot已經遷移完了,moved是會更新本地hashslot->node映射表緩存的

高可用性與主備切換原理

redis cluster的高可用的原理,幾乎跟哨兵是類似的

1、判斷節點宕機

如果一個節點認為另外一個節點宕機,那么就是pfail,主觀宕機

如果多個節點都認為另外一個節點宕機了,那么就是fail,客觀宕機,跟哨兵的原理幾乎一樣,sdown,odown

在cluster-node-timeout內,某個節點一直沒有返回pong,那么就被認為pfail

如果一個節點認為某個節點pfail了,那么會在gossip ping消息中,ping給其他節點,如果超過半數的節點都認為pfail了,那么就會變成fail

2、從節點過濾

對宕機的master node,從其所有的slave node中,選擇一個切換成master node

檢查每個slave node與master node斷開連接的時間,如果超過了cluster-node-timeout * cluster-slave-validity-factor,那么就沒有資格切換成master

這個也是跟哨兵是一樣的,從節點超時過濾的步驟

3、從節點選舉

哨兵:對所有從節點進行排序,slave priority,offset,run id

每個從節點,都根據自己對master復制數據的offset,來設置一個選舉時間,offset越大(復制數據越多)的從節點,選舉時間越靠前,優先進行選舉

所有的master node開始slave選舉投票,給要進行選舉的slave進行投票,如果大部分master node(N/2 + 1)都投票給了某個從節點,那么選舉通過,那個從節點可以切換成master

從節點執行主備切換,從節點切換為主節點

4、與哨兵比較

整個流程跟哨兵相比,非常類似,所以說,redis cluster功能強大,直接集成了replication和sentinal的功能

補充:redis集群(cluster)模式 詳解與實操

一 概念

Redis集群是一個分布式(distributed)、容錯(fault-tolerant)的 Redis內存K/V服務, 集群可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset),比如Redis集群并不支持處理多個keys的命令,因為這需要在不同的節點間移動數據,從而達不到像Redis那樣的性能,在高負載的情況下可能會導致不可預料的錯誤。

二 特性

Redis集群的幾個重要特征:

1.Redis 集群的分片特征在于將鍵空間分拆了16384個槽位,每一個節點負責其中一些槽位。

2.Redis提供一定程度的可用性,可以在某個節點宕機或者不可達的情況下繼續處理命令.(只要集群中大多數Master可達、且失效的Master至少有一個Slave可達,即集群非Fail狀態,集群都是可用)

3.Redis 集群中不存在中心(central)節點或者代理(proxy)節點, 集群的其中一個主要設計目標是達到線性可擴展性(linear scalability)

三 架構

3.1 redis-cluster架構圖

實現哈希映射

架構細節:

所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.

節點的fail是通過集群中超過半數的節點檢測失效時才生效.

客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可

redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node->slot->value

3.2 redis-cluster選舉:容錯

選舉過程是集群中所有master參與,如果半數以上master節點與某個master節點通信超時(cluster-node-timeout),認為該master節點掛掉.

什么時候整個集群不可用(cluster_state:fail):

a:如果集群任意master掛掉,且當前master沒有slave,集群進入fail狀態,也可以理解成集群的slot映射[0-16383]不完全時進入fail狀態.

b:如果集群超過半數以上master掛掉,無論是否有slave,集群進入fail狀態.

當集群不可用時,所有對集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤。

四 環境要求

Redis3.0版本以上

要讓集群正常工作至少需要3個主節點,在這里我們要創建6個redis節點,其中三個為主節點,三個為從節點

五 集群搭建

5.1 安裝ruby

apt-get install ruby
apt-get install rubygems

安裝ruby redis 擴展包:

gem install redis

5.2. 安裝redis server:

apt-get install redis-server

5.3. 創建redis-cluster文件夾

mkdir /usr/local/redis-cluster

5.4. 將你的redis.conf配置文件分別復制到redis-cluster這個文件夾中

更改如下

port  6379                  #端口6379        
bind 本機ip                 #默認ip為172.20.0.2/3/4/5/6/7需要改為其他節點機器可訪問的ip 否則創建集群時無法訪問對應的端口,無法創建集群
daemonize    yes                       #redis后臺運行
pidfile  /var/run/redis_6379.pid #pidfile #文件對應6379
cluster-enabled  yes                    #開啟集群  把注釋#去掉
cluster-config-file  nodes_7000.conf   #集群的配置  配置文件首次啟動自動生成
cluster-node-timeout  15000         #請求超時  默認15秒,可自行設置
appendonly  yes              #aof日志開啟  有需要就開啟,它會每次寫操作都記錄一條日志 
masterauth '86a1b907d54bf7010394bf316e183e67'
requirepass '86a1b907d54bf7010394bf316e183e67'  #設置密碼

5.5. 啟動redis服務

需要啟動6個服務

redis-server /usr/local/redis_cluster/redis.conf

5.6 創建集群

其中redis-trib.rb在你的redis安裝目錄/src下:

/usr/local/redis-cluster/redis-trib.rb create --replicas 1 172.20.0.2:6379 172.20.0.3:6379 172.20.0.4:6379 172.20.0.5:6379 172.20.0.6:6379 172.20.0.7:6379

可以看到創建集群成功了:(如圖:2,3,4為主,5,6,7為從)

5.7 設置redis集群密碼

如下圖,逐一設置redis密碼:

5.8 連接集群并測試

redis-cli -p 6379

六 集群擴容

6.1 添加主節

創建一個新節點(使用的配置文件與之前一樣)并啟動。

執行命令./redis-trib.rb add-node 172.20.0.8:6379 172.20.0.7:6379,將新節點添加到集群里

(腳本先檢查了集群狀態,后添加了節點,添加后節點是空節點,還需分配哈希槽,沒有哈希槽就沒有儲存功能)

6.2 為新節點分配哈希槽

./redis-trib.rb reshard 172.20.0.2:6379

注釋:

want to move (from 1 to 16384)? 1000(此處為想移動多少個哈希槽)

What is the receiving node ID?(為加入的新節點的id)

Source node #1:all(此處選擇all,全部使用并移動,表示從所有主節點中隨機轉移,湊夠1000個哈希槽

6.3 添加從節點slave

如上新建一個空節點并啟動

./redis-trib.rb add-node 172.20.0.9:6379 172.20.0.7:6379

連接上新節點,執行命令cluster replicate (任意一個master的ID)。

查看當前節點狀態:

執行命令cluster replicate (任意一個master的ID):

七 刪除節點

7.1 遷移slots

把節點擁有的slots全部遷移出去

./redis-trib.rb reshard 172.20.0.2:6379

7.2 刪除節點

redis-trib.rb del-node 172.20.0.2:6379 f113752f7763ceea613cb73018c043f8849edecf

7.3 沒有slots

如果沒有一個slots,可直接刪除

redis-trib.rb del-node 172.20.0.2:6379 9f5bc99dba963671bb5664f84eda304dc94b1fcb

(這個主節點被刪除之后,它之前擁有的從節點會自動成為其他主節點的從節點.)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • k8s部署redis cluster集群的實現
  • Redis6.0搭建集群Redis-cluster的方法
  • Redis Cluster集群主從切換的踩坑與填坑
  • Redis Cluster集群數據分片機制原理
  • docker redis5.0 cluster集群搭建的實現
  • 使用Ruby腳本部署Redis Cluster集群步驟講解
  • php成功操作redis cluster集群的實例教程
  • Redis cluster集群的介紹
  • Redis的Cluster集群搭建的實現步驟

標簽:大慶 江蘇 果洛 吉安 北京 朝陽 楊凌 臺州

巨人網絡通訊聲明:本文標題《Redis cluster集群模式的原理解析》,本文關鍵詞  Redis,cluster,集群,模式,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Redis cluster集群模式的原理解析》相關的同類信息!
  • 本頁收集關于Redis cluster集群模式的原理解析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品少妇一区二区三区免费观看 | 91猫先生在线| 精品久久久久久久人人人人传媒 | 精品国产乱码久久| 国产精品99精品久久免费| 亚洲一区免费在线观看| 国产激情一区二区三区四区 | 热久久国产精品| 色婷婷亚洲综合| 青椒成人免费视频| 中文字幕电影一区| 欧美日韩一区二区三区四区五区| 91视频com| 成人免费福利片| 成人黄色综合网站| 久久69国产一区二区蜜臀| 亚洲高清视频在线| 一区二区三区欧美| 亚洲bt欧美bt精品777| 亚洲曰韩产成在线| 午夜亚洲国产au精品一区二区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩国产成人精品| 亚洲尤物视频在线| 色av综合在线| 日韩免费看的电影| 日韩一区二区在线免费观看| 欧美片在线播放| 欧美综合在线视频| 欧美日韩一区高清| 91精品在线免费| 日韩欧美中文字幕制服| 亚洲男人天堂一区| 亚洲综合一区在线| 日韩精品每日更新| 国产乱妇无码大片在线观看| 亚洲成人av一区二区| 婷婷成人激情在线网| 国产精品福利一区二区三区| 亚洲视频电影在线| 日韩黄色片在线观看| 国产剧情在线观看一区二区| 久久99热国产| 国产麻豆91精品| jlzzjlzz亚洲日本少妇| 成人综合日日夜夜| 日本乱人伦aⅴ精品| 欧美三级一区二区| 欧美电影免费提供在线观看| 欧美精品一区二区蜜臀亚洲| 国产精品免费久久| 亚洲最色的网站| 久久99精品久久久| 色老汉av一区二区三区| 日韩视频在线永久播放| 欧美经典一区二区三区| 一区二区三区欧美在线观看| 麻豆国产精品视频| 日日噜噜夜夜狠狠视频欧美人 | 国产精品综合久久| 久久成人av少妇免费| 在线看日本不卡| 一区在线播放视频| 国产不卡在线播放| 久久综合九色综合97_久久久| 日韩av一区二区三区四区| 国产成人精品亚洲777人妖| 亚洲人成小说网站色在线| 亚洲欧美激情在线| 爽好久久久欧美精品| 9色porny自拍视频一区二区| 日韩一区二区视频| 亚洲专区一二三| 国产99精品国产| www日韩大片| 精品一区二区三区免费播放| 欧美一区二区三区四区五区| 亚洲韩国一区二区三区| 欧美午夜精品一区二区三区| 亚洲伦在线观看| 欧美日韩在线免费视频| 久久久久久久久蜜桃| 91啪在线观看| 日本不卡中文字幕| 欧美日韩精品福利| 国产精品18久久久久久久久 | 精品少妇一区二区三区视频免付费| 不卡高清视频专区| www.亚洲色图.com| 99国产一区二区三精品乱码| 精品国产一区二区三区av性色| 国内精品在线播放| 91视频xxxx| 精品一区二区三区影院在线午夜 | 久久这里都是精品| 亚洲主播在线播放| 久久99九九99精品| 久久久蜜臀国产一区二区| 性欧美疯狂xxxxbbbb| 国产91在线看| 国产99久久久久| 不卡电影一区二区三区| 五月综合激情婷婷六月色窝| 日韩欧美高清dvd碟片| 激情五月播播久久久精品| 久久蜜臀精品av| 欧美羞羞免费网站| 色就色 综合激情| 欧美日韩国产综合草草| 蜜臀av性久久久久av蜜臀妖精| 不卡欧美aaaaa| 美女视频黄a大片欧美| 制服丝袜亚洲精品中文字幕| 一区二区三区四区精品在线视频| 成人在线一区二区三区| 国产丝袜欧美中文另类| 久久成人免费网| 久久久久国产精品人| 成人国产精品免费观看动漫| 国产欧美视频在线观看| 国产成人高清在线| 亚洲精品中文在线影院| 成人丝袜18视频在线观看| 亚洲人成7777| 在线看国产一区二区| 国产乱子轮精品视频| 精品国精品国产尤物美女| 成人午夜看片网址| 国产精品素人一区二区| 成人国产精品视频| 亚洲欧美日韩国产中文在线| 99国产精品一区| 亚洲欧美一区二区三区国产精品 | 欧美精品在线一区二区三区| 亚洲成人福利片| 日韩一区二区在线看| 国产麻豆9l精品三级站| 国产精品久久久久久久久久久免费看| av在线综合网| 亚洲国产日韩a在线播放性色| 欧美日韩激情在线| 国产一区二区在线看| 国产另类ts人妖一区二区| 亚洲图片你懂的| 欧美大片在线观看| 99精品偷自拍| 久久精品久久99精品久久| 中文字幕亚洲一区二区av在线| 7777精品久久久大香线蕉| 69久久夜色精品国产69蝌蚪网| 日韩三级电影网址| 视频在线观看91| 欧美精品 日韩| 久久激情五月婷婷| 精品国产乱码久久久久久免费| 久久免费美女视频| 国产在线精品视频| 欧美成人video| 国产成人亚洲综合色影视| 精品国产一区二区三区久久久蜜月 | 久久中文娱乐网| 午夜免费欧美电影| 精品日韩一区二区三区免费视频| 在线成人免费视频| 狠狠v欧美v日韩v亚洲ⅴ| 日韩在线观看一区二区| 国产伦理精品不卡| 久久久国产一区二区三区四区小说| 91网站在线播放| 欧美大度的电影原声| 久久美女艺术照精彩视频福利播放| 亚洲精品国产a| 国产日韩精品一区二区三区在线| 欧美日韩国产在线播放网站| 波多野结衣视频一区| 狠狠色狠狠色综合| 狠狠色丁香九九婷婷综合五月| 日韩国产欧美一区二区三区| 亚洲专区一二三| 日本乱人伦一区| 蜜桃av一区二区在线观看| 精品国偷自产国产一区| 国产成人午夜99999| 天堂精品中文字幕在线| 精品av综合导航| 在线免费不卡电影| 国产99久久久久| 亚洲成av人**亚洲成av**| 精品国产网站在线观看| 欧美最新大片在线看| 北条麻妃一区二区三区| 亚洲一区中文日韩| 成人欧美一区二区三区视频网页 | 亚洲国产欧美另类丝袜| 一区二区三区欧美在线观看| 欧美精品一区二区三区视频| 欧美中文字幕一区二区三区| 国产不卡在线一区| 青椒成人免费视频| 亚洲国产精品欧美一二99|