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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5

發布時間:2023/12/14 java 27 豆豆

目錄

  • 一、[集群]入門實踐教程
    • 1.Redis 集群概述
      • 1)Redis 主從復制
      • 2)Redis 哨兵
      • 3)Redis 集群化
    • 2.主從復制
      • 1)主從復制主要的作用
      • 2)快速體驗
        • ①、第一步:本地啟動兩個節點
        • ②、第二步:建立復制
        • ③、第三步:觀察效果
        • ④、第四步:斷開復制
      • 3)實現原理簡析
        • ①、身份驗證 | 主從復制安全問題
        • ②、SYNC 命令是一個非常耗費資源的操作
        • ③、PSYNC 命令的引入
    • 3.Redis Sentinel 哨兵
      • 1)快速體驗
        • ①、第一步:創建主從節點配置文件并啟動
        • ②、第二步:創建哨兵節點配置文件并啟動
        • ③、第三步:演示故障轉移
      • 2)客戶端訪問哨兵系統代碼演示
        • ①、客戶端原理
      • 3)新的主服務器是怎樣被挑選出來的?
    • 4.Redis 集群
      • 1)基本原理
      • 2)集群的主要作用
      • 3)快速體驗
        • ①、第一步:創建集群節點配置文件
        • ②、第二步:分別啟動 6 個 Redis 實例
        • ③、第三步:建立集群
        • ④、第四步:驗證集群
      • 5)數據分區方案簡析
        • ①、方案一:哈希值 % 節點數
        • ②、方案二:一致性哈希分區
        • ③、方案三:帶有虛擬節點的一致性哈希分區
      • 6)節點通信機制簡析
        • ①、兩個端口
        • ②Gossip 協議
        • ③、消息類型
      • 7)數據結構簡析
        • ①、clusterNode 結構
        • ②、clusterState 結構

一、[集群]入門實踐教程

1.Redis 集群概述

1)Redis 主從復制

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

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

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

2)Redis 哨兵

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

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

3)Redis 集群化

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

2.主從復制


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

1)主從復制主要的作用

  • 數據冗余: 主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。
  • 故障恢復: 當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復 (實際上是一種服務的冗余)。
  • 負載均衡: 在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務 (即寫 Redis 數據時應用連接主節點,讀 Redis 數據時應用連接從節點),分擔服務器負載。尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高 Redis 服務器的并發量。
  • 高可用基石: 除了上述作用以外,主從復制還是哨兵和集群能夠實施的 基礎,因此說主從復制是 Redis 高可用的基礎。

2)快速體驗

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 實例:

# 創建一個端口為 6379Redis 實例 redis-server --port 6379 # 創建一個端口為 6380Redis 實例 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.

3)實現原理簡析


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

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

