Redis 集群
Redis 如何實(shí)現(xiàn)服務(wù)高可用?
要想設(shè)計(jì)一個(gè)高可用的 Redis 服務(wù),一定要從 Redis 的多服務(wù)節(jié)點(diǎn)來(lái)考慮,比如 Redis 的主從復(fù)制、哨兵模式、切片集群。
主從復(fù)制
主從復(fù)制是 Redis 高可用服務(wù)的最基礎(chǔ)的保證,實(shí)現(xiàn)方案就是將從前的一臺(tái) Redis 服務(wù)器,同步數(shù)據(jù)到多臺(tái)從 Redis 服務(wù)器上,即一主多從的模式,且主從服務(wù)器之間采用的是「讀寫分離」的方式。
主服務(wù)器可以進(jìn)行讀寫操作,當(dāng)發(fā)生寫操作時(shí)自動(dòng)將寫操作同步給從服務(wù)器,而從服務(wù)器一般是只讀,并接受主服務(wù)器同步過(guò)來(lái)寫操作命令,然后執(zhí)行這條命令。

也就是說(shuō),所有的數(shù)據(jù)修改只在主服務(wù)器上進(jìn)行,然后將最新的數(shù)據(jù)同步給從服務(wù)器,這樣就使得主從服務(wù)器的數(shù)據(jù)是一致的。
注意,主從服務(wù)器之間的命令復(fù)制是異步進(jìn)行的。
具體來(lái)說(shuō),在主從服務(wù)器命令傳播階段,主服務(wù)器收到新的寫命令后,會(huì)發(fā)送給從服務(wù)器。但是,主服務(wù)器并不會(huì)等到從服務(wù)器實(shí)際執(zhí)行完命令后,再把結(jié)果返回給客戶端,而是主服務(wù)器自己在本地執(zhí)行完命令后,就會(huì)向客戶端返回結(jié)果了。如果從服務(wù)器還沒有執(zhí)行主服務(wù)器同步過(guò)來(lái)的命令,主從服務(wù)器間的數(shù)據(jù)就不一致了。
所以,無(wú)法實(shí)現(xiàn)強(qiáng)一致性保證(主從數(shù)據(jù)時(shí)時(shí)刻刻保持一致),數(shù)據(jù)不一致是難以避免的。
TIP
想更詳細(xì)了解 Redis 主從復(fù)制的工作原理,可以詳細(xì)看這篇:主從復(fù)制是怎么實(shí)現(xiàn)的?
在使用 Redis 主從服務(wù)的時(shí)候,會(huì)有一個(gè)問題,就是當(dāng) Redis 的主從服務(wù)器出現(xiàn)故障宕機(jī)時(shí),需要手動(dòng)進(jìn)行恢復(fù)。
為了解決這個(gè)問題,Redis 增加了哨兵模式(Redis Sentinel),因?yàn)樯诒J阶龅搅丝梢员O(jiān)控主從服務(wù)器,并且提供主從節(jié)點(diǎn)故障轉(zhuǎn)移的功能。



