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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Redis集群入门实践教程

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

一、Redis 集群概述

Redis 主從復(fù)制

到目前為止,我們所學(xué)習(xí)的 Redis 都是單機版的,這也就意味著一旦我們所依賴的 Redis 服務(wù)宕機了,我們的主流程也會受到一定的影響。
所以一開始我們的想法是:搞一臺備用機。這樣我們就可以在一臺服務(wù)器出現(xiàn)問題的時候切換動態(tài)地到另一臺去:

幸運的是,兩個節(jié)點數(shù)據(jù)的同步我們可以使用 Redis 的 主從同步 功能幫助到我們。

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


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

Redis 集群化

但單臺節(jié)點的計算能力始終有限,所謂人多力量大,如果我們把 多個節(jié)點組合 成 一個可用的工作節(jié)點,那就大大增加了 Redis 的 高可用、可擴展、分布式、容錯 等特性:

二、主從復(fù)制


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

主從復(fù)制主要的作用

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

快速體驗

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

**配置文件:**在從服務(wù)器的配置文件中加入:slaveof
**啟動命令:**redis-server 啟動命令后加入 --slaveof
**客戶端命令:**Redis 服務(wù)器啟動后,直接通過客戶端執(zhí)行命令:slaveof ,讓該 Redis 實例成為從節(jié)點。
需要注意的是:主從復(fù)制的開啟,完全是在從節(jié)點發(fā)起的,不需要我們在主節(jié)點做任何事情。

第一步:本地啟動兩個節(jié)點
在正確安裝好 Redis 之后,我們可以使用 redis-server --port 的方式指定創(chuàng)建兩個不同端口的 Redis 實例,例如,下方我分別創(chuàng)建了一個 6379 和 6380 的兩個 Redis 實例:

# 創(chuàng)建一個端口為 6379 的 Redis 實例 redis-server --port 6379 # 創(chuàng)建一個端口為 6380 的 Redis 實例 redis-server --port 6380

此時兩個 Redis 節(jié)點啟動后,都默認為 主節(jié)點。

第二步:建立復(fù)制
我們在 6380 端口的節(jié)點中執(zhí)行 slaveof 命令,使之變?yōu)閺墓?jié)點:

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

第三步:觀察效果
下面我們來驗證一下,主節(jié)點的數(shù)據(jù)是否會復(fù)制到從節(jié)點之中:

先在 從節(jié)點 中查詢一個 不存在 的 key: 127.0.0.1:6380> GET mykey (nil) 再在 主節(jié)點 中添加這個 key: 127.0.0.1:6379> SET mykey myvalue OK 此時再從 從節(jié)點 中查詢,會發(fā)現(xiàn)已經(jīng)從 主節(jié)點 同步到 從節(jié)點: 127.0.0.1:6380> GET mykey "myvalue"

第四步:斷開復(fù)制
通過 slaveof 命令建立主從復(fù)制關(guān)系以后,可以通過 slaveof no one 斷開。需要注意的是,從節(jié)點斷開復(fù)制后,不會刪除已有的數(shù)據(jù),只是不再接受主節(jié)點新的數(shù)據(jù)變化。

從節(jié)點執(zhí)行 slaveof no one 之后,從節(jié)點和主節(jié)點分別打印日志如下:、

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

實現(xiàn)原理簡析

可以 簡化成三個階段:準備階段-數(shù)據(jù)同步階段-命令傳播階段。下面我們來進行一些必要的說明。

身份驗證 | 主從復(fù)制安全問題
在上面的 快速體驗 過程中,你會發(fā)現(xiàn) slaveof 這個命令居然不需要驗證?這意味著只要知道了 ip 和端口就可以隨意拷貝服務(wù)器上的數(shù)據(jù)了?

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

SYNC 命令是一個非常耗費資源的操作
每次執(zhí)行 SYNC 命令,主從服務(wù)器需要執(zhí)行如下動作:

主服務(wù)器 需要執(zhí)行 BGSAVE 命令來生成 RDB 文件,這個生成操作會 消耗 主服務(wù)器大量的 CPU、內(nèi)存和磁盤 I/O 的資源;

主服務(wù)器 需要將自己生成的 RDB 文件 發(fā)送給從服務(wù)器,這個發(fā)送操作會 消耗 主服務(wù)器 大量的網(wǎng)絡(luò)資源 (帶寬和流量),并對主服務(wù)器響應(yīng)命令請求的時間產(chǎn)生影響;

接收到 RDB 文件的 從服務(wù)器 需要載入主服務(wù)器發(fā)來的 RBD 文件,并且在載入期間,從服務(wù)器 會因為阻塞而沒辦法處理命令請求;
特別是當出現(xiàn) 斷線重復(fù)制 的情況是時,為了讓從服務(wù)器補足斷線時確實的那一小部分數(shù)據(jù),卻要執(zhí)行一次如此耗資源的 SYNC 命令,顯然是不合理的。

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

全量復(fù)制: 用于初次復(fù)制或其他無法進行部分復(fù)制的情況,將主節(jié)點中的所有數(shù)據(jù)都發(fā)送給從節(jié)點,是一個非常重型的操作;
部分復(fù)制: 用于網(wǎng)絡(luò)中斷等情況后的復(fù)制,只將 中斷期間主節(jié)點執(zhí)行的寫命令 發(fā)送給從節(jié)點,與全量復(fù)制相比更加高效。需要注意 的是,如果網(wǎng)絡(luò)中斷時間過長,導(dǎo)致主節(jié)點沒有能夠完整地保存中斷期間執(zhí)行的寫命令,則無法進行部分復(fù)制,仍使用全量復(fù)制;
部分復(fù)制的原理主要是靠主從節(jié)點分別維護一個 復(fù)制偏移量,有了這個偏移量之后斷線重連之后一比較,之后就可以僅僅把從服務(wù)器斷線之后確實的這部分數(shù)據(jù)給補回來了。

三、Redis Sentinel 哨兵

上圖 展示了一個典型的哨兵架構(gòu)圖,它由兩部分組成,哨兵節(jié)點和數(shù)據(jù)節(jié)點:

哨兵節(jié)點: 哨兵系統(tǒng)由一個或多個哨兵節(jié)點組成,哨兵節(jié)點是特殊的 Redis 節(jié)點,不存儲數(shù)據(jù);
數(shù)據(jù)節(jié)點: 主節(jié)點和從節(jié)點都是數(shù)據(jù)節(jié)點;
在復(fù)制的基礎(chǔ)上,哨兵實現(xiàn)了 自動化的故障恢復(fù) 功能:

