日本乱偷中文字幕,美女脱内衣18禁免费看,亚洲国产精品丝袜在线观看,18女人腿打开无遮挡,廖承宇chinese野战做受

Redis 集群詳解

225317-1577976797c60f.jpg

Redis 集群簡(jiǎn)介

Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存儲方案。完全去中心化,由多個(gè)節點(diǎn)組成,所有節點(diǎn)彼此互聯(lián)。Redis 客戶(hù)端可以直接連接任何一節點(diǎn)獲取集群中的鍵值對,不需要中間代理,如果該節點(diǎn)不存在用戶(hù)所指定的鍵值,其內部會(huì )自動(dòng)把客戶(hù)端重定向到鍵值所在的節點(diǎn)。

Redis 集群是一個(gè)網(wǎng)狀結構,每個(gè)節點(diǎn)都通過(guò) TCP 連接跟其他每個(gè)節點(diǎn)連接。在一個(gè)有 N 個(gè)節點(diǎn)的集群中,每個(gè)節點(diǎn)都有 N-1 個(gè)流出的 TCP 連接,和 N-1 個(gè)流入的連接,這些 TCP 連接會(huì )永久保持。

17168214a6f19ad1.png

Redis Cluster 同其他分布式存儲系統一樣,主要具備以下兩個(gè)功能:

數據分區

Redis 集群會(huì )將用戶(hù)數據分散保存至各個(gè)節點(diǎn)中,突破單機 Redis 內存最大存儲容量。集群引入了 哈希槽slot的概念,其搭建完成后會(huì )生 16384 個(gè)哈希槽slot,同時(shí)會(huì )根據節點(diǎn)的數量大致均等的將 16384 個(gè)哈希槽映射到不同的節點(diǎn)上。當用戶(hù)存儲key-value時(shí),集群會(huì )先對key進(jìn)行 CRC16 校驗然后對 16384 取模來(lái)決定key-value放置哪個(gè)槽,從而實(shí)現自動(dòng)分割數據到不同的節點(diǎn)上。

數據冗余

Redis 集群支持主從復制和故障恢復。集群使用了主從復制模型,每個(gè)主節點(diǎn)master應至少有一個(gè)從節點(diǎn)slave。假設某個(gè)主節點(diǎn)故障,其所有子節點(diǎn)會(huì )廣播一個(gè)數據包給集群里的其他主節點(diǎn)來(lái)請求選票,一旦某個(gè)從節點(diǎn)收到了大多數主節點(diǎn)的回應,那么它就贏(yíng)得了選舉,被推選為主節點(diǎn),負責處理之前舊的主節點(diǎn)負責的哈希槽。

節點(diǎn)握手

雖然上面 6 個(gè)節點(diǎn)都啟用了群集支持,但默認情況下它們是不相互信任或者說(shuō)沒(méi)有聯(lián)系的。節點(diǎn)握手就是在各個(gè)節點(diǎn)之間創(chuàng )建鏈接(每個(gè)節點(diǎn)與其他節點(diǎn)相連),形成一個(gè)完整的網(wǎng)格,即集群。

節點(diǎn)握手的命令如下:

cluster meet ip port

但為了創(chuàng )建群集,不需要發(fā)送形成完整網(wǎng)格所需的所有 cluster meet 命令。只要能發(fā)送足夠的cluster meet消息,可以讓每個(gè)節點(diǎn)都可以通過(guò)一系列已知節點(diǎn)到達每個(gè)其他節點(diǎn),缺失的鏈接將被自動(dòng)創(chuàng )建。

例如,如果我們通過(guò)cluster meet將節點(diǎn) A 與節點(diǎn) B 連接起來(lái),并將 B 與 C 連接起來(lái),則 A 和 C 會(huì )自己找到握手方式并創(chuàng )建鏈接。

我們的創(chuàng )建的 6 個(gè)節點(diǎn)可以通過(guò) redis-cli 連接到 A 節點(diǎn)執行如下五組命令完成握手,生產(chǎn)環(huán)境需要將 IP 127.0.0.1替換成外網(wǎng) IP。

cluster meet 127.0.0.1 7002
cluster meet 127.0.0.1 7003
cluster meet 127.0.0.1 8001
cluster meet 127.0.0.1 8002
cluster meet 127.0.0.1 8003

如上述命令正常執行輸出結果如下。

[root@localhost bin]# /usr/local/bin/redis-cli -p 7001
127.0.0.1:7001> cluster meet 127.0.0.1 7002
OK
127.0.0.1:7001> cluster meet 127.0.0.1 7003
OK
127.0.0.1:7001> cluster meet 127.0.0.1 8001
OK
127.0.0.1:7001> cluster meet 127.0.0.1 8002
OK
127.0.0.1:7001> cluster meet 127.0.0.1 8003
OK

接下來(lái)可以通過(guò) cluster nodes 命令查看節點(diǎn)之間 的鏈接狀態(tài)。我隨機找了兩個(gè)節點(diǎn) B 和 F 測試,輸出結果如下所示。

