1、redis主從復制的原理
2、哨兵機制的原理
3、分布式方案對比
為什么需要集群
1、性能
2、擴展
3、可用性
可用性、數(shù)據(jù)安全、性能都可以通過搭建多個 Reids 服務實現(xiàn)。其中有一個是主節(jié) 點(master),可以有多個從節(jié)點(slave)。主從之間通過數(shù)據(jù)同步,存儲完全相同的數(shù) 據(jù)。如果主節(jié)點發(fā)生故障,則把某個從節(jié)點改成主節(jié)點,訪問新的主節(jié)點。
主從復制
配置
在每個slave的redis.conf增加
slaveof 192.168.8.203 6379
或者在啟動服務時通過參數(shù)指定 master 節(jié)點:
./redis-server --slaveof 192.168.8.203 6379
或在客戶端直接執(zhí)行 slaveof xx xx,使該 Redis 實例成為從節(jié)點。
啟動后,查看集群狀態(tài):
redis> info replication
從節(jié)點不能寫入數(shù)據(jù),只能從master節(jié)點同步數(shù)據(jù)。get成功,set失敗。
主節(jié)點寫入后,slave會自動從master同步數(shù)據(jù)
斷開復制
slaveof no one
主從復制原理
連接階段
1、slavenode啟動,在本地保存master node 的信息,host和ip
2、slave node 有個定時任務,每隔一秒鐘檢查是否有新的master node要連接和復制,如果發(fā)現(xiàn),就跟masternode建立socket網絡連接。如果連接成功,從節(jié)點為該socket建立一個專門復制工作的文件處理器,負責后續(xù)的復制工作。
數(shù)據(jù)同步階段
master nodde 第一次執(zhí)行全量復制,bgsave命令在本地創(chuàng)建一份rdb快照,發(fā)給slavenode。slave node 清除自己的舊數(shù)據(jù),然后用master的rdb來加載數(shù)據(jù)。
生成rdb文件時,master會把所有的寫命令緩存在內存里,在slavenode保存了rdb以后,再把新的寫命令復制給slavenode。
命令傳播階段
master node 持續(xù)將寫命令異步復制給slave node
如果有一個節(jié)點一段時間斷開連接了,有一個偏移量來記錄上一次復制到哪里了。
sentinel 哨兵
為redis提供高可用。
Sentinel 默認以每秒鐘 1 次的頻率向 Redis 服務節(jié)點發(fā)送 PING 命令。如果在 down-after-milliseconds 內都沒有收到有效回復,Sentinel 會將該服務器標記為下線 (主觀下線)。
這個時候 Sentinel 節(jié)點會繼續(xù)詢問其他的 Sentinel 節(jié)點,確認這個節(jié)點是否下線, 如果多數(shù) Sentinel 節(jié)點都認為 master 下線,master 才真正確認被下線(客觀下線), 這個時候就需要重新選舉 master。