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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis(9)——史上最强【集群】入门实践教程

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

一、Redis 集群概述

Redis 主從復制

到 目前 為止,我們所學習的 Redis 都是?單機版?的,這也就意味著一旦我們所依賴的 Redis 服務宕機了,我們的主流程也會受到一定的影響,這當然是我們不能夠接受的。

所以一開始我們的想法是:搞一臺備用機。這樣我們就可以在一臺服務器出現問題的時候切換動態地到另一臺去:

轉存失敗重新上傳取消

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

Redis 哨兵

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

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

轉存失敗重新上傳取消

Redis 集群化

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

二、主從復制

轉存失敗重新上傳取消

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

主從復制主要的作用

  • 數據冗余:?主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。

  • 故障恢復:?當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復?(實際上是一種服務的冗余)。

  • 負載均衡:?在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務?(即寫 Redis 數據時應用連接主節點,讀 Redis 數據時應用連接從節點),分擔服務器負載。尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高 Redis 服務器的并發量。

  • 高可用基石:?除了上述作用以外,主從復制還是哨兵和集群能夠實施的?基礎,因此說主從復制是 Redis 高可用的基礎。

■快速體驗

在?Redis?中,用戶可以通過執行?SLAVEOF?命令或者設置?slaveof?選項,讓一個服務器去復制另一個服務器,以下三種方式是?完全等效?的:

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

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

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

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

第一步:本地啟動兩個節點

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

# 創建一個端口為 6379 的 Redis 實例 redis-server --port 6379 # 創建一個端口為 6380 的 Redis 實例 redis-server --port 6380

此時兩個 Redis 節點啟動后,都默認為?主節點。

第二步:建立復制

我們在?6380?端口的節點中執行?slaveof?命令,使之變為從節點:

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

第三步:觀察效果

下面我們來驗證一下,主節點的數據是否會復制到從節點之中:

  • 先在?從節點?中查詢一個?不存在?的 key:

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

127.0.0.1:6379> SET mykey myvalue OK
  • 此時再從?從節點?中查詢,會發現已經從?主節點?同步到?從節點

127.0.0.1:6380> GET mykey "myvalue"

第四步:斷開復制

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

從節點執行?slaveof no one?之后,從節點和主節點分別打印日志如下:、

# 從節點打印日志 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')# 主節點打印日志 61467:M 17 Mar 2020 08:10:22.749 # Connection with replica 127.0.0.1:6380 lost.

■實現原理簡析

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

身份驗證 | 主從復制安全問題

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

那當然不能夠了,我們可以通過在?主節點?配置?requirepass?來設置密碼,這樣就必須在?從節點?中對應配置好?masterauth?參數?(與主節點?requirepass?保持一致)?才能夠進行正常復制了。

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