監(jiān)控(Monitoring): 哨兵會不斷地檢查主節(jié)點和從節(jié)點是否運作正常。
自動故障轉(zhuǎn)移(Automatic failover): 當 主節(jié)點 不能正常工作時,哨兵會開始 自動故障轉(zhuǎn)移操作,它會將失效主節(jié)點的其中一個 從節(jié)點升級為新的主節(jié)點,并讓其他從節(jié)點改為復(fù)制新的主節(jié)點。
配置提供者(Configuration provider): 客戶端在初始化時,通過連接哨兵來獲得當前 Redis 服務(wù)的主節(jié)點地址。
通知(Notification): 哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端。
其中,監(jiān)控和自動故障轉(zhuǎn)移功能,使得哨兵可以及時發(fā)現(xiàn)主節(jié)點故障并完成轉(zhuǎn)移。而配置提供者和通知功能,則需要在與客戶端的交互中才能體現(xiàn)。

快速體驗

第一步:創(chuàng)建主從節(jié)點配置文件并啟動
正確安裝好 Redis 之后,我們?nèi)サ?Redis 的安裝目錄 (mac 默認在 /usr/local/),找到 redis.conf 文件復(fù)制三份分別命名為 redis-master.conf/redis-slave1.conf/redis-slave2.conf,分別作為 1 個主節(jié)點和 2 個從節(jié)點的配置文件 (下圖演示了我本機的 redis.conf 文件的位置)

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

#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

然后我們可以執(zhí)行 redis-server 來根據(jù)配置文件啟動不同的 Redis 實例,依次啟動主從節(jié)點:

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 節(jié)點啟動后,我們執(zhí)行 redis-cli 默認連接到我們端口為 6379 的主節(jié)點執(zhí)行 info Replication 檢查一下主從狀態(tài)是否正常:(可以看到下方正確地顯示了兩個從節(jié)點)

第二步:創(chuàng)建哨兵節(jié)點配置文件并啟動
按照上面同樣的方法,我們給哨兵節(jié)點也創(chuàng)建三個配置文件。(哨兵節(jié)點本質(zhì)上是特殊的 Redis 節(jié)點,所以配置幾乎沒什么差別,只是在端口上做區(qū)分就好)

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

執(zhí)行下方命令將哨兵節(jié)點啟動起來:

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 工具連接哨兵節(jié)點,并執(zhí)行 info Sentinel 命令來查看是否已經(jīng)在監(jiān)視主節(jié)點了:

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

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

第三步:演示故障轉(zhuǎn)移
首先,我們使用 kill -9 命令來殺掉主節(jié)點,同時 在哨兵節(jié)點中執(zhí)行 info Sentinel 命令來觀察故障節(jié)點的過程:

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

如果 剛殺掉瞬間 在哨兵節(jié)點中執(zhí)行 info 命令來查看,會發(fā)現(xiàn)主節(jié)點還沒有切換過來,因為哨兵發(fā)現(xiàn)主節(jié)點故障并轉(zhuǎn)移需要一段時間:

# 第一時間查看哨兵節(jié)點發(fā)現(xiàn)并未轉(zhuǎn)移,還在 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

一段時間之后你再執(zhí)行 info 命令,查看,你就會發(fā)現(xiàn)主節(jié)點已經(jīng)切換成了 6381 端口的從節(jié)點:

# 過一段時間之后在執(zhí)行,發(fā)現(xiàn)已經(jīng)切換了 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

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

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

對于主從節(jié)點: 主要是 slaveof 配置的變化,新的主節(jié)點沒有了 slaveof 配置,其從節(jié)點則 slaveof 新的主節(jié)點。
對于哨兵節(jié)點: 除了主從節(jié)點信息的變化,紀元(epoch) (記錄當前集群狀態(tài)的參數(shù)) 也會變化,紀元相關(guān)的參數(shù)都 +1 了。

客戶端訪問哨兵系統(tǒng)代碼演示

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

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

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

遍歷哨兵節(jié)點,獲取主節(jié)點信息: 遍歷哨兵節(jié)點,通過其中一個哨兵節(jié)點 + masterName 獲得主節(jié)點的信息;該功能是通過調(diào)用哨兵節(jié)點的 sentinel get-master-addr-by-name 命令實現(xiàn);
增加對哨兵的監(jiān)聽: 這樣當發(fā)生故障轉(zhuǎn)移時,客戶端便可以收到哨兵的通知,從而完成主節(jié)點的切換。具體做法是:利用 Redis 提供的 發(fā)布訂閱 功能,為每一個哨兵節(jié)點開啟一個單獨的線程,訂閱哨兵節(jié)點的 + switch-master 頻道,當收到消息時,重新初始化連接池。

新的主服務(wù)器是怎樣被挑選出來的?

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

簡單來說 Sentinel 使用以下規(guī)則來選擇新的主服務(wù)器:

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

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

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

四、Redis 集群

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

基本原理

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

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

GET x -MOVED 3999 127.0.0.1:6381

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

集群的主要作用

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

快速體驗

第一步:創(chuàng)建集群節(jié)點配置文件
首先我們找一個地方創(chuàng)建一個名為 redis-cluster 的目錄:

mkdir -p ~/Desktop/redis-cluster

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

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

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

然后執(zhí)行 ps -ef | grep redis 查看是否啟動成功:
可以看到 6 個 Redis 節(jié)點都以集群的方式成功啟動了,但是現(xiàn)在每個節(jié)點還處于獨立的狀態(tài),也就是說它們每一個都各自成了一個集群,還沒有互相聯(lián)系起來,我們需要手動地把他們之間建立起聯(lián)系。

第三步:建立集群
執(zhí)行下列命令:

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 的意思是:我們希望為集群中的每個主節(jié)點創(chuàng)建一個從節(jié)點。
觀察控制臺輸出:

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

第四步:驗證集群
我們先使用 redic-cli 任意連接一個節(jié)點:

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 操作跳轉(zhuǎn)到了 7001 這個實例上。

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

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>

數(shù)據(jù)分區(qū)方案簡析

