redis主從復制以及集群

前言:面試中經常會遇到的問題,小結一下

主從復制的好處
1 避免單點故障,redis掛掉以后,redis插槽有空檔,導致redis不可用
2 構建讀寫分離架構,滿足讀寫分離的場景。(數(shù)據庫一般80%都是讀請求,20%的寫請求)

redis主從同步的過程

1 當從庫和主庫建立主從關系后,從庫會向主庫發(fā)送PSYNC命令
2 主庫接受到PSYNC命令后,開始在后臺保存快照,并緩存些命令到臨時緩沖區(qū)中。
3 當RDB快照完成后,redis會將RDB文件和這段時間緩存的寫命令通過網絡IO發(fā)送給從機器
4 redis 接收到后會載入快照文件,并且執(zhí)行收到的寫命令。
5 之后每當主redis接收到寫命令之后就將寫命令發(fā)送給從redis,從redis執(zhí)行寫命令,保持主從的一致性。
注意:數(shù)據是持久化到磁盤,從庫redis加載數(shù)據,完成數(shù)據同步,中間涉及到磁盤IO
常見問題: 服務宕機處理手段
如果是從庫redis 宕機,直接重啟,會自動加入主從架構,并自動通過增量復制完成數(shù)據同步
如果是主庫宕機:選擇一個從庫斷掉主從關系,并將自身提升為主庫提供服務 : SLAVEOF NO ONE。重啟掛掉的服務,通過 SLAVEOF ip port 將其設置為其他從庫的從庫,保持主從架構。

哨兵機制

在上邊的邏輯中,主服務宕機,需要運維人手動重啟。redis提供哨兵機制,可以自動實現(xiàn)重啟。
哨兵的主要作用:監(jiān)控redis服務是否正常運行,如果主reids宕機,在從庫中選取 leader當新的主庫,如果是從庫宕機,直接重啟從庫機器,并且 slave of master
單個哨兵的監(jiān)控:只監(jiān)控 master ,自動發(fā)現(xiàn)master 下的 slave
多個哨兵的監(jiān)控:在監(jiān)控master的同時,還會互相監(jiān)督;

redis集群

redis集群主要是用來解決redis的高并發(fā)問題的,redis集群將16384個插槽分配到集群中的機器中,當有請求來的時候,首先會根據請求的key值計算hash值,再看映射到哪臺集群上,集群上的每臺機器都保存著插槽分配信息和集群中有效機器的ip port.
集群未解決的問題
1、 集群中的每個節(jié)點都會定期的向其它節(jié)點發(fā)送PING命令,并且通過有沒有收到回復判斷目標節(jié)點是否下線;
2、 集群中每一秒就會隨機選擇5個節(jié)點,然后選擇其中最久沒有響應的節(jié)點放PING命令;
3、 如果一定時間內目標節(jié)點都沒有響應,那么該節(jié)點就認為目標節(jié)點疑似下線;
4、 當集群中的節(jié)點超過半數(shù)認為該目標節(jié)點疑似下線,那么該節(jié)點就會被標記為下線(fail);
5、 當集群中的任何一個節(jié)點下線,就會導致插槽區(qū)有空檔,不完整,那么該集群將不可用;
6、 如何解決上述問題?
a) 在Redis集群中可以使用主從模式實現(xiàn)某一個節(jié)點的高可用
b) 當該節(jié)點(master)宕機后,集群會將該節(jié)點的從數(shù)據庫(slave)轉變?yōu)椋╩aster)繼續(xù)完成集群服務;
集群下的主從復制”,3臺master搭建集群,分別為每一臺master 做一個主從架構。這應該就是集群和主從同時保證高并發(fā)和高可用的架構

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容