在上面的 快速體驗 過程中,你會發現 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): 哨兵可以將故障轉移的結果發送給客戶端。

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

    1)快速體驗

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

    正確安裝好 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 檢查一下主從狀態是否正常:(可以看到下方正確地顯示了兩個從節點)


    小插曲:
    更多阿里、騰訊、美團、京東等一線互聯網大廠Java面試真題;包含:基礎、并發、鎖、JVM、設計模式、數據結構、反射/IO、數據庫、Redis、Spring、消息隊列、分布式、Zookeeper、Dubbo、Mybatis、Maven、面經等。
    更多Java程序員技術進階小技巧;例如高效學習(如何學習和閱讀代碼、面對枯燥和量大的知識)高效溝通(溝通方式及技巧、溝通技術)
    更多Java大牛分享的一些職業生涯分享文檔


    請點擊這里添加》》》》》》》》》社群,免費獲取


    比你優秀的對手在學習,你的仇人在磨刀,你的閨蜜在減肥,隔壁老王在練腰, 我們必須不斷學習,否則我們將被學習者超越!
    趁年輕,使勁拼,給未來的自己一個交代!

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

    按照上面同樣的方法,我們給哨兵節點也創建三個配置文件。(哨兵節點本質上是特殊的 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 命令來查看是否已經在監視主節點了:

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

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

    上面我們在 快速體驗 中主要感受到了服務端自己對于當前主從節點的自動化治理,下面我們以 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 頻道,當收到消息時,重新初始化連接池。
  • 3)新的主服務器是怎樣被挑選出來的?

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

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

  • 在失效主服務器屬下的從服務器當中, 那些被標記為主觀下線、已斷線、或者最后一次回復 PING 命令的時間大于五秒鐘的從服務器都會被 淘汰
  • 在失效主服務器屬下的從服務器當中, 那些與失效主服務器連接斷開的時長超過 down-after 選項指定的時長十倍的從服務器都會被 淘汰
  • 經歷了以上兩輪淘汰之后 剩下來的從服務器中, 我們選出 復制偏移量(replication offset)最大 的那個 從服務器 作為新的主服務器;如果復制偏移量不可用,或者從服務器的復制偏移量相同,那么 帶有最小運行 ID 的那個從服務器成為新的主服務器。
  • 4.Redis 集群


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

    1)基本原理


    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 時就能夠到正確的地方去獲取了。

    2)集群的主要作用

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

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

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


    小插曲:
    更多阿里、騰訊、美團、京東等一線互聯網大廠Java面試真題;包含:基礎、并發、鎖、JVM、設計模式、數據結構、反射/IO、數據庫、Redis、Spring、消息隊列、分布式、Zookeeper、Dubbo、Mybatis、Maven、面經等。
    更多Java程序員技術進階小技巧;例如高效學習(如何學習和閱讀代碼、面對枯燥和量大的知識)高效溝通(溝通方式及技巧、溝通技術)
    更多Java大牛分享的一些職業生涯分享文檔


    請點擊這里添加》》》》》》》》》社群,免費獲取


    比你優秀的對手在學習,你的仇人在磨刀,你的閨蜜在減肥,隔壁老王在練腰, 我們必須不斷學習,否則我們將被學習者超越!
    趁年輕,使勁拼,給未來的自己一個交代!

    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:2727 127.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>

    5)數據分區方案簡析

    ①、方案一:哈希值 % 節點數

    哈希取余分區思路非常簡單:計算 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 后,數據在其他節點的分布仍然較為均衡。

    6)節點通信機制簡析

    集群的建立離不開節點之間的通信,例如我們上訪在 快速體驗 中剛啟動六個集群節點之后通過 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 消息封裝了自身狀態數據。可以分為兩種:第一種 是在接到 MEET/PING 消息后回復的 PONG 消息;第二種 是指節點向集群廣播 PONG 消息,這樣其他節點可以獲知該節點的最新信息,例如故障恢復后新的主節點會廣播 PONG 消息。
    • FAIL 消息: 當一個主節點判斷另一個主節點進入 FAIL 狀態時,會向集群廣播這一 FAIL 消息;接收節點會將這一 FAIL 消息保存起來,便于后續的判斷。
    • PUBLISH 消息: 節點收到 PUBLISH 命令后,會先執行該命令,然后向集群廣播這一消息,接收節點也會執行該 PUBLISH 命令。

    7)數據結構簡析

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

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

    ①、clusterNode 結構

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

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

    typedef struct clusterNode { //節點創建時間 mstime_t ctime; //節點id char 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結構的指針;如果槽還沒有分配給任何節點,則為NULL clusterNode *slots[16384]; ………… } clusterState;

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

    總結

    以上是生活随笔為你收集整理的Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    国模一区二区三区四区 | 亚洲热视频 | 久久久久久久网站 | 天天操天天色天天 | 国产精品99精品 | 免费在线国产精品 | 亚洲国产偷 | 中文字幕在线久一本久 | 欧美成人h版在线观看 | 在线va视频| 毛片在线播放网址 | 久久久久久久久久久福利 | 日韩乱色精品一区二区 | 国产手机视频在线 | 亚洲精品综合一二三区在线观看 | av成人在线看 | 国产午夜精品在线 | 九九九在线 | 亚洲经典中文字幕 | 久久久国产精品免费 | 久久免费福利视频 | 日韩专区视频 | 伊人久久婷婷 | 日本午夜免费福利视频 | 九九久久久 | 91av美女| 在线观看91av | 在线观看国产麻豆 | 亚洲资源在线网 | 久久精品国产亚洲精品2020 | 中文字幕黄色网址 | 久久99精品国产 | 久久国产精品一区二区三区 | 天堂麻豆 | 国产精品18久久久久久久久 | 欧美精品久久久久久久久老牛影院 | 91成人免费在线 | 日韩成人看片 | 看全黄大色黄大片 | 最新av网址在线观看 | 97精品超碰一区二区三区 | 成人av免费电影 | 欧美精品一区二区三区一线天视频 | 狠狠网亚洲精品 | 一本一本久久a久久精品综合 | 亚洲综合视频在线 | 丁香六月激情 | 国产精品久久久久久久久久久久午夜 | 日日草视频 | 黄色网址国产 | 色综合天天综合在线视频 | 中文字幕在线一区二区三区 | 久久成视频 | 亚洲综合五月 | 欧美色插 | 91精品国产99久久久久久红楼 | 色天天 | 97精品国产91久久久久久 | 右手影院亚洲欧美 | av五月婷婷 | 国产成人一区二区三区影院在线 | 精品视频区| 日本精品xxxx | 欧美巨乳网 | 日韩二区精品 | 婷婷色伊人 | 免费av大片 | 国产精品v欧美精品v日韩 | 中文字幕中文字幕 | 伊人久久五月天 | 国产精品久久久久免费 | 日韩欧美在线观看一区二区三区 | 久av在线 | 国产精品理论在线观看 | 97超碰免费 | 午夜电影 电影 | 91日韩在线专区 | 日韩二级毛片 | 欧美一级在线观看视频 | 9在线观看免费高清完整 | 色婷婷狠狠五月综合天色拍 | 亚洲精品 在线视频 | 久久亚洲私人国产精品va | 成人教育av | 91chinese在线| 日韩精品一区二区免费视频 | 久久精品资源 | 中文字幕日韩一区二区三区不卡 | 中文国产在线观看 | 狠狠的日 | 91精品一区国产高清在线gif | 日韩av午夜在线观看 | 99精品视频在线看 | 91看片网址 | 免费日韩| 激情五月开心 | 一区二区在线影院 | 日韩高清在线看 | 美女av免费 | 国产伦精品一区二区三区照片91 | 91传媒在线 | 99午夜| 视频一区二区在线观看 | 国产一区二区三区免费观看视频 | 精品国产免费人成在线观看 | 免费中文字幕 | 亚洲视频在线观看免费 | 久久 在线 | 九九热有精品 | 成人av一区二区在线观看 | 国产精品一区二区av麻豆 | 在线日韩亚洲 | 一区二区伦理 | 国产成人在线观看免费 | 操操操天天操 | 婷婷在线精品视频 | 日韩精品电影在线播放 | 亚洲精品tv久久久久久久久久 | 麻豆va一区二区三区久久浪 | 国产清纯在线 | www.69xx| 免费不卡中文字幕视频 | 国色综合 | 色88久久| 精品久久久久久国产偷窥 | 欧美成人aa | 成人欧美一区二区三区黑人麻豆 | 天天操天天综合网 | 国产999久久久 | 免费男女羞羞的视频网站中文字幕 | 五月婷婷精品 | 成人久久久电影 | 亚洲成人国产 | 最近最新最好看中文视频 | 婷婷国产在线观看 | 1000部国产精品成人观看 | a爱爱视频| 九九九热 | 欧美动漫一区二区三区 | www.伊人网| 亚洲免费在线播放视频 | 久久久综合色 | 三级黄色免费片 | 久久精品国产精品亚洲 | 国产精品大片在线观看 | 久久久香蕉视频 | 免费视频黄色 | 国产精品久久综合 | 日日夜夜人人天天 | 国产成人综合精品 | 又黄又爽又湿又无遮挡的在线视频 | av 一区二区三区四区 | 中文字幕亚洲在线观看 | a视频免费在线观看 | 视频一区二区精品 | 色综合天天做天天爱 | 日韩 在线a | 日韩手机在线观看 | 日韩在线视频国产 | 激情久久综合网 | 欧美色精品天天在线观看视频 | 国产高清视频在线观看 | 日韩电影黄色 | 五月天激情综合 | 久久综合色影院 | 亚洲一区二区三区精品在线观看 | 中文字幕在线视频一区 | 国产最新在线视频 | 99久久精品无码一区二区毛片 | 国产91九色蝌蚪 | 黄色av一级| 久久国产精品二国产精品中国洋人 | 国产免费观看久久黄 | 午夜影院日本 | www日韩在线观看 | 国产成人精品日本亚洲999 | 欧美日韩国产成人 | 久久国产精品免费看 | 热久久免费视频 | 草久视频在线观看 | 乱子伦av| 一级久久久 | 国产四虎在线 | 狠狠色丁香九九婷婷综合五月 | 伊人狠狠 | 天天草天天插 | 操操色 | 久久人人精品 | 免费成人看片 | 91私密视频 | 久草在线中文888 | 亚洲人成人在线 | 亚洲免费av网站 | 探花视频免费在线观看 | 美女黄视频免费看 | 日日干干夜夜 | 91福利社区在线观看 | 欧美一区二区三区不卡 | 人人爽人人爽人人爽学生一级 | 久久久久久久久久久影院 | 91视频啪 | 欧美亚洲专区 | 五月婷婷久久丁香 | 日韩综合在线观看 | 丁香资源影视免费观看 | 亚洲视频综合在线 | 天天干天天干天天操 | 国产一级一片免费播放放 | 国产成人精品亚洲a | 91亚洲精品久久久蜜桃网站 | 亚洲无毛专区 | 黄色小网站在线 | 99免在线观看免费视频高清 | 国产精品一区二区久久精品爱微奶 | 久久99精品久久久久久清纯直播 | 国产在线a视频 | 国产在线欧美在线 | 日本视频网 | 人人爽人人爽人人片 | 亚洲综合小说 | 精品中文字幕在线观看 | 国内精品久久久久久久 | 亚洲成人av电影 | 2018好看的中文在线观看 | 91av在线电影 | 精品一区欧美 | 国产99久久| a级黄色片视频 | 国产人成一区二区三区影院 | 亚洲亚洲精品在线观看 | 99精品免费 | 国产亚洲在线视频 | 手机成人免费视频 | 一级性视频 | 日韩在线观看免费 | 麻豆一级视频 | 奇米网8888 | 丝袜美女在线 | 成人资源在线 | 外国av网| 久久在线一区 | 欧美日韩视频一区二区三区 | 国产精品免费一区二区三区在线观看 | 国内久久精品 | 在线不卡中文字幕播放 | 国产精品高潮呻吟久久av无 | 国产精品自产拍在线观看网站 | 婷婷亚洲最大 | 亚洲欧美综合 | 国产伦精品一区二区三区照片91 | 亚洲婷婷综合色高清在线 | 国产毛片久久久 | 中文字幕亚洲综合久久五月天色无吗'' | 国产精品毛片久久 | 日韩爱爱网站 | 午夜精品久久久久久久99 | 福利一区二区在线 | 中文字幕永久免费 | 免费在线观看av不卡 | 91麻豆精品国产 | 欧美精品乱码久久久久久按摩 | 五月花激情 | 成人免费在线视频 | 99久久精品久久久久久动态片 | www.色爱| www亚洲一区 | 五月婷婷丁香网 | 亚洲成人午夜在线 | 亚洲国产精品成人va在线观看 | 99精品视频精品精品视频 | 久久99亚洲精品久久 | 日韩色中色 | 婷婷网址 | 国产中文a | 丁香婷婷深情五月亚洲 | japanese黑人亚洲人4k | 东方av免费在线观看 | 中文字幕色婷婷在线视频 | 日韩在线免费 | 9在线观看免费高清完整版在线观看明 | 亚洲成人精品久久 | 久久综合射 | 亚洲婷婷丁香 | 色婷婷丁香 | 成人h视频在线播放 | 亚洲欧洲国产日韩精品 | 中文字幕高清有码 | 91激情视频在线观看 | 99久久婷婷国产 | 久久久精品国产一区二区电影四季 | 米奇影视7777 | 男女全黄一级一级高潮免费看 | 亚洲精品乱码久久久久久蜜桃欧美 | 中文字幕在线第一页 | 日本一区二区三区视频在线播放 | 91精品久久香蕉国产线看观看 | 日韩有码欧美 | 精品成人免费 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产精品久久久久久久久久久久久久 | 操高跟美女 | 国产精彩视频 | 中文av在线播放 | 国产高清区 | 日韩区欧美久久久无人区 | 久久草在线精品 | 国产成人综合在线观看 | 日韩欧美高清一区二区 | 91视频在线国产 | 永久免费毛片 | 国产aaa毛片 | 日韩在线视频网站 | 日韩一区二区免费在线观看 | 亚洲丁香久久久 | 4hu视频 | 日韩影视精品 | 欧美成人精品欧美一级乱黄 | 亚洲国内精品 | 在线亚州 | 国色天香第二季 | 国产精品99久久久久人中文网介绍 | 又黄又爽又湿又无遮挡的在线视频 | 2020天天干夜夜爽 | 中文字幕免费观看 | 激情在线免费视频 | 日韩欧美高清一区二区三区 | 色网站在线免费观看 | 欧美成亚洲 | av综合av| 一区在线播放 | 亚洲毛片视频 | 亚洲精品久久久蜜桃 | 91高清视频 | 成人三级网站在线观看 | 激情电影影院 | 特级毛片在线免费观看 | 国产在线视频资源 | 婷婷激情综合五月天 | 免费h漫在线观看 | 国产成a人亚洲精v品在线观看 | 国产精品久久久久一区二区三区共 | 国产日韩一区在线 | 天天操福利视频 | 天天草综合网 | 午夜在线国产 | 国产精品久久视频 | 中文字幕网址 | 亚洲精品永久免费视频 | 免费三级黄色 | 日韩精品一区二区三区第95 | 久久一区精品 | 日韩久久久久久久久久久久 | 久久精品国产久精国产 | 91爱在线| 日日操日日插 | 一区二区三区四区精品 | 久久精品美女视频网站 | 国产成人精品一区二三区 | 九九视频网站 | 国产亚洲片 | a级片久久久 | 色噜噜在线观看视频 | 日日摸日日添日日躁av | 婷婷电影网 | 一区二区三区四区五区六区 | 中文字幕在线人 | 亚洲综合在线观看视频 | 日本黄色免费在线观看 | 久久手机免费观看 | 日韩欧美视频一区二区三区 | 91你懂的| 人人干干人人 | 久久精品欧美一区 | 免费观看完整版无人区 | 一级c片| 婷婷色网 | 久久激情久久 | 69国产精品成人在线播放 | av一区二区三区在线播放 | 欧美激情在线网站 | 日日摸日日添夜夜爽97 | 国产流白浆高潮在线观看 | 日日夜夜免费精品视频 | 97av精品| 97超碰在线资源 | 精品久久久久亚洲 | 日韩另类在线 | 在线观看黄色大片 | 欧美激精品 | 日韩综合视频在线观看 | 玖玖爱在线观看 | 99精品免费视频 | 久久精品99国产精品酒店日本 | 国产99久久精品一区二区永久免费 | 一区二区三区四区久久 | 亚洲久久视频 | 在线观看国产日韩欧美 | 91成人免费在线视频 | 亚洲影院一区 | 久99视频| 一本色道久久综合亚洲二区三区 | 日本中文字幕观看 | 欧美一级淫片videoshd | 国产一区二区高清不卡 | 亚洲 成人 一区 | 97香蕉超级碰碰久久免费软件 | 毛片美女网站 | 国产成人精品综合久久久 | 亚洲精品乱码久久久久久蜜桃91 | 色视频网址 | 国产一区在线视频播放 | 国产精品99精品 | 精品久久久国产 | 91久久精品一区二区二区 | 色婷婷久久一区二区 | 在线看片一区 | 久久精品牌麻豆国产大山 | 亚洲精品乱码久久 | 欧美精品一区二区三区一线天视频 | 五月香视频在线观看 | 69国产盗摄一区二区三区五区 | 国产精品久久久久久久电影 | 丁香五婷 | 久久精品香蕉 | 免费av大片 | 四虎国产精品免费观看视频优播 | 日韩欧美视频免费在线观看 | 99久久精品国产网站 | 亚洲天堂网在线视频观看 | www.狠狠操.com | 国产精品久久久久久久久久久久午夜 | 九九免费观看全部免费视频 | 九九在线国产视频 | 日日干,天天干 | 亚洲精品免费在线观看 | 国产精品久久电影观看 | 天天操天天干天天综合网 | 国产精久久久久久妇女av | 最近字幕在线观看第一季 | 麻豆精品视频在线观看免费 | 久久狠狠一本精品综合网 | 成年人在线看视频 | 成人午夜黄色影院 | 久久午夜色播影院免费高清 | 黄色资源在线观看 | 麻豆91精品视频 | 国产短视频在线播放 | 狠狠狠色丁香婷婷综合激情 | 天天操天天操天天操天天操天天操 | 天天综合网~永久入口 | av大全在线免费观看 | 亚洲片在线资源 | 欧洲精品二区 | 久久成年视频 | 亚洲一区 影院 | 国产精品久久久久久久久久久免费看 | 日韩在线视频免费播放 | 久久久久国产免费免费 | 亚洲精品乱码 | 欧美一级免费片 | 亚洲精品乱码久久久一二三 | 欧美一级性 | 免费看国产黄色 | 探花视频在线观看免费版 | zzijzzij亚洲成熟少妇 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 亚洲高清精品在线 | 一区二区视频在线观看免费 | 伊人春色电影网 | 99精品99 | 九九在线国产视频 | 在线91播放 | 欧美日韩国产区 | 日韩精品视频免费专区在线播放 | 日韩在线视频网站 | 久久99精品视频 | 中文字幕免费 | 欧美99精品 | 欧美亚洲国产日韩 | 久草视频中文在线 | 欧美精品久久99 | 一区中文字幕在线观看 | 国产精品久久久久久久久费观看 | 五月开心激情网 | 日韩av女优视频 | 黄色成人在线 | 伊人色综合久久天天网 | 色多多污污在线观看 | 欧美日韩xxxxx| 婷婷四房综合激情五月 | 亚洲精选视频免费看 | 久久婷婷精品视频 | 黄色小说网站在线 | 国内一级片在线观看 | 在线一二三区 | 狠狠地日 | 97视频在线观看网址 | 久久久久久片 | 欧美日韩精品在线一区二区 | 精品久久91 | 91爱在线 | 欧美日韩国产高清视频 | 久久久久久电影 | 中文字幕观看在线 | 91人人澡人人爽人人精品 | 日韩电影一区二区三区在线观看 | 欧美精品在线观看 | 亚洲一区美女视频在线观看免费 | 最近日韩免费视频 | 免费在线观看成人 | 国产精品久久久久久久婷婷 | 国产一区免费在线 | 黄色小说免费观看 | 美女网站视频免费黄 | sesese图片 | 欧美视频日韩视频 | www.午夜色.com| 911av视频 | 久久99国产精品久久 | 99精品在线观看 | 91精品免费 | 色综合久久综合网 | 国产玖玖视频 | 久久综合色8888 | 国产精品热视频 | 日韩在线免费观看视频 | 一区久久久| av一级一片| 亚洲成人黄色av | 天堂av官网| 国产999精品久久久久久绿帽 | 日本久久久久久科技有限公司 | 在线天堂视频 | 亚洲精品视频一 | 99精品视频精品精品视频 | 久久国产精品久久久久 | 日韩视频一区二区 | 欧美日韩精品影院 | 在线观看黄色免费视频 | 久久精品4 | 99 国产精品| 久久精品区 | 亚洲电影院 | 欧美一二三视频 | 99精品国产免费久久 | 四虎在线观看精品视频 | 91成人精品一区在线播放 | 伊人资源站| 国产精品美女视频网站 | 国产91精品一区二区绿帽 | 欧美一级看片 | 97免费在线观看 | 午夜av大片 | 日韩av在线网站 | 免费国产视频 | 狠狠躁18三区二区一区ai明星 | 1000部18岁以下禁看视频 | 国产一在线精品一区在线观看 | 免费色视频 | 久久综合中文色婷婷 | 麻豆久久一区 | 黄av免费在线观看 | 婷婷丁香激情网 | 久久亚洲视频 | 天天av在线播放 | 国产二区视频在线 | 国产青春久久久国产毛片 | www日日夜夜| 很黄很污的视频网站 | 九九久久国产精品 | 九九久久精品视频 | 国产视频2区 | 日韩在线观看av | 国产精品21区 | 99久久国产免费,99久久国产免费大片 | 一区二区三区国产精品 | 亚洲欧美日韩一区二区三区在线观看 | 国产精品青草综合久久久久99 | 麻豆免费精品视频 | 国产成人中文字幕 | 亚洲日b视频 | 国产韩国日本高清视频 | 91av中文 | 日韩伦理片一区二区三区 | 99色精品视频 | 久久高清 | 久久精品79国产精品 | 欧美日韩不卡一区二区 | 国产福利91精品一区 | 99视频这里有精品 | 天天草天天摸 | 亚洲一区不卡视频 | 一级国产视频 | 久久精品香蕉视频 | 亚洲精品视频在线播放 | 国产精品九九九 | 国产精品久久久影视 | 国产亚洲人| 亚洲免费视频在线观看 | 欧美日韩性视频 | 99国产在线视频 | 国产亚洲精品久久久久久久久久 | 久久五月情影视 | 国产又粗又猛又黄又爽视频 | 国产一级视屏 | 精品国产自在精品国产精野外直播 | 精品毛片在线 | 免费黄色激情视频 | 一区在线播放 | 日韩电影精品 | 在线国产一区二区 | 国产精品永久免费观看 | 久久久久久久久毛片 | 久草网免费 | 91高清一区 | 国产成人一区二区三区电影 | 欧美日韩高清一区二区 国产亚洲免费看 | 欧美一级片在线播放 | 超碰资源在线 | 欧美91视频| 日韩免费视频一区二区 | 丰满少妇一级 | 亚洲国产日韩在线 | 国内精品福利视频 | 国产精品久久久区三区天天噜 | 久久久国产精品人人片99精片欧美一 | 亚洲五月 | 最新国产精品拍自在线播放 | 丁香婷婷综合激情五月色 | 中文字幕精品一区久久久久 | 91免费高清 | 最近中文字幕高清字幕免费mv | 日日干干 | 中文字幕日韩国产 | 日日麻批40分钟视频免费观看 | 91中文字幕网 | av在线专区 | 国产亚洲午夜高清国产拍精品 | 午夜美女福利 | 久久精品香蕉 | 久久99精品国产一区二区三区 | 福利一区二区在线 | 国产成人一区二区三区在线观看 | 五月天婷婷免费视频 | 三级视频国产 | 激情婷婷在线 | 亚洲免费av片 | 91精品国产自产在线观看 | 亚洲国产欧美在线看片xxoo | 国产福利一区二区在线 | 免费久久精品视频 | 日日夜夜操操操操 | 91天堂在线观看 | 国产一级二级av | 国产精品婷婷午夜在线观看 | 一级欧美日韩 | 国产精品福利午夜在线观看 | 欧美少妇18p| 亚洲国内精品视频 | 一级黄视频 | 国产又粗又猛又黄又爽的视频 | 国产成人精品免费在线观看 | 亚洲精选视频免费看 | 久久无码精品一区二区三区 | 国产麻豆成人传媒免费观看 | 亚洲欧美国产精品 | 麻豆mv在线观看 | 国产美女视频 | 天天天天天天天天操 | 成人av在线一区二区 | 国产黄在线观看 | 免费视频一二三区 | 日韩欧美一区二区在线观看 | 丁香久久久 | 亚洲午夜精品在线观看 | 精品在线免费观看 | 久黄色| 久青草视频| 最近免费中文视频 | 国产在线观看不卡 | 久久免费的精品国产v∧ | 久久av影院 | 激情av网 | 国内精品福利视频 | 天天综合网天天综合色 | 九九热国产视频 | 久久精品国产一区二区 | 久久久久久久免费观看 | 少妇bbb搡bbbb搡bbbb | 亚洲精品字幕在线 | 免费福利在线播放 | 日韩精品一区电影 | 欧美 日韩 国产 成人 在线 | 91黄色在线视频 | 午夜精品久久久久久 | 日韩精品一区不卡 | 国产伦理精品一区二区 | 国产精品21区| 在线 精品 国产 | 国产精品久久久久久久久久白浆 | 日本精品视频在线 | 一级黄色大片 | 狠狠色噜噜狠狠 | 狠狠躁18三区二区一区ai明星 | 久久久资源 | 久久999久久 | 亚洲精品视频一二三 | 五月天婷婷视频 | 一区二区在线影院 | 看全黄大色黄大片 | a黄在线观看 | 伊人天天操 | 中文字幕电影高清在线观看 | 在线观看成年人 | av在线专区 | 久精品在线 | 国产亚洲免费观看 | 福利视频网站 | 久久9999久久免费精品国产 | 国产在线视频一区二区三区 | 色成人亚洲 | 成人蜜桃网 | www.99av| 操少妇视频 | 亚洲美女精品视频 | 黄色大片日本免费大片 | 91在线视频在线观看 | 99视频在线免费看 | 亚洲午夜精品一区 | 女人高潮特级毛片 | 在线国产中文 | 91久久人澡人人添人人爽欧美 | 国产精品1区2区3区 久久免费视频7 | 国产亚洲精品久久久久久网站 | 中文字幕在线日亚洲9 | 国产免费三级在线观看 | 久青草视频在线观看 | 中文字幕丝袜一区二区 | 狠狠插狠狠操 | 日日干日日操 | 中文字幕第一页在线 | 伊人午夜视频 | 日本aaa在线观看 | 狠狠色丁香 | 99热超碰| 久久久久久久久久免费视频 | 射射射综合网 | av在线免费观看网站 | 美女网站在线免费观看 | 日韩免费电影一区二区 | 欧美一级视频免费看 | 国产精品6999成人免费视频 | 免费黄在线看 | 伊人五月天综合 | 天天色天天操综合网 | 美女免费视频黄 | 亚洲午夜av | av丝袜天堂 | 亚洲经典在线 | 日韩精品一区二区三区不卡 | 中文字幕在线播放第一页 | 九色porny真实丨国产18 | 国产免费三级在线观看 | 欧美一区二区在线看 | 久久好看免费视频 | 久久久高清一区二区三区 | 亚洲精品在线视频播放 | 欧美激情精品一区 | 怡红院成人在线 | 色在线高清 | 91天堂影院| 国产系列 在线观看 | 亚洲精品视频二区 | 久久艹99| 日韩高清一二区 | 国产一级免费在线观看 | 精品在线二区 | 国产理论一区二区三区 | 中文字幕在线播放第一页 | 精品久久视频 | 欧美日韩在线视频一区二区 | 午夜狠狠干 | 亚洲欧美日韩不卡 | 中文字幕在线国产精品 | av在线播放中文字幕 | 国产区在线看 | 免费在线观看av网站 | 中日韩三级视频 | 久久久96 | 免费看片网站91 | 黄色一级影院 | 久久字幕精品一区 | 亚洲视频免费在线观看 | av免费在线看网站 | 五月婷婷色| 婷婷视频在线播放 | 日韩精品一区二区三区视频播放 | 国产精品18久久久久久久 | 亚洲精品视频大全 | 四虎国产精品永久在线国在线 | 在线一二区 | 久久国产日韩 | 国产91免费在线观看 | 欧美不卡视频在线 | 亚洲国产三级在线观看 | 色五月色开心色婷婷色丁香 | 少妇av网 | 波多野结衣一区二区三区中文字幕 | 久草视频资源 | 综合久久久久久 | 久久一区二区免费视频 | 色视频国产直接看 | 国产精品网址在线观看 | 欧美激情va永久在线播放 | 久久久综合九色合综国产精品 | 九九久久视频 | 99精品在线观看视频 | 久久99精品视频 | 国产视频在线免费观看 | 一级国产视频 | 日日干天天射 | 久久免费看毛片 | 日韩专区中文字幕 | 欧美精品久久久久久久久久丰满 | 999久久a精品合区久久久 | 91x色| 久久精品屋 | av资源中文字幕 | av高清不卡| 欧美一级黄色视屏 | 久久成人综合视频 | 97精品国自产拍在线观看 | 亚洲一级黄色片 | 四虎影视成人永久免费观看亚洲欧美 | 在线免费观看国产黄色 | 五月婷婷视频 | 麻豆视传媒官网免费观看 | 久久高清视频免费 | 一区二区视频免费在线观看 | 在线精品国产 | 色婷婷综合久色 | 亚洲激色 | 国产精品视频永久免费播放 | 国产老太婆免费交性大片 | 我要看黄色一级片 | 中文字幕视频观看 | 国产精品美女久久久久久久久 | 国产精品自拍在线 | 天天综合狠狠精品 | www.色五月.com | 日韩在线观看视频中文字幕 | 成年人av在线播放 | 中文字幕在线观看完整版电影 | 精品成人在线 | 91九色porn在线资源 | 精品一区二区在线免费观看 | 黄色性av | 色大片免费看 | 在线中文字幕视频 | 91成人网在线播放 | 日韩视频一区二区在线观看 | 好看av在线| 中文字幕丝袜美腿 | 国产91免费在线 | 久久999精品 | 蜜臀av在线一区二区三区 | 欧美精品在线观看 | 99久久久国产精品免费观看 | 欧美日韩免费在线观看视频 | 国产精品理论视频 | 在线观看午夜av | 国产高清一 | 免费在线观看91 | 久久久久久久久久免费 | 久久人91精品久久久久久不卡 | 久久黄色小说视频 | 国产又粗又猛又色又黄网站 | 国产亚洲激情视频在线 | 夜夜躁天天躁很躁波 | 9992tv成人免费看片 | 首页中文字幕 | 久久国产精品第一页 | 最新av观看 | 韩日精品在线 | 国产在线观看二区 | 开心激情久久 | 欧美日韩99 | 成人在线免费看视频 | 国产中文在线播放 | 狠狠网站 | 国产精品美女免费看 | 精品国产自在精品国产精野外直播 | 成人免费毛片aaaaaa片 | 五月婷av | 91人人爱 | 天天干,天天射,天天操,天天摸 | 亚洲视频六区 | 国产精品久久久久久久久久久杏吧 | 成人午夜久久 | 日日干美女 | 久久99久国产精品黄毛片入口 | 综合久久久 | 午夜av剧场 | 亚洲精品一区二区久 | 99精品视频在线观看 | 丁香影院在线 | 亚洲一区天堂 | 国产精品色视频 | 亚洲精品无| 久久精品毛片 | www.av中文字幕.com | 亚洲午夜av电影 | 久久超级碰视频 | 成年人看片 | 日韩成人欧美 | 欧美日韩高清在线一区 | 色爱区综合激月婷婷 | 成人免费看黄 | 日韩欧美一区二区在线播放 | 最新日韩在线 | 西西4444www大胆艺术 | 西西444www大胆高清图片 | 天天综合导航 | 国产成人精品一区二区三区在线观看 | 成人免费视频视频在线观看 免费 | 四月婷婷在线观看 | 91在线国内视频 | 91中文在线视频 | 99re6热在线精品视频 | 国产亚洲免费观看 | 亚洲三级黄 | 久久综合色播五月 | 中文区中文字幕免费看 | 在线免费观看国产精品 | 中文字幕在线播放日韩 | 欧美一级日韩三级 | 四虎影视精品永久在线观看 | 黄色av电影网 | 天堂av在线网址 | 国产97在线视频 | 国际精品久久久久 | 国产一区在线精品 | 久久伊人国产精品 | 伊人五月婷 | 欧美福利片在线观看 | 91精品视频在线 | 2023亚洲精品国偷拍自产在线 | 日韩乱色精品一区二区 | 99免费在线视频 | 国产美女精品视频 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲精品理论片 | 精品日韩在线 | 中文字幕丝袜美腿 | 日韩精品视频网站 | 国产在线高清 | 天天伊人网| 国产高清av免费在线观看 | 欧美日韩中文在线 | 嫩草av在线 | 亚洲成人黄色在线 | 久久免费视频播放 | 成 人 黄 色视频免费播放 | 日韩免费中文字幕 | www成人精品 | 成人av免费播放 | 欧美中文字幕第一页 | 国产精品第54页 | 伊香蕉大综综综合久久啪 | 久久久国产精品亚洲一区 | 国产精品露脸在线 | 91在线免费视频 | 午夜精品电影一区二区在线 | 色99之美女主播在线视频 | 国产精品人成电影在线观看 | 国产成人99av超碰超爽 | 在线免费观看黄色小说 | 久久黄色精品视频 | 狠狠干狠狠色 | 免费碰碰 | 成 人 黄 色 视频免费播放 | 国产资源精品在线观看 | 久久九九九九 | 色狠狠一区二区 | 91色一区二区三区 | 人人舔人人插 | 久久99国产精品自在自在app | 日韩xxxxxxxxx| 精品国产伦一区二区三区观看体验 | 国产成人精品av久久 | 国内精品国产三级国产aⅴ久 | 久久影院亚洲 | 狠狠久久综合 | 久久成人免费视频 | 91禁看片 | 美女精品在线 | 日日干干夜夜 | 精品免费观看视频 |