方案一:哈希值 % 節(jié)點數(shù)
哈希取余分區(qū)思路非常簡單:計算 key 的 hash 值,然后對節(jié)點數(shù)量進行取余,從而決定數(shù)據(jù)映射到哪個節(jié)點上。

不過該方案最大的問題是,當新增或刪減節(jié)點時,節(jié)點數(shù)量發(fā)生變化,系統(tǒng)中所有的數(shù)據(jù)都需要 重新計算映射關(guān)系,引發(fā)大規(guī)模數(shù)據(jù)遷移。

方案二:一致性哈希分區(qū)
一致性哈希算法將 整個哈希值空間 組織成一個虛擬的圓環(huán),范圍是 [0 , 232-1],對于每一個數(shù)據(jù),根據(jù) key 計算 hash 值,確數(shù)據(jù)在環(huán)上的位置,然后從此位置沿順時針行走,找到的第一臺服務(wù)器就是其應(yīng)該映射到的服務(wù)器:

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

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

方案三:帶有虛擬節(jié)點的一致性哈希分區(qū)
該方案在 一致性哈希分區(qū)的基礎(chǔ)上,引入了 虛擬節(jié)點 的概念。Redis 集群使用的便是該方案,其中的虛擬節(jié)點稱為 槽(slot)。槽是介于數(shù)據(jù)和實際節(jié)點之間的虛擬概念,每個實際節(jié)點包含一定數(shù)量的槽,每個槽包含哈希值在一定范圍內(nèi)的數(shù)據(jù)。

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

槽 0-3 位于 node1;4-7 位于 node2;以此類推…
如果此時刪除 node2,只需要將槽 4-7 重新分配即可,例如槽 4-5 分配給 node1,槽 6 分配給 node3,槽 7 分配給 node4;可以看出刪除 node2 后,數(shù)據(jù)在其他節(jié)點的分布仍然較為均衡。

節(jié)點通信機制簡析

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

兩個端口
哨兵系統(tǒng) 中,節(jié)點分為 數(shù)據(jù)節(jié)點 和 哨兵節(jié)點:前者存儲數(shù)據(jù),后者實現(xiàn)額外的控制功能。在 集群 中,沒有數(shù)據(jù)節(jié)點與非數(shù)據(jù)節(jié)點之分:所有的節(jié)點都存儲數(shù)據(jù),也都參與集群狀態(tài)的維護。為此,集群中的每個節(jié)點,都提供了兩個 TCP 端口:

普通端口: 即我們在前面指定的端口 (7000等)。普通端口主要用于為客戶端提供服務(wù) (與單機節(jié)點類似);但在節(jié)點間數(shù)據(jù)遷移時也會使用。
集群端口: 端口號是普通端口 + 10000 (10000是固定值,無法改變),如 7000 節(jié)點的集群端口為 17000。集群端口只用于節(jié)點之間的通信,如搭建集群、增減節(jié)點、故障轉(zhuǎn)移等操作時節(jié)點間的通信;不要使用客戶端連接集群接口。為了保證集群可以正常工作,在配置防火墻時,要同時開啟普通端口和集群端口。

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

廣播是指向集群內(nèi)所有節(jié)點發(fā)送消息。優(yōu)點 是集群的收斂速度快(集群收斂是指集群內(nèi)所有節(jié)點獲得的集群信息是一致的),缺點 是每條消息都要發(fā)送給所有節(jié)點,CPU、帶寬等消耗較大。
Gossip 協(xié)議的特點是:在節(jié)點數(shù)量有限的網(wǎng)絡(luò)中,每個節(jié)點都 “隨機” 的與部分節(jié)點通信 (并不是真正的隨機,而是根據(jù)特定的規(guī)則選擇通信的節(jié)點),經(jīng)過一番雜亂無章的通信,每個節(jié)點的狀態(tài)很快會達到一致。Gossip 協(xié)議的 優(yōu)點 有負載 (比廣播) 低、去中心化、容錯性高 (因為通信有冗余) 等;缺點 主要是集群的收斂速度慢。
消息類型
集群中的節(jié)點采用 固定頻率(每秒10次) 的 定時任務(wù) 進行通信相關(guān)的工作:判斷是否需要發(fā)送消息及消息類型、確定接收節(jié)點、發(fā)送消息等。如果集群狀態(tài)發(fā)生了變化,如增減節(jié)點、槽狀態(tài)變更,通過節(jié)點間的通信,所有節(jié)點會很快得知整個集群的狀態(tài),使集群收斂。

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

MEET 消息: 在節(jié)點握手階段,當節(jié)點收到客戶端的 CLUSTER MEET 命令時,會向新加入的節(jié)點發(fā)送 MEET 消息,請求新節(jié)點加入到當前集群;新節(jié)點收到 MEET 消息后會回復(fù)一個 PONG 消息。
PING 消息: 集群里每個節(jié)點每秒鐘會選擇部分節(jié)點發(fā)送 PING 消息,接收者收到消息后會回復(fù)一個 PONG 消息。PING 消息的內(nèi)容是自身節(jié)點和部分其他節(jié)點的狀態(tài)信息,作用是彼此交換信息,以及檢測節(jié)點是否在線。PING 消息使用 Gossip 協(xié)議發(fā)送,接收節(jié)點的選擇兼顧了收斂速度和帶寬成本,具體規(guī)則如下:(1)隨機找 5 個節(jié)點,在其中選擇最久沒有通信的 1 個節(jié)點;(2)掃描節(jié)點列表,選擇最近一次收到 PONG 消息時間大于 cluster_node_timeout / 2 的所有節(jié)點,防止這些節(jié)點長時間未更新。
PONG消息: PONG 消息封裝了自身狀態(tài)數(shù)據(jù)??梢苑譃閮煞N:第一種 是在接到 MEET/PING 消息后回復(fù)的 PONG 消息;第二種 是指節(jié)點向集群廣播 PONG 消息,這樣其他節(jié)點可以獲知該節(jié)點的最新信息,例如故障恢復(fù)后新的主節(jié)點會廣播 PONG 消息。
FAIL 消息: 當一個主節(jié)點判斷另一個主節(jié)點進入 FAIL 狀態(tài)時,會向集群廣播這一 FAIL 消息;接收節(jié)點會將這一 FAIL 消息保存起來,便于后續(xù)的判斷。
PUBLISH 消息: 節(jié)點收到 PUBLISH 命令后,會先執(zhí)行該命令,然后向集群廣播這一消息,接收節(jié)點也會執(zhí)行該 PUBLISH 命令。