每次執行?SYNC?命令,主從服務器需要執行如下動作:

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

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

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

  • 特別是當出現?斷線重復制?的情況是時,為了讓從服務器補足斷線時確實的那一小部分數據,卻要執行一次如此耗資源的?SYNC?命令,顯然是不合理的。

    PSYNC 命令的引入

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

  • 全量復制:?用于初次復制或其他無法進行部分復制的情況,將主節點中的所有數據都發送給從節點,是一個非常重型的操作;

  • 部分復制:?用于網絡中斷等情況后的復制,只將?中斷期間主節點執行的寫命令?發送給從節點,與全量復制相比更加高效。需要注意?的是,如果網絡中斷時間過長,導致主節點沒有能夠完整地保存中斷期間執行的寫命令,則無法進行部分復制,仍使用全量復制;

  • 部分復制的原理主要是靠主從節點分別維護一個?復制偏移量,有了這個偏移量之后斷線重連之后一比較,之后就可以僅僅把從服務器斷線之后確實的這部分數據給補回來了。

    更多的詳細內容可以參考下方?參考資料 3

    三、Redis Sentinel 哨兵

    轉存失敗重新上傳取消

    上圖?展示了一個典型的哨兵架構圖,它由兩部分組成,哨兵節點和數據節點:

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

    • 數據節點:?主節點和從節點都是數據節點;

    在復制的基礎上,哨兵實現了?自動化的故障恢復?功能,下方是官方對于哨兵功能的描述:

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

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

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

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

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

    ■快速體驗

    第一步:創建主從節點配置文件并啟動

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

    轉存失敗重新上傳取消

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

    #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

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

    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

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

    轉存失敗重新上傳取消

    第二步:創建哨兵節點配置文件并啟動

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

    # 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?配置的含義是:該哨兵節點監控?127.0.0.1:6379?這個主節點,該主節點的名稱是?mymaster,最后的?2?的含義與主節點的故障判定有關:至少需要?2?個哨兵節點同意,才能判定主節點故障并進行故障轉移。

    執行下方命令將哨兵節點啟動起來:

    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?工具連接哨兵節點,并執行?info Sentinel?命令來查看是否已經在監視主節點了:

    # 連接端口為 26379 的 Redis 節點 ? ~ 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

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

    第三步:演示故障轉移

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

    ? ~ 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

    如果?剛殺掉瞬間?在哨兵節點中執行?info?命令來查看,會發現主節點還沒有切換過來,因為哨兵發現主節點故障并轉移需要一段時間:

    # 第一時間查看哨兵節點發現并未轉移,還在 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

    一段時間之后你再執行?info?命令,查看,你就會發現主節點已經切換成了?6381?端口的從節點:

    # 過一段時間之后在執行,發現已經切換了 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

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

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

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

    • 對于哨兵節點:?除了主從節點信息的變化,紀元(epoch)?(記錄當前集群狀態的參數)?也會變化,紀元相關的參數都 +1 了。

    ■客戶端訪問哨兵系統代碼演示

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

    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 提供哨兵節點集合和?masterName?,構造?JedisSentinelPool?對象,然后便可以像使用普通 Redis 連接池一樣來使用了:通過?pool.getResource()?獲取連接,執行具體的命令。

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

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

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

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

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

    轉存失敗重新上傳取消

    簡單來說 Sentinel 使用以下規則來選擇新的主服務器:

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

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

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

  • 四、Redis 集群

    轉存失敗重新上傳取消

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

    基本原理

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

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

    GET x -MOVED 3999 127.0.0.1:6381

    MOVED?指令第一個參數?3999?是?key?對應的槽位編號,后面是目標節點地址,MOVED?命令前面有一個減號,表示這是一個錯誤的消息??蛻舳嗽谑盏?MOVED?指令后,就立即糾正本地的?槽位映射表,那么下一次再訪問?key?時就能夠到正確的地方去獲取了。

    集群的主要作用

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

  • 高可用:?集群支持主從復制和主節點的?自動故障轉移?(與哨兵類似),當任一節點發生故障時,集群仍然可以對外提供服務。

  • ■快速體驗

    第一步:創建集群節點配置文件

    首先我們找一個地方創建一個名為?redis-cluster?的目錄:

    mkdir -p ~/Desktop/redis-cluster

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

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

    記得把對應上述配置文件中根端口對應的配置都修改掉?(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

    然后執行?ps -ef | grep redis?查看是否啟動成功:

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

    第三步:建立集群

    執行下列命令:

    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?的意思是:我們希望為集群中的每個主節點創建一個從節點。

    觀察控制臺輸出:

    轉存失敗重新上傳取消

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

    第四步:驗證集群

    我們先使用?redic-cli?任意連接一個節點:

    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 自動幫我們進行了?Redirected?操作跳轉到了?7001?這個實例上。

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

    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>

    ■數據分區方案簡析

    方案一:哈希值 % 節點數

    哈希取余分區思路非常簡單:計算?key?的 hash 值,然后對節點數量進行取余,從而決定數據映射到哪個節點上。

    不過該方案最大的問題是,當新增或刪減節點時,節點數量發生變化,系統中所有的數據都需要?重新計算映射關系,引發大規模數據遷移。

    方案二:一致性哈希分區

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

    轉存失敗重新上傳取消

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

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

    方案三:帶有虛擬節點的一致性哈希分區

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

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

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

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

    ■節點通信機制簡析

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

    兩個端口

    在?哨兵系統?中,節點分為?數據節點?和?哨兵節點:前者存儲數據,后者實現額外的控制功能。在?集群中,沒有數據節點與非數據節點之分:所有的節點都存儲數據,也都參與集群狀態的維護。為此,集群中的每個節點,都提供了兩個 TCP 端口:

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

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

    Gossip 協議

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

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

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

    消息類型

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

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

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

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

    • PONG消息:?PONG?消息封裝了自身狀態數據??梢苑譃閮煞N:第一種?是在接到?MEET/PING?消息后回復的?PONG?消息;第二種?是指節點向集群廣播?PONG?消息,這樣其他節點可以獲知該節點的最新信息,例如故障恢復后新的主節點會廣播?PONG?消息。

    • FAIL 消息:?當一個主節點判斷另一個主節點進入?FAIL?狀態時,會向集群廣播這一?FAIL?消息;接收節點會將這一?FAIL?消息保存起來,便于后續的判斷。

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

    ■數據結構簡析

    節點需要專門的數據結構來存儲集群的狀態。所謂集群的狀態,是一個比較大的概念,包括:集群是否處于上線狀態、集群中有哪些節點、節點是否可達、節點的主從狀態、槽的分布……

    節點為了存儲集群狀態而提供的數據結構中,最關鍵的是?clusterNode?和?clusterState?結構:前者記錄了一個節點的狀態,后者記錄了集群作為一個整體的狀態。

    clusterNode 結構

    clusterNode?結構保存了?一個節點的當前狀態,包括創建時間、節點 id、ip 和端口號等。每個節點都會用一個?clusterNode?結構記錄自己的狀態,并為集群內所有其他節點都創建一個?clusterNode結構來記錄節點狀態。

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

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

    除了上述字段,clusterNode?還包含節點連接、主從復制、故障發現和轉移需要的信息等。

    clusterState 結構

    clusterState?結構保存了在當前節點視角下,集群所處的狀態。主要字段包括:

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

    除此之外,clusterState?還包括故障轉移、槽遷移等需要的信息。

    更多關于集群內容請自行閱讀《Redis 設計與實現》,其中有更多細節方面的介紹 - http://redisbook.com/

    相關閱讀

  • Redis(1)——5種基本數據結構

  • Redis(2)——跳躍表

  • Redis(3)——分布式鎖深入探究

  • Reids(4)——神奇的HyperLoglog解決統計問題

  • Redis(5)——億級數據過濾和布隆過濾器

  • Redis(6)——GeoHash查找附近的人

  • Redis(7)——持久化【一文了解】

  • Redis(8)——發布/訂閱與Stream?

  • 參考資料

  • 《Redis 設計與實現》 | 黃健宏 著 - http://redisbook.com/

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

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

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

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

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

  • 高質量編程視頻shangyepingtai.xin

  • 總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    天天干天天拍 | 日韩欧美有码在线 | 夜夜夜夜操 | 丁香午夜婷婷 | 国产1区在线 | 深爱婷婷 | 亚洲电影自拍 | 久久久国内精品 | 国产精品福利无圣光在线一区 | 中文字幕在线视频国产 | 亚洲影院一区 | 韩日成人av | 久久96国产精品久久99漫画 | 色婷婷啪啪免费在线电影观看 | 在线观看黄色国产 | 日色在线视频 | 欧美激情精品久久久久 | 婷婷五月在线视频 | 欧美日韩一区二区在线观看 | 奇米先锋 | 91 在线视频播放 | 狠狠干天天干 | 久久久久久国产一区二区三区 | 99在线看 | 天天操天天操天天操天天操 | 国产尤物在线视频 | 日本激情动作片免费看 | 亚洲精品美女久久久 | 欧美日韩裸体免费视频 | 婷婷免费视频 | 四虎免费在线观看视频 | 久久久免费精品视频 | 天天鲁一鲁摸一摸爽一爽 | 成人av网站在线播放 | 91成人精品视频 | 国产精品网红福利 | 久久久免费观看视频 | 免费欧美 | 高清日韩一区二区 | 精品久久久免费 | avwww在线 | 日韩中文字幕免费在线观看 | 亚洲精品在线一区二区 | www黄在线| 2019中文字幕网站 | 精品国产电影一区 | 亚洲精品乱码久久久久久蜜桃动漫 | 欧美精品免费视频 | 日日干夜夜草 | 亚洲区二区 | 超碰人人在 | 日韩va欧美va亚洲va久久 | 欧美日韩国产二区 | 超碰免费av | 国内精品亚洲 | 日本视频不卡 | 精品欧美乱码久久久久久 | 日韩黄色免费看 | 视频在线国产 | 伊人亚洲综合网 | 免费在线观看污网站 | 在线黄色国产 | 在线观看小视频 | 久久综合九色综合欧美就去吻 | 久久一本综合 | 探花视频在线观看免费 | 日本视频久久久 | 深夜免费福利 | 超碰在线官网 | 在线观看黄色小视频 | 精品一区二区在线免费观看 | 日韩精品欧美一区 | 麻豆视频免费版 | 五月av在线 | a色视频| 日韩在线观看三区 | 天天干,天天射,天天操,天天摸 | 中文字幕在线视频第一页 | 精品国产一区二区三区噜噜噜 | 涩涩爱夜夜爱 | 久久综合电影 | 中文字幕在线观看一区二区三区 | 国产精品ssss在线亚洲 | 在线免费观看不卡av | 国产一区精品在线观看 | 97精品一区 | 2019久久精品 | 国产精品女同一区二区三区久久夜 | 一区二区视频在线看 | 丁香亚洲 | 国产黄色成人av | 久久久久成人精品免费播放动漫 | 午夜精品电影一区二区在线 | 91成人免费在线视频 | 精品一区二区在线播放 | 波多野结衣视频一区 | 天天艹天天 | 国产日韩欧美在线观看 | 中文字幕亚洲情99在线 | 99久久久久免费精品国产 | 国产精品私人影院 | 日日干夜夜爱 | www.国产在线观看 | 日韩久久久久久 | 亚洲精品久久久久58 | 在线观看91 | 久久久性 | 丁香五月亚洲综合在线 | 亚洲国产精品激情在线观看 | 人人射人人澡 | www.777奇米| 超碰在线观看99 | 欧美亚洲成人免费 | av免费观看高清 | 国产精品福利在线播放 | 欧美色就是色 | 91传媒视频在线观看 | av在线看片 | 国产永久免费高清在线观看视频 | 久在线| 偷拍精品一区二区三区 | 狠狠狠狠狠狠狠 | 黄在线免费看 | 欧美激情综合五月色丁香 | 久久这里精品视频 | 激情开心站 | 中文字幕乱码一区二区 | 日本公乱妇视频 | 成人激情开心网 | 涩涩在线 | 免费十分钟 | 亚洲综合激情网 | 在线免费观看一区二区三区 | 天天操人人要 | 婷婷丁香av | 成人av免费在线观看 | 国产成人精品国内自产拍免费看 | 欧美a免费| 免费黄色网址大全 | 免费网站在线观看成人 | 日韩精品中文字幕在线观看 | 91亚洲国产成人久久精品网站 | 日韩精品中文字幕在线不卡尤物 | 亚洲一级二级三级 | 色综合天天在线 | 免费日韩 精品中文字幕视频在线 | 999久久久久久久久 69av视频在线观看 | 三级毛片视频 | 久久久久国产精品免费 | 91精品国产91久久久久 | av在线免费观看不卡 | 91超国产 | 日韩视频一区二区在线 | 欧美国产91| 一区二区三区在线视频111 | 激情av在线资源 | 丁香激情综合 | 日韩欧美精品一区二区 | 中文字幕色在线视频 | 98涩涩国产露脸精品国产网 | 亚洲国产精品传媒在线观看 | 人人爽人人爽人人爽学生一级 | 天天操天天操天天操天天操天天操 | 91精品国自产拍天天拍 | 人人草人 | 亚洲国产中文字幕 | 黄色在线视频网址 | 国产一级淫片免费看 | 欧美一区二区三区在线视频观看 | 亚洲日韩欧美一区二区在线 | 在线成人性视频 | 天天伊人网 | 久久精品亚洲 | 婷婷在线观看视频 | av在线等 | 欧美热久久 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久草在线视频资源 | 色婷婷综合成人av | 成年人免费在线观看网站 | 日韩视频一区二区在线 | 五月婷婷综合激情网 | 色www精品视频在线观看 | 青草视频在线 | 九九九九精品 | 国产精品久久久久久久久久久久 | 久久无码av一区二区三区电影网 | 日日干天天 | 久久国产精品久久精品 | 国产97视频在线 | 免费在线观看av网址 | 毛片基地黄久久久久久天堂 | 国产成人福利在线观看 | 婷婷电影在线观看 | 中文字幕亚洲综合久久五月天色无吗'' | www.亚洲| 国产色在线观看 | 天天爽夜夜爽精品视频婷婷 | 成年人在线免费看片 | 精品国产一二三 | 久久中文欧美 | 日韩高清黄色 | 夜夜操天天| 97超视频 | 日韩av电影中文字幕在线观看 | 懂色av一区二区在线播放 | 天天夜夜亚洲 | 丁香视频全集免费观看 | 亚洲一区二区三区在线看 | 午夜色站 | 国产成人久久精品一区二区三区 | 午夜国产一区 | 最近中文字幕免费观看 | www.狠狠操 | 丁香视频五月 | 在线国产一区二区 | 亚洲精品日韩在线观看 | 国产精品24小时在线观看 | 亚洲一级免费观看 | 国产精品久久久久久久久久免费看 | 在线视频欧美日韩 | 午夜国产一区二区三区四区 | 91精品国产欧美一区二区 | 久久久久久久久网站 | 欧洲亚洲女同hd | 国产电影黄色av | 99久久一区 | 成人免费在线视频观看 | 日本mv大片欧洲mv大片 | 国产婷婷色 | 成人免费av电影 | 久久久久亚洲天堂 | 久久久亚洲精品 | 欧美日韩国产伦理 | 亚洲欧美在线观看视频 | 狠狠色丁香婷婷综合久小说久 | a天堂最新版中文在线地址 久久99久久精品国产 | 99久久久国产精品免费观看 | 日韩在线视频观看免费 | a黄色大片 | 亚洲特级毛片 | 97在线观| 免费的黄色的网站 | 99视频在线精品国自产拍免费观看 | 久久高清av | 成人三级av| 草久久影院 | 久久大视频 | 黄色大全视频 | 四虎成人精品 | 久久久久国产精品一区二区 | 欧美日韩一区二区在线 | 九九免费在线视频 | 国产激情电影综合在线看 | 91免费网站在线观看 | 日本精品久久久久中文字幕 | 91视频 - x99av| 久久成熟 | 中文在线8新资源库 | 午夜丁香网 | 奇米影音四色 | japanesexxxhd奶水 91在线精品一区二区 | 一性一交视频 | 亚洲人片在线观看 | 久草视频在线免费看 | 亚洲精品午夜aaa久久久 | 国产视频一二区 | 97日日碰人人模人人澡分享吧 | 中文字幕乱码电影 | 91av原创| 性色视频在线 | 久久兔费看a级 | 国产高清视频免费在线观看 | 天天射天| 99这里只有精品99 | 激情五月婷婷网 | 99免费在线播放99久久免费 | 91污污视频在线观看 | 日本午夜在线亚洲.国产 | 国产99精品在线观看 | 午夜av在线免费 | 中文字幕麻豆 | 五月婷婷在线视频观看 | 久久免费电影 | 天天狠狠干 | 麻豆视频在线免费 | 91精品国产乱码 | 日韩av一区二区三区 | 久久综合狠狠综合久久狠狠色综合 | 91成人天堂久久成人 | 久久精品毛片 | 久久ww | 久久草在线视频国产 | www视频在线观看 | 久久免费视频1 | 久久久久福利视频 | 久久国产精品99久久久久 | 国产精品一区二区久久精品爱微奶 | 日韩av中文在线观看 | 午夜国产一区二区三区四区 | 午夜久草| 嫩草av影院 | 久久y| 99精品视频在线观看 | www.久久久.cum | 成人影视免费看 | 国产成人一区二区精品非洲 | 天天色棕合合合合合合 | 国产中文字幕网 | 欧美一区二区三区在线看 | 日韩欧美专区 | 九九免费观看视频 | 一区二区三区在线免费观看 | 99电影 | 激情六月婷婷久久 | 婷婷激情网站 | av怡红院 | 久久精品国亚洲 | 日本精品久久久久中文字幕5 | 九九精品毛片 | 日韩视频一区二区三区在线播放免费观看 | 色网站在线免费 | 免费影视大全推荐 | www国产在线 | 五月天伊人网 | 日韩在线观看第一页 | 一区二区三区久久 | 亚洲欧美日韩中文在线 | 天天色天天操综合网 | 黄色三级av| 91香蕉久久 | 国产黄色片久久久 | 国产精品一区免费看8c0m | 操操色 | 丁香视频免费观看 | 国产一区二区不卡在线 | 久久66热这里只有精品 | 色噜噜日韩精品欧美一区二区 | 天天爱天天插 | 视频在线观看亚洲 | 久草网在线 | 麻豆免费在线播放 | 日韩中文字幕免费视频 | 国产a级精品 | 爱爱一区 | a级成人毛片 | 国产精品99爱 | 亚洲精品视频在线观看免费视频 | 日本在线观看一区 | 在线观看第一页 | 成年人免费在线观看网站 | 狂野欧美激情性xxxx欧美 | 久久久久国产精品视频 | 日本视频精品 | 欧美做受高潮1 | 久久国产精品久久久久 | 精品中文字幕在线播放 | 国产福利中文字幕 | 国产一级a毛片视频爆浆 | 91精品视屏 | 免费在线观看av网址 | 天天干天天干天天 | 久草精品视频在线播放 | 久草在线最新 | 在线观看福利网站 | 国产99黄 | 中文字幕欧美日韩va免费视频 | 久草视频免费看 | 极品嫩模被强到高潮呻吟91 | 国产一线天在线观看 | 在线观看91精品国产网站 | 久草av在线播放 | 91在线成人 | 欧美a级成人淫片免费看 | 三级黄在线 | 日韩视频在线观看免费 | 日韩 精品 一区 国产 麻豆 | av亚洲产国偷v产偷v自拍小说 | 免费观看的av网站 | 成人a大片 | 91精品毛片| 人人澡人人草 | 欧美日韩1区 | 国产高清无av久久 | 久久国产精品久久w女人spa | 精品国产一区二区三区av性色 | 国产美女被啪进深处喷白浆视频 | 天天综合色网 | 91c网站色版视频 | 午夜12点 | 最近免费在线观看 | 三级午夜片 | 精品黄色在线观看 | 免费三级影片 | 久久无码精品一区二区三区 | 日韩视频三区 | 欧美亚洲三级 | 日韩一区二区三免费高清在线观看 | 久久久www成人免费毛片 | 在线观看视频97 | 国产成年人av | 97超在线| 91精品啪啪 | 久久久久国产精品免费网站 | 天天插视频 | 国产伦精品一区二区三区在线 | 激情欧美一区二区免费视频 | 国产精品久久网 | 国产精品99久久久久人中文网介绍 | www久久精品| 国产一级高清视频 | 国产视频一区二区三区在线 | 成人久久影院 | 天天爱天天爽 | 超碰激情在线 | 日韩在线观看电影 | 久久三级毛片 | av九九| 精品在线小视频 | 亚洲国产色一区 | 久久开心激情 | 91精品国产亚洲 | 在线看片日韩 | 日韩一区正在播放 | 视频一区二区在线 | 天天操狠狠操 | 精品国产1区2区 | 国产黄色精品 | 国产精久久久久久妇女av | 精品国产一区二区三区久久影院 | 国产99久久久国产精品成人免费 | 久久久香蕉视频 | 国产精品高 | 草久久精品 | 国产一区二区电影在线观看 | 国产精品高潮呻吟久久久久 | 国产色啪 | 天天搞天天干 | 日韩中文字幕a | 正在播放久久 | 日韩精品一区二区三区三炮视频 | 国产区在线看 | 国产又粗又猛又爽又黄的视频先 | 国产在线 一区二区三区 | 手机成人av在线 | 日韩特级黄色片 | 最新久久久 | 欧美日韩国产精品爽爽 | 麻豆传媒视频观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 国产精品亚洲成人 | 国产精品久久久久久久久久久久午夜 | 国产精品久久久久久久久久久杏吧 | 不卡av电影在线 | 国产一区二区网址 | 一本色道久久综合亚洲二区三区 | 在线观看精品一区 | 在线看v片成人 | 丁香六月天婷婷 | 日日爽夜夜操 | 免费黄色a网站 | 91视频在线自拍 | 91在线国内视频 | 五月婷婷视频在线 | 国产不卡一区二区视频 | 91九色porny蝌蚪视频 | 91在线中字 | 国产在线观看免 | 中文字幕中文字幕在线中文字幕三区 | 视频在线在亚洲 | 久久精品久久精品久久39 | 在线天堂8√ | 国产精品久久久电影 | 欧美一区三区四区 | 人人爽爽人人 | 日本精品视频在线观看 | 美女久久久| 亚洲人久久久 | 国产精品一区二区三区在线 | 天天色天天操综合 | 香蕉网在线播放 | 伊人影院av | 黄色免费网站大全 | 综合五月 | 人人插人人搞 | 婷婷资源站 | 久久精品美女视频 | 亚洲综合成人婷婷小说 | 国产精品视频免费 | 精品一区二区三区久久 | 成人在线超碰 | 国产成人精品在线 | 超碰伊人网 | 亚洲v欧美v国产v在线观看 | 福利一区在线 | www.在线观看av | 日本黄色免费在线观看 | 色婷婷综合久久久 | 日韩一区二区三区免费视频 | 九九视频精品免费 | 亚洲动漫在线观看 | 国产精品欧美一区二区 | 精品久久久久久国产91 | 亚洲一区日韩精品 | 欧美午夜性生活 | 国产破处精品 | 欧美激情视频一二区 | 国产剧情在线一区 | 一区二区三区精品在线视频 | 天天久久夜夜 | 欧美少妇xxx | 日韩网站在线观看 | 麻花豆传媒mv在线观看 | 久久久穴| 日韩高清免费观看 | 成人免费大片黄在线播放 | 国产精品一区二区在线观看 | 三级性生活视频 | 久久久久久久久久久久久久av | 日韩综合一区二区 | 天天操天天操天天操天天操天天操 | 欧美日韩在线观看视频 | 国产精品一区在线观看你懂的 | 蜜桃麻豆www久久囤产精品 | 国产在线观看不卡 | 国产91精品久久久久久 | 亚洲精品88欧美一区二区 | 天天操天天干天天操天天干 | 久久免费的视频 | 久久免费视频4 | 欧美日韩国产精品一区 | 韩国在线一区 | 久久免费99 | 91色视频 | 精品美女国产在线 | 青青河边草免费直播 | 亚洲日本黄色 | 欧美国产不卡 | 免费观看第二部31集 | 国产在线91在线电影 | 国产精品成人av在线 | 9ⅰ精品久久久久久久久中文字幕 | 久久精品在线免费观看 | 五月婷婷在线视频 | 久热色超碰 | 亚洲精品乱码 | 午夜婷婷在线观看 | 亚洲精品午夜一区人人爽 | 亚洲国产精品日韩 | 亚洲色图色 | 在线 视频 亚洲 | 免费在线观看午夜视频 | 综合久久久久 | av观看在线观看 | 国产精品成人一区二区三区吃奶 | 天天操夜操视频 | 成人黄色视 | 国产黄a三级三级 | 久久久久久久久久久黄色 | 美女视频又黄又免费 | 国产精品一区二区在线看 | 午夜视频福利 | 九九九九九九精品 | 日日天天干 | 黄色大片免费网站 | 中国一区二区视频 | 色停停五月天 | 久久影院一区 | 国产在线观看一区 | 99这里只有久久精品视频 | 久久国产精品99久久久久 | 黄色片网站av | 天天天射| 日本精品视频在线 | 日韩av片在线 | 最近免费观看的电影完整版 | 黄色成人91 | 免费色视频网址 | 久久久久日本精品一区二区三区 | 日本一区二区三区免费观看 | 黄色软件网站在线观看 | 国产成人精品亚洲日本在线观看 | 在线91播放 | 激情视频一区二区三区 | 91秒拍国产福利一区 | 精品国产亚洲在线 | 麻豆影视在线播放 | 日日夜夜噜 | 日韩精品免费一区二区三区 | 国产999精品久久久影片官网 | 最新国产精品视频 | 国产区精品在线观看 | 视频在线观看入口黄最新永久免费国产 | 中文资源在线播放 | 在线看成人 | 亚洲美女精品区人人人人 | 天天操夜夜做 | 在线免费黄色av | 日本三级香港三级人妇99 | 成人在线视频你懂的 | 久久精品视频免费观看 | 日韩性色 | 天天躁日日躁狠狠躁 | 2020天天干夜夜爽 | 国产精品一区免费在线观看 | 玖玖999| 国产色在线视频 | 免费午夜视频在线观看 | 最新三级在线 | 国产aaa免费视频 | 狠狠色噜噜狠狠狠狠 | 国产精品免费视频网站 | 亚洲天堂精品 | 久久黄色片子 | 麻豆你懂的 | 在线三级av | 综合婷婷丁香 | 精品久久久久久久 | 国产 色 | av观看在线观看 | 国产午夜视频在线观看 | a级成人毛片 | 国产成人a亚洲精品v | 日韩精品久久久久久久电影竹菊 | 亚洲高清久久久 | 久草在线资源网 | 亚洲国产wwwccc36天堂 | 国产视频精品网 | 国产一区在线看 | 国产中文字幕三区 | 欧美日韩一区二区三区免费视频 | 91福利区一区二区三区 | 天堂av在线网| 久久蜜臀一区二区三区av | 久久亚洲私人国产精品va | 夜夜操网站 | 亚洲dvd| 在线超碰av | 欧美日韩中文视频 | 亚洲人成在线观看 | 在线日韩| 国产一区二区高清 | 日韩在线观看网站 | 欧美在线视频一区二区 | 国产午夜精品一区二区三区四区 | 欧美国产精品久久久久久免费 | 黄色一级免费网站 | av丝袜制服| 在线观看亚洲国产精品 | 国产高h视频 | 一本一本久久a久久精品综合妖精 | 亚洲精品国精品久久99热一 | 五月婷婷av| 亚洲一区二区精品3399 | 韩国av永久免费 | 欧美淫aaa免费观看 日韩激情免费视频 | 91精品办公室少妇高潮对白 | 国产91精品久久久久 | 日本视频不卡 | 国产一区二区三区免费在线观看 | 久久人人干 | 九九九毛片| 久久一级电影 | 国产精品久久久久久久99 | 成年人视频在线免费播放 | 国产成人福利在线观看 | 中文字幕免费观看视频 | 久草在线视频中文 | 一区二区三区四区五区在线 | 91av手机在线 | 亚洲精品白浆高清久久久久久 | 丁香婷婷色综合亚洲电影 | 人人爽人人看 | 97福利社| 国产精品麻豆果冻传媒在线播放 | 免费视频黄色 | 久热免费在线观看 | 在线观看视频黄色 | 国产中文字幕av | 超碰在线公开免费 | 欧美日韩在线免费观看视频 | 日韩在线无 | 亚洲天堂自拍视频 | 亚洲免费视频在线观看 | 免费特级黄毛片 | 黄p在线播放 | 国产乱码精品一区二区蜜臀 | 在线超碰av | 亚洲成人高清在线 | 97日日 | 99在线视频观看 | 成人久久国产 | 五月综合久久 | 综合色综合色 | 国产v在线播放 | 黄a在线观看 | 免费看一级一片 | 日本精油按摩3 | 久久精品亚洲综合专区 | 99精彩视频在线观看免费 | 色多多污污在线观看 | 成人欧美一区二区三区在线观看 | 午夜性色| 亚洲国产精品一区二区久久,亚洲午夜 | 一 级 黄 色 片免费看的 | 91成人久久 | 亚洲黄电影 | 久久精品79国产精品 | 日韩极品视频在线观看 | 亚洲国产剧情av | 久久成人国产精品免费软件 | 最近免费中文字幕 | 伊人热| 国产丝袜在线 | 久久国产高清视频 | 久久色中文字幕 | 久久艹在线 | 日日夜夜天天久久 | 国内精品久久久久久中文字幕 | 久久在线免费观看 | 又黄又刺激视频 | 久久久久麻豆 | 丁香六月网 | 成年人免费在线看 | 日韩欧美一区二区在线 | 亚洲精品字幕在线观看 | 国产一区二区在线免费视频 | 综合婷婷| 国产日韩欧美在线一区 | 久久国产精品一区二区三区 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 婷婷av在线| 亚在线播放中文视频 | 色资源网免费观看视频 | 日韩免费二区 | 奇米影视999| 免费看黄色毛片 | 日韩有色| 国产91丝袜在线播放动漫 | 最新日韩视频 | 国产99自拍 | 日韩区欧美久久久无人区 | 欧美少妇xxx | 97视频在线观看成人 | 正在播放久久 | 日韩a在线观看 | 一区二区三区四区精品视频 | 韩国一区二区三区视频 | 在线视频中文字幕一区 | 蜜臀av在线一区二区三区 | 日本乱码在线 | 国产精品国产亚洲精品看不卡 | 久久看免费视频 | 91精品人成在线观看 | 99视频精品全国免费 | 免费观看一级特黄欧美大片 | 国产黄色大片免费看 | 97国产精品一区二区 | 在线成人高清电影 | 亚洲欧美国产日韩在线观看 | 91久久久久久久一区二区 | 久久96国产精品久久99软件 | av大全在线播放 | 国产精品免费视频久久久 | www.黄色片网站 | 国产精品大尺度 | 亚洲一区二区精品在线 | 五月天电影免费在线观看一区 | 婷婷六月天天 | av成人资源| 日本精品久久久久 | 国产日产av | 亚洲综合色播 | 久久国产精品久久久久 | av中文字幕剧情 | 91在线视频免费 | 91av在线看| 91高清视频免费 | 国产黄色电影 | 91亚洲精品国偷拍自产在线观看 | 欧美另类sm图片 | 五月婷婷操| 日韩高清一二区 | 久久精品99国产精品亚洲最刺激 | 国产成人免费观看 | 国产久视频 | 尤物一区二区三区 | 国产91学生粉嫩喷水 | 免费视频成人 | 欧美精品黑人性xxxx | 日韩网 | 亚洲一区二区高潮无套美女 | 看av免费| 精品视频在线免费观看 | 精品久久久久久久久久久久久久久久久久 | 免费看精品久久片 | 十八岁免进欧美 | av在线直接看 | av无限看 | 欧美日韩国产在线一区 | 最新国产精品久久精品 | 911在线| 久久夜靖品 | 人人玩人人添人人 | 国产成人精品av在线 | 国产福利91精品一区二区三区 | 国产精品123| 天天射综合 | 国产亚洲永久域名 | 久久99影院 | 中文在线字幕免费观看 | 国产麻豆精品久久 | 黄色在线观看免费 | 91免费在线视频 | 久久毛片高清国产 | 在线视频a | 中国精品一区二区 | 日韩电影黄色 | 在线亚洲高清视频 | 色网站国产精品 | 日韩免费高清 | 丁香九月激情 | 91高清在线 | 国内久久精品视频 | 91久久人澡人人添人人爽欧美 | 在线看黄网站 | 免费看黄20分钟 | 四虎www.| 97综合网 | 日韩av网页| 69视频永久免费观看 | 91免费版在线观看 | 91视频88av | 2023亚洲精品国偷拍自产在线 | 天天操狠狠操 | 8x成人免费视频 | 色妞色视频一区二区三区四区 | 欧美aaa一级 | 国产在线视频一区二区 | 国产专区精品视频 | 日韩高清av在线 | 亚洲国产成人精品电影在线观看 | 精品国产aⅴ一区二区三区 在线直播av | 成人资源在线播放 | 99热精品在线观看 | 欧美日韩亚洲第一页 | 亚洲精品一区二区久 | 毛片网站在线观看 | 成年人在线免费看视频 | 五月天激情在线 | 激情av在线资源 | 手机成人在线 | 一级黄色片在线播放 | 成人a级黄色片 | 在线视频免费观看 | 丁香六月久久综合狠狠色 | 日韩电影精品一区 | 欧美色伊人 | 天天做日日做天天爽视频免费 | 亚洲精品视频在线观看免费视频 | 免费网站在线 | 国产r级在线观看 | 中文字幕日韩高清 | 91成人在线观看喷潮 | av一区二区三区在线观看 | 色综合久久久久久中文网 | 日韩午夜电影院 | 亚洲综合视频在线观看 | 久久久穴| 国产精品久久久久久久久久久免费看 | 欧美成人精品在线 | 一区二区 精品 | 九九久久久久99精品 | 亚洲一区视频在线播放 | 国产亚洲精品精品精品 | 国产又黄又硬又爽 | 2021国产在线 | 久久精品91视频 | 国产不卡精品视频 | 欧美激情精品久久久久 | 久久久网址 | 狠狠狠干狠狠 | 中文视频在线播放 | 亚洲日韩欧美一区二区在线 | 亚洲成人av一区 | 国产精品欧美久久久久三级 | 中文字幕精品三级久久久 | 成人99免费视频 | 久久久久久久久久久影院 | 国产精品久久久久久久久大全 | 在线观看韩日电影免费 | 婷婷激情5月天 | 国内综合精品午夜久久资源 | 欧美精品久久久久久久亚洲调教 | 欧美一级电影在线观看 | 婷婷久久综合九色综合 | 天天色天天综合 | 一区二区精品视频 | 中文字幕在线中文 | 丁香六月婷婷综合 | 欧美日韩伦理在线 | 日韩高清久久 | 国产一线二线三线性视频 | 麻豆91小视频 | 超碰在线官网 | 亚洲黄色成人 | 天天舔夜夜操 | 日日夜夜国产 | 亚洲国产欧洲综合997久久, | 国产精品99免视看9 国产精品毛片一区视频 | 青草视频在线看 | 亚洲视频资源在线 | 日韩二区三区 | 国产免费影院 | 国产精品一区二区av影院萌芽 | 99久久精品国产毛片 | 国产精品久久久久久久久久妇女 | 国产精品女人久久久久久 | 婷婷久操 | 天天摸天天操天天舔 | 中文字幕资源网 国产 | 免费av的网站 | 色婷婷丁香 | 亚洲一区二区三区精品在线观看 | 欧美日韩高清免费 | 精品国产一区二区三区久久久蜜月 | 奇米网在线观看 | 国产在线视频资源 | 国产精品免费看久久久8精臀av | 久久成人在线 | 视频在线亚洲 | 色婷婷国产在线 | 精品国产乱码久久久久 | 国产首页 | 免费看的黄色 | 亚洲国内精品 | 国产精品手机看片 | 色偷偷男人的天堂av | 国产一区二区在线播放视频 | 国产精品免费在线 | 毛片1000部免费看 | 成人在线视频论坛 | 免费看特级毛片 | 五月婷婷电影网 | 国产精品二区在线 | 中文字字幕在线 | 色88久久| 国产99久久99热这里精品5 | 天天爱天天射天天干天天 | 成人a视频 | 国产xvideos免费视频播放 | 久青草影院 | 久草视频一区 | 亚洲精品在线视频网站 | 国产xxxxx在线观看 | 国产精品孕妇 | 中文国产字幕在线观看 | 国内精品视频久久 | 国产色视频123区 | 国产一区二区在线免费播放 | 国产在线欧美日韩 | 在线a人v观看视频 | 中文字幕一区二区三 | 欧美精品一区二区免费 | 成人久久视频 | 色资源网免费观看视频 | 国产在线视频一区二区三区 | 久久9视频 | 国产一区二区三区高清播放 | 日韩天天综合 | 亚洲成人资源 | 玖玖999| 国产a级免费| 97超碰人人澡人人爱 | 精品a视频 | 蜜臀av性久久久久蜜臀aⅴ流畅 | av一级片网站 | 在线看欧美 | 欧美日韩三级 | av中文在线观看 | av天天澡天天爽天天av | 国产精品久久久久久久久久久杏吧 | 久久情网 | 精品国产一区二区三区久久久 | 日本中文在线播放 | 色婷婷激情电影 | 国产手机视频精品 | 在线国产视频一区 | 一级片视频在线 | 中文字幕 婷婷 | 亚洲精品乱码 | 亚洲视频在线免费观看 | 久久久久久久久久久久久久电影 | 久久免费国产精品1 | 亚洲国产成人在线观看 | 超碰在线色 | 国产精品不卡在线观看 | 国产一级在线免费观看 |