[root@localhost /]# /usr/local/bin/redis-cli -p 7002 cluster nodes
61e8c4ed8d1ff2a765a4dd2c3d300d8121d26e12 127.0.0.1:7001@17001 master - 0 1552220691885 4 connected
a8a41694f22977fda78863bdfb3fc03dd1fab1bd 127.0.0.1:8002@18002 master - 0 1552220691000 5 connected
51987c4b5530c81f2845bb9d521daf6d3dce3659 127.0.0.1:8001@18001 master - 0 1552220690878 3 connected
1b4b3741945d7fed472a1324aaaa6acaa1843ccb 127.0.0.1:7002@17002 myself,master - 0 1552220690000 1 connected
19147f56e679767bcebb8653262ff7f56ca072a8 127.0.0.1:7003@17003 master - 0 1552220691000 2 connected
ed6fd72e61b747af3705b210c7164bc68739303e 127.0.0.1:8003@18003 master - 0 1552220690000 0 connected
[root@localhost /]# /usr/local/bin/redis-cli -p 8002 cluster nodes
1b4b3741945d7fed472a1324aaaa6acaa1843ccb 127.0.0.1:7002@17002 master - 0 1552220700255 1 connected
ed6fd72e61b747af3705b210c7164bc68739303e 127.0.0.1:8003@18003 master - 0 1552220703281 0 connected
19147f56e679767bcebb8653262ff7f56ca072a8 127.0.0.1:7003@17003 master - 0 1552220700000 2 connected
a8a41694f22977fda78863bdfb3fc03dd1fab1bd 127.0.0.1:8002@18002 myself,master - 0 1552220701000 5 connected
61e8c4ed8d1ff2a765a4dd2c3d300d8121d26e12 127.0.0.1:7001@17001 master - 0 1552220702275 4 connected
51987c4b5530c81f2845bb9d521daf6d3dce3659 127.0.0.1:8001@18001 master - 0 1552220701265 3 connected

可以看到,節點(diǎn) B 和節點(diǎn) F 都已經(jīng)分別和其他 5 個(gè)節點(diǎn)建立鏈接。

至此,節點(diǎn)握手完成。

分配槽位

此時(shí) Redis 集群還并沒(méi)有處于上線(xiàn)狀態(tài),可以在任意一節點(diǎn)上執行 cluster info 命令來(lái)查看目前集群的運行狀態(tài)。

[root@localhost ~]# /usr/local/bin/redis-cli -p 7001 cluster info
cluster_state:ok
......

分配槽位的命令如下:

cluster addslots slot [slot ...]

根據預先規劃,這一步需要使用 cluster addslots 命令手動(dòng)將 16384 個(gè)哈希槽大致均等分配給主節點(diǎn) A、B、C。

/usr/local/bin/redis-cli -p 7001 cluster addslots {0..5461}
/usr/local/bin/redis-cli -p 7002 cluster addslots {5462..10922}
/usr/local/bin/redis-cli -p 7003 cluster addslots {10923..16383}

上面三組命令執行完畢,可以再次查看目前集群的一些運行參數。

[root@localhost ~]# /usr/local/bin/redis-cli -p 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:5
cluster_my_epoch:4
cluster_stats_messages_ping_sent:11413
cluster_stats_messages_pong_sent:10509
cluster_stats_messages_meet_sent:11
cluster_stats_messages_sent:21933
cluster_stats_messages_ping_received:10509
cluster_stats_messages_pong_received:10535
cluster_stats_messages_received:21044

如上輸出cluster_state:ok證明 Redis 集群成功上線(xiàn)。

主從復制

Redis 集群成功上線(xiàn),不過(guò)還沒(méi)有給主節點(diǎn)指定從節點(diǎn),此時(shí)如果有一個(gè)節點(diǎn)故障,那么整個(gè)集群也就掛了,也就無(wú)法實(shí)現高可用。詳細了解點(diǎn)這里:Redis主從復制以及主從復制原理

集群中需要使用 cluster replicate 命令手動(dòng)給從節點(diǎn)配置主節點(diǎn)。

集群復制命令如下:

cluster replicate node-id

集群中各個(gè)節點(diǎn)的node-id可以用cluster nodes命令查看,如下輸出1b4b3741945d7fed472a1324aaaa6acaa1843ccb即是主節點(diǎn) B 的node-id。

[root@localhost /]# /usr/local/bin/redis-cli -p 8002 cluster nodes
1b4b3741945d7fed472a1324aaaa6acaa1843ccb 127.0.0.1:7002@17002 master - 0 1552220700255 1 connected
ed6fd72e61b747af3705b210c7164bc68739303e 127.0.0.1:8003@18003 master - 0 1552220703281 0 connected
19147f56e679767bcebb8653262ff7f56ca072a8 127.0.0.1:7003@17003 master - 0 1552220700000 2 connected
a8a41694f22977fda78863bdfb3fc03dd1fab1bd 127.0.0.1:8002@18002 myself,master - 0 1552220701000 5 connected
61e8c4ed8d1ff2a765a4dd2c3d300d8121d26e12 127.0.0.1:7001@17001 master - 0 1552220702275 4 connected
51987c4b5530c81f2845bb9d521daf6d3dce3659 127.0.0.1:8001@18001 master - 0 1552220701265 3 connected

根據預先規劃,A主D從;B主E從;C主F從。執行如下三組命令分別為從節點(diǎn) D、E、F 指定其主節點(diǎn),使群集可以自動(dòng)完成主從復制。

/usr/local/bin/redis-cli -p 8001 cluster replicate 61e8c4ed8d1ff2a765a4dd2c3d300d8121d26e12
/usr/local/bin/redis-cli -p 8002 cluster replicate 1b4b3741945d7fed472a1324aaaa6acaa1843ccb
/usr/local/bin/redis-cli -p 8003 cluster replicate 19147f56e679767bcebb8653262ff7f56ca072a8

命令執行成功后,我們便算以手動(dòng)方式成功搭建了一個(gè) Redis 集群。

最后,再來(lái)查看一下集群中的節點(diǎn)信息。

轉自:https://juejin.im/post/5e9170d951882573b627f25f



標 題:《Redis 集群詳解
作 者:zeekling
提 示:轉載請注明文章轉載自個(gè)人博客:浪浪山旁那個(gè)村

    評論
    0 評論
avatar

取消
日本乱偷中文字幕,美女脱内衣18禁免费看,亚洲国产精品丝袜在线观看,18女人腿打开无遮挡,廖承宇chinese野战做受