數(shù)據(jù)結(jié)構(gòu)簡析

節(jié)點需要專門的數(shù)據(jù)結(jié)構(gòu)來存儲集群的狀態(tài)。所謂集群的狀態(tài),是一個比較大的概念,包括:集群是否處于上線狀態(tài)、集群中有哪些節(jié)點、節(jié)點是否可達、節(jié)點的主從狀態(tài)、槽的分布……

節(jié)點為了存儲集群狀態(tài)而提供的數(shù)據(jù)結(jié)構(gòu)中,最關(guān)鍵的是 clusterNode 和 clusterState 結(jié)構(gòu):前者記錄了一個節(jié)點的狀態(tài),后者記錄了集群作為一個整體的狀態(tài)。

clusterNode 結(jié)構(gòu)
clusterNode 結(jié)構(gòu)保存了 一個節(jié)點的當前狀態(tài),包括創(chuàng)建時間、節(jié)點 id、ip 和端口號等。每個節(jié)點都會用一個 clusterNode 結(jié)構(gòu)記錄自己的狀態(tài),并為集群內(nèi)所有其他節(jié)點都創(chuàng)建一個 clusterNode 結(jié)構(gòu)來記錄節(jié)點狀態(tài)。

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

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

除了上述字段,clusterNode 還包含節(jié)點連接、主從復(fù)制、故障發(fā)現(xiàn)和轉(zhuǎn)移需要的信息等。

clusterState 結(jié)構(gòu)
clusterState 結(jié)構(gòu)保存了在當前節(jié)點視角下,集群所處的狀態(tài)。主要字段包括:

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

