主從模式是指使用一個(gè)Redis實(shí)例作為主機(jī),其余的作為備份 machine。一般來(lái)說(shuō),主節(jié)點(diǎn)負(fù)責(zé)寫請(qǐng)求,從節(jié)點(diǎn)負(fù)責(zé)讀請(qǐng)求,主節(jié)點(diǎn)異步同步到從節(jié)點(diǎn)。主節(jié)點(diǎn)和從節(jié)點(diǎn)保存的數(shù)據(jù)是一樣的,但是因?yàn)橥降脑颍瑥墓?jié)點(diǎn)的數(shù)據(jù)會(huì)有一點(diǎn)延遲。但是,主從模式的高可用性會(huì)有問題。因?yàn)樵谥鞴?jié)點(diǎn)掛斷后沒有自動(dòng)選擇主節(jié)點(diǎn)的機(jī)制,所以需要人工干預(yù)來(lái)指定一個(gè)從節(jié)點(diǎn)作為主節(jié)點(diǎn)。
哨兵模式是在主從模式的基礎(chǔ)上增加一個(gè)哨兵集群。每個(gè)哨兵監(jiān)控主節(jié)點(diǎn)和從節(jié)點(diǎn)的狀態(tài)。如果主節(jié)點(diǎn)掛機(jī),將選擇其中一個(gè)從節(jié)點(diǎn)作為主節(jié)點(diǎn),達(dá)到高可用的目的。(也就是有了自動(dòng)選主機(jī)制)Sentinel 集群中的每個(gè)節(jié)點(diǎn)都會(huì)啟動(dòng)三個(gè)定時(shí)任務(wù)。如果從最后一次有效回復(fù)PING命令開始的時(shí)間超過(guò)了downaftermilliseconds指定的值,Sentinel會(huì)將該實(shí)例標(biāo)記為主觀脫機(jī)。
5、Redis 集群方案應(yīng)該怎么做通常為了提高網(wǎng)站的響應(yīng)速度,熱點(diǎn)數(shù)據(jù)總是保存在內(nèi)存中,而不是直接從后端數(shù)據(jù) library中讀取。Redis是一個(gè)很好的緩存工具。大型網(wǎng)站應(yīng)用,熱點(diǎn)數(shù)據(jù)往往是巨大的,幾十吉,幾百吉很正常。在這種情況下,如何正確構(gòu)造Redis?首先,無(wú)論我們使用自己的物理主機(jī)還是云服務(wù)主機(jī),內(nèi)存資源往往是有限的。向上擴(kuò)展不是一個(gè)好方法。我們需要scaleup out能夠橫向擴(kuò)展,這就需要多個(gè)主機(jī)協(xié)同提供服務(wù),也就是分布式多個(gè)Redis實(shí)例協(xié)同運(yùn)行。
6、Redis-Cluster是一個(gè)去中心化的集群架構(gòu)。RedisCluster的性能與單節(jié)點(diǎn)部署相同。多主節(jié)點(diǎn)、負(fù)載均衡和讀寫分離RedisCluster支持標(biāo)準(zhǔn)主從復(fù)制配置,確保高可用性和可靠性。故障轉(zhuǎn)移(failover)rediscus也實(shí)現(xiàn)了類似Raft的一致方法,以確保整個(gè)集群的可用性。向RedisCluster添加新節(jié)點(diǎn)或刪除節(jié)點(diǎn)是透明的,不需要停機(jī)。
數(shù)據(jù) Partition,Mass數(shù)據(jù)Storage Redis的部署不需要其他代理或工具,rediscus和獨(dú)立的Redis幾乎完全兼容。角色:master和slaveRedisCluster由多個(gè)Redis節(jié)點(diǎn)組組成,是一個(gè)沒有中心節(jié)點(diǎn)的P2P(pointtopoint Point)集群架構(gòu),通過(guò)Gossip協(xié)議傳播。集群Gossip協(xié)議是一種通信協(xié)議,也是一種傳播消息的方式。
7、Redis-Cluster 集群在哨兵模式下,仍然只有一個(gè)主節(jié)點(diǎn)。當(dāng)并發(fā)寫請(qǐng)求較大時(shí),哨兵模式無(wú)法緩解寫壓力。在rediscluster集群中,每個(gè)主節(jié)點(diǎn)可以添加多個(gè)從節(jié)點(diǎn),主節(jié)點(diǎn)和從節(jié)點(diǎn)遵循主從模式的特點(diǎn)。當(dāng)用戶需要處理更多的讀取請(qǐng)求時(shí),添加從節(jié)點(diǎn)可以擴(kuò)展系統(tǒng)的讀取性能。redis 集群的主節(jié)點(diǎn)內(nèi)置類似哨兵的節(jié)點(diǎn)故障檢測(cè)和自動(dòng)故障轉(zhuǎn)移功能。
集群故障轉(zhuǎn)移的方法和Sentient基本相同。不同的是,在集群中,故障轉(zhuǎn)移是由集群中的其他在線主節(jié)點(diǎn)進(jìn)行的,因此集群中不需要Sentient。rediscluster集群將密鑰存儲(chǔ)空間劃分為16384個(gè)槽。實(shí)際上,集群最大節(jié)點(diǎn)數(shù)是16384【官方建議最大節(jié)點(diǎn)數(shù)不要超過(guò)1000】。
關(guān)于8、RedisCluster 集群
redis的構(gòu)建,請(qǐng)參考我上一篇文章:rediscluster環(huán)境的構(gòu)建至少需要3個(gè)主節(jié)點(diǎn)。這里參考官網(wǎng)的例子創(chuàng)建6個(gè)節(jié)點(diǎn),包括3個(gè)主節(jié)點(diǎn)和3個(gè)從節(jié)點(diǎn),對(duì)應(yīng)的redis節(jié)點(diǎn)IP和端口如下:以下是選項(xiàng)最少的集群的配置文件。創(chuàng)建一個(gè)新目錄和六個(gè)帶有端口號(hào)的子目錄,稍后,我們將在每個(gè)目錄中運(yùn)行一個(gè)Redis實(shí)例:命令如下:在文件夾7000到7005中,創(chuàng)建一個(gè)redis。每個(gè)conf文件,文件的內(nèi)容可以使用上面的示例配置文件,但是切記要將配置中的端口號(hào)和nodes.conf(相同服務(wù)器的同名沖突)從7000改為與文件夾名相同的編號(hào)。