如何保證 Redis 高并發、高可用?Redis 的主從複制原理能介紹一下麼?Redis 的哨兵原理能介紹一下麼?主從架構下的資料部分複制?
考慮如何用 redis 來加多台機器,保證 redis 是高并發的,如何讓 redis 保證自己不是挂掉以後就直接死掉了,即 redis 高可用?
高并發
單機的 Redis,能夠承載的 QPS 大概就在上萬到幾萬不等。對于緩存來說,一般都是用來支撐讀高并發的。是以架構做成主從(master-slave)架構,一主多從,主負責寫,并且将資料複制到其它的 slave 節點,從節點負責讀。所有的讀請求全部走從節點。這樣也可以很輕松實作水準擴容,支撐讀高并發。
高可用
Redis 哨兵叢集實作高可用,哨兵是一個分布式系統,你可以在一個架構中運作多個哨兵程序,這些程序使用流言協定來接收關于主節點是否下線的資訊,并使用投票協定來決定是否執行自動故障遷移,以及選擇哪個備節點作為新的主節點。每個哨兵會向其它哨兵、主節點、備節點定時發送消息,以确認對方是否”活”着,如果發現對方在指定時間(可配置)内未回應,則暫時認為對方已挂.若“哨兵群”中的多數哨兵,都報告某一主節點沒響應,系統才認為該主節點"徹底死亡",通過算法,從剩下的備節點中,選一台提升為主節點,然後自動修改相關配置。
Redis 哨兵主備切換的資料丢失問題
異步複制導緻的資料丢失:master->slave 的複制是異步的,是以可能有部分資料還沒複制到 slave,master 就當機了,此時這部分資料就丢失了。
腦裂導緻的資料丢失:某個 master 所在機器