狠狠干干 | 97人人精品 | 亚洲91精品 | 五月在线| 有码视频在线观看 | 日韩天天干 | 亚洲国产网站 | www.午夜| 精油按摩av| 综合婷婷丁香 | 久草手机视频 | av在线在线 | 草草草影院| 亚洲精品在线免费观看视频 | 国产精品久久久久久久久久久久午夜片 | 免费能看的av | 国产精品男女啪啪 | 天天干 夜夜操 | 免费av网站在线看 | 久草免费资源 | 国产精品一区二区果冻传媒 | 久九视频| 91视频在线免费观看 | 国产视频欧美视频 | 一级片免费观看 | 一区二区三区在线电影 | 日韩一级成人av | 国产91在线 | 美洲 | 国产尤物在线观看 | 永久免费视频国产 | 夜夜操天天干 | av高清网站在线观看 | 日韩视频一区二区在线观看 | 精品亚洲视频在线观看 | 久久精品免费观看 | 349k.cc看片app| 亚洲精品高清视频 | 国产精品久久免费看 | a黄色一级| 精品二区视频 | 国产一级视屏 | 国产欧美精品一区二区三区四区 | 久久久官网 | 免费观看性生交大片3 | av在线播放网址 | 麻花天美星空视频 | 国产成人综合图片 | 碰碰影院 | 一区二区 久久 | 99久久精品国产一区二区成人 | 久久久www成人免费精品张筱雨 | 国产人成一区二区三区影院 | 中文字幕av全部资源www中文字幕在线观看 | 中文字幕高清在线 | 夜夜躁日日躁狠狠久久88av | 欧美日韩在线播放一区 | 日日弄天天弄美女bbbb | 久久久久久久久毛片精品 | 日本精品视频在线观看 | 精品欧美一区二区在线观看 | 国内久久久 | 香蕉在线视频观看 | 亚洲国产精彩中文乱码av | 99久久一区 | 91在线网址 | 黄色av在 | 国产精品久久视频 | 亚洲永久国产精品 | 99在线热播精品免费 | 青青草在久久免费久久免费 | 西西444www| 久久综合狠狠狠色97 | 在线观看91 | 国产精品一区二区三区视频免费 | 亚洲欧美在线视频免费 | 三上悠亚一区二区在线观看 | 婷婷六月丁 | 精品国模一区二区 | 天天艹天天 | 日韩一区二区免费视频 | 欧洲精品视频一区二区 | 91精品综合在线观看 | 波多野结衣视频网址 | 日韩精品免费在线播放 | 亚洲国产网址 | 超碰97人 | 国产一区 在线播放 | 日本中出在线观看 | 久久夜夜操| 欧美日韩不卡一区 | 国产一区二区高清视频 | 日韩久久精品一区二区三区 | 激情xxxx| 国产免费观看视频 | 97精品国产91久久久久久 | 免费av电影网站 | 一区二区三区免费在线 | 精品亚洲网| 国产亚洲午夜高清国产拍精品 | 中国一级片在线观看 | 久久韩国免费视频 | 福利视频区 | 国产精品免费久久久久久 | 激情久久综合网 | 精品日韩中文字幕 | 日韩一区在线免费观看 | 久久99精品久久久久久久久久久久 | 亚洲精品国产精品国自产观看 | 亚洲欧美国产精品 | 麻豆 free xxxx movies hd | 亚洲激情网站免费观看 | 中文字幕av在线电影 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 狠狠色噜噜狠狠 | 久久歪歪 | 一本—道久久a久久精品蜜桃 | 亚洲精品乱码久久久久久蜜桃动漫 | 久久久久免费精品视频 | 免费a视频 | 免费视频一二三 | 日本亚洲国产 | 亚洲国产av精品毛片鲁大师 | 久草在线观| 欧美午夜理伦三级在线观看 | 网站免费黄色 | 一级做a视频| 日韩一片| 手机av电影在线 | 黄色电影在线免费观看 | 国产在线观看地址 | 国产美女视频免费观看的网站 | 九九涩涩av台湾日本热热 | 午夜12点 | 日韩激情免费视频 | 久久免费公开视频 | 国产日韩精品一区二区 | 97电影院网 | 国产91精品一区二区绿帽 | 狠狠88综合久久久久综合网 | 精品久久久久一区二区国产 | 欧美日韩在线精品一区二区 | 精品国产精品国产偷麻豆 | 96av视频 | 亚洲一级片在线看 | www.亚洲在线| 欧美精品你懂的 | 99久久精品国产网站 | 亚洲国产精品久久 | 久艹视频免费观看 | 国产一二区精品 | 少妇视频在线播放 | 在线看片成人 | 欧美va天堂在线电影 | 一级黄色毛片 | 久热超碰 | 久久久久久久久久网 | 91 在线视频播放 | 婷婷五情天综123 | 91麻豆国产福利在线观看 | 日韩在线观看不卡 | 91精品免费 | 欧美日本三级 | 99热 精品在线 | 国产 欧美 在线 | av在线激情| 欧美性色黄 | 99re国产视频 | 中文一区在线 | 国产偷国产偷亚洲清高 | 久久草草影视免费网 | 777奇米四色 | 国产精国产精品 | 国产99免费 | 欧美不卡视频在线 | 久久久久久看片 | 中日韩欧美精彩视频 | 中文字幕精品视频 | 欧美特一级| 91网页版免费观看 | 超碰在线官网 | 成人av资源 | 国产精品video爽爽爽爽 | 亚洲成人av免费 | 久久久久久黄色 | 成人毛片100免费观看 | 国产一区麻豆 | av视屏在线 | 中文字幕在线观看国产 | 91精品少妇偷拍99 | 手机看片国产 | 精品国偷自产在线 | av最新资源 | 国产91学生| 国产精品一区二区三区视频免费 | mm1313亚洲精品国产 | www.一区二区三区 | 午夜美女网站 | 人人超碰在线 | 在线91精品 | 超碰人人草 | 日韩在线精品 | 奇米网网址| 亚洲精品黄色 | 国产96精品| 国产精品美女久久久久久免费 | 欧美一区影院 | 免费高清在线观看成人 | 综合久久五月天 | 久久精品视频国产 | 国产精品美乳一区二区免费 | 中文字幕首页 | www.色爱 | 九九热视频在线播放 | 国产无套精品久久久久久 | 久久久国际精品 | 国产一区二区在线精品 | 不卡国产视频 | 黄色a视频免费 | 欧美视频18 | 日韩高清网站 | 欧美日韩国产一区二区三区在线观看 | 欧美中文字幕第一页 | 国产一区二区精品91 | 国产精品少妇 | 久久精品7| 偷拍精偷拍精品欧洲亚洲网站 | 中文字幕有码在线 | 久久人人艹 | 精品a在线 | 久久免费国产精品 | av免费电影在线 | 在线综合色 | 91视频观看免费 | 一区二区三区中文字幕在线 | 2021国产视频 | 在线精品在线 | 韩国av一区二区三区在线观看 | 日韩精品亚洲专区在线观看 | 国产精品 9999 | 久久影院一区 | 国产看片免费 | 人人爽久久涩噜噜噜网站 | 在线之家免费在线观看电影 | 欧美精彩视频在线观看 | 五月香视频在线观看 | 国产999精品视频 | 成人午夜毛片 | 五月激情综合婷婷 | 国产精品第 | 国产精品久久久久久久久久久久冷 | 国产精品美女在线观看 | 国产一级特黄毛片在线毛片 | 久草视频在线播放 | 人人澡人人澡人人 | 亚洲精品在线免费 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 又黄又爽又湿又无遮挡的在线视频 | 久久精品久久精品久久 | 狠狠久久 | 2020天天干夜夜爽 | 欧美激情精品久久久久 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲国产一区在线观看 | 久久国产乱 | 久久草草热国产精品直播 | 成人宗合网 | 美女网站色在线观看 | 午夜在线免费观看视频 | 五月天亚洲激情 | 日韩精品久久久久久久电影竹菊 | 午夜精品久久久 | avv天堂| 97人人网 | 国产在线小视频 | 人人涩| 美女在线国产 | 亚洲最大成人网4388xx | 日韩免费在线观看网站 | 亚洲免费av网站 | 欧美一区免费在线观看 | 久久久五月婷婷 | 1区2区3区在线观看 三级动图 | 亚洲激情 欧美激情 | 日韩色中色 | 美女视频永久黄网站免费观看国产 | 国产二区av | 色婷婷av国产精品 | 成人午夜网址 | 黄色高清视频在线观看 | 免费观看黄色12片一级视频 | 国产精品一区二区中文字幕 | 丁香电影小说免费视频观看 | 国产精品一区二区精品视频免费看 | 国产淫片 | 97在线观看 | 亚洲精品一区二区在线观看 | 国产精品乱看 | 天堂网一区二区三区 | 中文字幕在线看视频 | 亚洲国产精久久久久久久 | 四虎欧美 | 一区二区三区四区五区在线 | 黄色精品视频 | 国产精品久久久一区二区三区网站 | www日日夜夜 | 欧美一区二区三区在线 | 视频在线91| 狠狠操天天操 | 欧美少妇影院 | 国产a国产 | 黄av免费在线观看 | 成人在线视频网 | 西西大胆啪啪 | 国产视频手机在线 | 黄免费网站 | 色婷婷亚洲综合 | 欧美亚洲一区二区在线 | 婷婷激情影院 | 91九色国产在线 | 久草在线综合 | 国产高清在线免费视频 | 亚洲国产精品日韩 | 欧美日韩在线观看不卡 | 国产91亚洲精品 | 伊色综合久久之综合久久 | 在线观看一区 | 中文字幕av免费 | 免费在线观看日韩欧美 | 综合在线亚洲 | 亚洲成年片 | 色干干 | 亚洲成av人影片在线观看 | 欧美专区日韩专区 | 久久久久久国产精品免费 | 国产亚洲精品v | 久久亚洲国产精品 | 国产精品午夜久久久久久99热 | 久久久午夜精品理论片中文字幕 | 欧美大片www| 久久天天综合网 | 欧美与欧洲交xxxx免费观看 | 婷婷在线观看视频 | 97在线视频免费观看 | 涩av在线 | 免费高清无人区完整版 | 91激情视频在线观看 | 亚洲国产成人在线 | 天堂av网址 | 在线免费观看视频一区 | 亚洲激情电影在线 | 成人毛片100免费观看 | 久久久久网址 | 亚洲欧美国产视频 | 国产va精品免费观看 | 欧美在线资源 | 国产一区视频在线播放 | 99re中文字幕 | 99精彩视频| 成人性生活大片 | 亚洲区另类春色综合小说 | 99在线观看 | av在线播放不卡 | 亚洲好视频 | 91精品国自产在线观看 | 久久视影 | 98福利在线 | 久久精品久久综合 | 日韩一二三在线 | 国产精品mv在线观看 | 亚洲人在线视频 | 国产成人av片 | 国产一级二级三级视频 | 超碰97在线资源 | 视频成人免费 | 日韩精品免费一区二区三区 | 久久人人爽人人爽人人片av免费 | 国产精品中文字幕在线观看 | 激情丁香综合五月 | 久久99精品久久久久久久久久久久 | 欧美精品一区二区三区四区在线 | 国产一级片免费视频 | 久久久久久国产精品美女 | 在线激情影院一区 | 欧美精品999 | 久久字幕网 | 天天爱综合 | 99久久夜色精品国产亚洲96 | 亚一亚二国产专区 | av电影不卡 | 青草视频在线 | 四虎永久精品在线 | 五月婷婷精品 | 久久黄色小说 | 伊人色播 | 欧美巨乳网 | 日本精品久久久久中文字幕5 | 美女网站视频免费都是黄 | 99se视频在线观看 | 亚洲小视频在线 | 日韩99热| 亚洲视频在线观看网站 | 伊人婷婷久久 | 六月丁香久久 | 久久激情五月丁香伊人 | 午夜精品视频一区二区三区在线看 | 在线亚洲高清视频 | 精品国产资源 | 国产又粗又猛又黄又爽的视频 | 亚洲成年人在线播放 | 亚洲国产色一区 | 日本在线视频网址 | 国产精品一区一区三区 | 日操操| 中文字幕免费在线 | 久久久免费看片 | 日本最新一区二区三区 | 五月天激情婷婷 | 日韩在线国产精品 | 亚洲精品9 | av观看免费在线 | 国产123av | 国产精品欧美久久久久天天影视 | 中文av网| 精品一区久久 | 久草在线网址 | 久久九九免费视频 | 91污视频在线观看 | 久久久免费视频播放 | 黄色一级动作片 | 日韩欧在线 | av电影免费看| 黄色看片 | 色综合久久综合网 | 97超碰成人在线 | a在线免费| 日韩成人高清在线 | 精品欧美一区二区精品久久 | 97电影在线观看 | 伊人永久在线 | 97超碰国产在线 | 久久免费在线 | 久久不卡免费视频 | 免费在线观看一级片 | 精品在线观看免费 | 中文字幕av在线播放 | 美女视频久久久 | 蜜臀av网址| 国产视频精品久久 | 国产精品h在线观看 | 99久精品视频 | 在线看国产视频 | 婷婷电影网 | 久草在线免费色站 | 国产精品男女啪啪 | 字幕网资源站中文字幕 | 高清视频一区二区三区 | 亚洲视频 中文字幕 | 97在线免费| 久久精品日产第一区二区三区乱码 | 亚洲精品视 | 欧美男同视频网站 | 日本aaa在线观看 | 免费美女av | 日韩在线观看你懂得 | 日韩在线字幕 | 不卡精品 | 久久久国产毛片 | 欧美激情在线网站 | 在线免费高清 | 亚洲精品www | 91成人午夜| 国产精品 999 | 精精国产xxxx视频在线播放 | 91视视频在线直接观看在线看网页在线看 | 国产视频午夜 | 中文字幕在线视频一区 | 蜜臀av一区 | 日日夜夜天天干 | 黄色av影视| 午夜视频在线观看网站 | 欧美热久久 | 免费视频在线观看网站 | 国产高清av免费在线观看 | 日韩精品不卡 | 日本性动态图 | 亚洲精品91天天久久人人 | 亚洲国产影院av久久久久 | a视频在线观看 | 成片免费观看视频大全 | 色偷偷88欧美精品久久久 | 草久久影院 | 国产精品第二页 | 国产综合婷婷 | 亚洲人成人在线 | 国产精品久久久久久久久久久杏吧 | 国产精品videoxxxx | 日韩电影一区二区三区 | 久久福利影视 | 操操综合 | 免费福利在线 | 91精品区| 激情伊人| 午夜av网站 | 在线国产中文字幕 | 99精品视频在线 | 久久高清片 | 国产精品美乳一区二区免费 | 免费h视频| 欧美在线1| 国产黄色片网站 | 九九九热 | 99精品热视频只有精品10 | 国产v欧美 | 午夜av电影院 | 天天干天天看 | 午夜视频一区二区三区 | 久久伊人综合 | 成人激情开心网 | 久久中文网 | 九九热在线观看 | 欧美色综合久久 | 亚洲精选视频免费看 | 婷色在线| 免费又黄又爽视频 | 黄色成人影视 | 国产精品久久久久久电影 | 中文字幕久久久精品 | www.五月天婷婷.com | 亚洲精品动漫在线 | 在线观看日韩一区 | 日日日日日 | 久久免费一级片 | free,性欧美| 久久99精品一区二区三区三区 | 亚洲h在线播放在线观看h | 最新国产福利 | 亚洲女人av | 成人网在线免费视频 | 亚洲一区二区三区四区在线视频 | 亚洲精品视频网站在线观看 | 国产精品一区二区三区久久久 | 91亚洲精品在线观看 | 久久一区国产 | 午夜视频一区二区三区 | 91精品国产成人www | 天天插天天爱 | 中文乱幕日产无线码1区 | 精品久久久久久久久久久久久久久久 | 精品福利视频在线观看 | 成人精品国产免费网站 | 国产精品久免费的黄网站 | 国产精品久久久久久999 | 97品白浆高清久久久久久 | 91av视频在线观看 | 青春草免费视频 | 久久免费视频一区 | 高清免费在线视频 | 久草在线中文888 | 婷婷中文字幕在线观看 | 午夜精品福利影院 | 天天射天天搞 | 久草手机视频 | 精品毛片一区二区免费看 | 青草视频免费观看 | 日韩三级视频在线观看 | 国产一区影院 | 日韩,精品电影 | 国内精品久久久久久久久久久久 | 狠狠躁日日躁狂躁夜夜躁av | 麻豆久久久久久久 | 久久精品国产亚洲a | 九九综合在线 | 伊人五月天综合 | 久久婷婷激情 | 国产精品99久久久久久宅男 | 69久久夜色精品国产69 | 免费高清在线观看成人 | 久久九九九九 | 人人添人人澡人人澡人人人爽 | 9在线观看免费 | 三上悠亚一区二区在线观看 | 婷婷中文字幕在线观看 | 久久国产精品99久久久久久老狼 | 国内精品美女在线观看 | 日日干天夜夜 | 久久国产精品视频免费看 | 免费在线日韩 | 亚洲va欧美va人人爽春色影视 | 日日夜精品| 日本深夜福利视频 | 日本大片免费观看在线 | 国产在线2020| 99久久精品午夜一区二区小说 | 精品在线视频观看 | 国产99视频在线观看 | 麻豆国产视频 | 懂色av一区二区三区蜜臀 | 成人va天堂 | 国产在线视频在线观看 | 国产精品成人一区二区三区吃奶 | 久久久久久黄 | 久久综合欧美精品亚洲一区 | 欧美日韩国产一二 | 91桃色在线免费观看 | 开心综合网 | 久久精品国产v日韩v亚洲 | 亚色视频在线观看 | 精品美女国产在线 | 成年人免费在线观看网站 | 精品久久久久久亚洲综合网站 | 美女视频一区 | 午夜精品999 | 色九九影院| 蜜臀久久99精品久久久无需会员 | 在线一区观看 | 亚洲最大av网 | 欧美日韩久 | 在线看国产一区 | 欧美一区二区三区在线播放 | 日本在线观看一区 | 五月精品 | 国产精品成人一区二区 | 国产在线观看免费 | 一级精品视频在线观看宜春院 | 中文字幕久久久精品 | 免费观看www视频 | www看片网站| 69久久99精品久久久久婷婷 | 99热亚洲精品 | 国产一区二区日本 | 日韩欧美视频在线观看免费 | 五月婷婷伊人网 | 国产乱老熟视频网88av | 三级av在线 | 国产一级性生活视频 | 国产精品高清在线观看 | 亚洲永久字幕 | 国产一级免费在线观看 | 午夜在线观看影院 | 成人亚洲免费 | 国产美女精品视频 | 久久久久电影网站 | 天天干夜夜想 | 色激情在线 | 91亚洲精品久久久中文字幕 | 99热精品久久 | 超级碰碰免费视频 | 一区免费视频 | 国产精品99久久99久久久二8 | 欧美看片| 91九色在线观看视频 | 激情久久婷婷 | av免费观看网址 | 国产精品一区二区免费视频 | 黄网站免费大全入口 | 婷婷丁香社区 | 亚洲国产精品免费 | 97超碰超碰久久福利超碰 | 国产视频九色蝌蚪 | 看黄色91 | 99热这里只有精品免费 | 亚洲aⅴ免费在线观看 | 国产一级片免费视频 | 干狠狠| 免费黄色在线播放 | 成年人黄色免费看 | 字幕网资源站中文字幕 | 免费观看久久久 | 久久久www成人免费毛片麻豆 | 97品白浆高清久久久久久 | 欧美一区二视频在线免费观看 | 99久久婷婷国产综合精品 | 婷婷丁香花五月天 | 国产精品成人一区二区三区吃奶 | 亚洲天堂网站 | 成人免费在线电影 | 欧美大片在线观看一区 | 中文字幕在线免费97 | 日韩精品一区二 | 九九av| 久久精品国产v日韩v亚洲 | 国产精品精品国产婷婷这里av | 久久久久成人精品亚洲国产 | 五月激情六月丁香 | 天天爱天天干天天爽 | 国产91精品一区二区 | 黄色电影小说 | 最近中文字幕免费观看 | 午夜久久久影院 | 久久99精品久久久久婷婷 | 色亚洲激情 | 狠狠干成人综合网 | 日韩网站一区 | 国产视频 亚洲精品 | 久久久国产在线视频 | av大片网站| 69国产精品成人在线播放 | 午夜少妇av | 狠狠色免费 | 国产传媒中文字幕 | 欧美激情视频在线免费观看 | av在线电影免费观看 | 丁香婷婷综合网 | 色国产精品 | 91精品视频免费看 | 日韩精品免费一区二区在线观看 | 天天色天天综合网 | 久草男人天堂 | 欧美成人xxxx | 国产电影一区二区三区四区 | 国产精品成人国产乱 | 成人毛片一区二区三区 | 人人超在线公开视频 | 亚洲春色综合另类校园电影 | 精品亚洲成人 | 亚洲精品视频播放 | 欧美特一级 | 五月综合色 | 一区二区三区国 | 精品欧美一区二区三区久久久 | 国产一区在线视频播放 | 又污又黄网站 | 欧美一级日韩免费不卡 | 亚州av成人 | 特级西西444www高清大视频 | 狠狠色噜噜狠狠 | 国产丝袜美腿在线 | 国产精品美女毛片真酒店 | 久久99免费 | 日韩精品在线视频 | 久久a视频| 久久社区视频 | 欧美日韩国产色综合一二三四 | 亚洲精品 在线视频 | 国产精品美女久久久久久久网站 | 日韩在线色 | 在线免费国产 | av三级在线免费观看 | 韩国av一区二区三区 | 国产婷婷视频在线 | 久久国产露脸精品国产 | a视频在线观看 | 免费一级片视频 | 99精品国产兔费观看久久99 | 在线免费高清一区二区三区 | 久草免费资源 | 久久精品首页 | 伊人影院99 | 91桃色免费视频 | 99热这里有 | 国产视频二区三区 | 亚洲一区美女视频在线观看免费 | 色婷婷激情四射 | 久久久精品视频网站 | 日日夜夜狠狠操 | 人人插人人爱 | 久久久资源网 | 日本不卡一区二区三区在线观看 | 国产一级大片免费看 | 色婷婷狠狠五月综合天色拍 | 久久不卡日韩美女 | 久草在线视频看看 | 国产91免费在线观看 | 国内亚洲精品 | 欧美中文字幕久久 | 免费看的黄色小视频 | 一区二区三区四区五区在线视频 | 美女视频久久久 | 在线播放 日韩专区 | 国产精品午夜8888 | 色夜影院 | 免费av观看网站 | 成 人 黄 色 免费播放 | 国产99久久久精品视频 | 国产视频九色蝌蚪 | 久久无码av一区二区三区电影网 | 一级黄色片在线播放 | 日韩电影久久 | 欧美一二三区在线观看 | 天天射天天干天天 | 91免费版在线观看 | 亚洲第一区精品 | 黄色成品视频 | 久久久国产精品成人免费 | 伊人久久国产 | 国产伦理久久 | 一区二区三区 中文字幕 | 欧美一级黄色片 | 激情在线免费视频 | 日韩电影久久久 | 色www免费视频 | 中文网丁香综合网 | 人人舔人人射 | 狠狠狠综合 | 午夜av在线播放 | 99资源网| 中文在线亚洲 | 成人午夜片av在线看 | 国产亚洲情侣一区二区无 | www日韩在线 | 国产视频1 | 九九九九精品 | 51精品国自产在线 | 人人爽人人澡人人添人人人人 | 国产黄大片在线观看 | 国产亚洲va综合人人澡精品 | 国产91丝袜在线播放动漫 | 香蕉视频啪啪 | 日韩中出在线 | 天天操天天射天天爱 | 久久成人国产精品入口 | 日日爽夜夜爽 | 最近2019中文免费高清视频观看www99 | 激情综合亚洲 | 午夜免费久久看 | 麻豆激情电影 | 九九热在线播放 | 色婷婷综合久久久 | 成年人免费观看国产 | 欧美日本一区 | 日韩欧美高清在线 | av 一区 二区 久久 | 国产精选在线观看 | 国产美女免费观看 | 国产一级久久久 | 欧美亚洲成人免费 | 国内外成人在线 | sesese图片| av解说在线观看 | 久久久久久免费 | av在线亚洲天堂 | 久久成人在线 | 韩日色视频 | 在线视频 91 | 久久国产网 | 欧美日韩在线视频观看 | 日韩激情一二三区 | 欧美日韩p片 | 色姑娘综合| 91成人精品国产刺激国语对白 | 久久精品三级 | 欧美精品在线视频 | 久在线 | 玖玖视频免费在线 | 日韩有码在线观看视频 | 色偷偷网站视频 | 亚洲欧美怡红院 | 波多野结衣在线播放一区 | 韩国av免费看 | 久久精品激情 | 亚洲播放一区 | 午夜精品电影 | 在线观看国产日韩 | 免费男女羞羞的视频网站中文字幕 | 国产精品一区电影 | av播放在线 | 国产日产精品一区二区三区四区的观看方式 | 成人禁用看黄a在线 | 日本大尺码专区mv | 91成人在线观看喷潮 | 国产在线2020 | 最新日韩在线 | 久久综合狠狠综合久久激情 | 少妇bbbb | 在线午夜 | 九九色综合 | 亚洲成a人片77777kkkk1在线观看 | 日本一区二区不卡高清 | www黄色 | 国产91免费在线观看 | 中文在线最新版天堂 | 99精品国产一区二区三区不卡 | 91av亚洲| 成人av日韩 | 五月天激情开心 | 蜜臀av性久久久久蜜臀av | 成年人在线观看 | 日韩激情一二三区 | 国产精品伦一区二区三区视频 | 丁香花中文在线免费观看 | 久久国产精品色av免费看 | 日日天天 | 免费高清在线视频一区· | 国产免费一区二区三区最新 | 日本成人中文字幕在线观看 | 日韩一区二区三区免费视频 | 高清色免费 | 黄色看片 | 国产精品永久免费在线 | 午夜视频在线观看一区二区三区 | 在线三级播放 | 亚洲日韩中文字幕在线播放 | www.夜夜操| 欧美一区免费在线观看 | 久久亚洲影院 | 黄色aaa级片 | 91在线91 | 欧美视频在线二区 | www.天天射.com| 亚洲精品乱码久久久久 | 国产夫妻性生活自拍 | 成人黄色av免费在线观看 | 亚洲成人av电影在线 | 爱色婷婷 | 91黄色视屏 | 亚洲精品黄| 欧美精品中文 | 婷婷五月在线视频 | 青青草国产精品视频 | 成人午夜影院在线观看 | 久久综合加勒比 | 国产精品久久久久久久久久久免费 | 黄色网大全 | 国产黄色片免费在线观看 | 国产黄色资源 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 久草视频视频在线播放 | 国产色久| 字幕网资源站中文字幕 | 中文字幕在线观看一区二区 | 天天色 天天| 91av视频在线免费观看 | 欧美a在线免费观看 | 久久久久伦理电影 | 99热精品视 | 国产婷婷视频在线 | 欧美专区亚洲专区 | 亚洲天天做 | 天天爽夜夜爽人人爽曰av | 欧美日韩高清在线 | 天天操天天操天天干 | 久久久人人爽 | 色网站在线 | 欧美日韩精品二区第二页 | 午夜精品一区二区三区视频免费看 | 国产精品一区久久久久 | av短片在线观看 | 久久美女视频 | 91在线免费公开视频 | 久久理论电影 | 99热最新精品 | 九九久久国产 | 伊人色综合久久天天 | 超碰人人草 | 黄免费在线观看 | 久久久久亚洲国产 | 黄色一级免费电影 | 一本一本久久a久久精品牛牛影视 | 在线免费观看黄色大片 | 久久电影中文字幕视频 | 亚洲成人av一区二区 | 久久精品视频国产 | 国产精品不卡 | 国产精品毛片一区视频播不卡 | 日韩在线视频二区 | 又色又爽的网站 | 五月天婷婷丁香花 | 探花视频在线观看免费 | 国产亚洲字幕 | 少妇av片 | www.久久99 | 亚洲免费av电影 | 成人av片在线观看 | 国产精品一区二区在线观看 | 欧美精品网站 | 国产日韩高清在线 | 四虎影视4hu4虎成人 | 久久综合爱 | 日日干日日色 | japanese黑人亚洲人4k | 亚洲成人精品在线观看 | 久久精品精品电影网 | 夜色资源网 | 97国产大学生情侣酒店的特点 | 天天操天天操天天操天天操天天操 | 久久综合中文色婷婷 | 日韩精品一区电影 | a视频免费在线观看 | 午夜黄网| 欧美国产日韩一区二区三区 | 国产精品成人免费精品自在线观看 | 婷婷视频 | 中文在线最新版天堂 | 国产二区视频在线观看 | 亚洲一区黄色 | 亚洲闷骚少妇在线观看网站 | 欧美精品一区在线 | 久久草视频 | 久久久久久久免费观看 | 久久国内精品视频 | 一级电影免费在线观看 | 成人资源网 | 丁香婷婷综合激情五月色 | 3d黄动漫免费看 | 久久精品欧美一区二区三区麻豆 | 久久手机看片 | 手机成人av | 91夜夜夜|