Redis在項目中如何用的,如何實現高可用
(1)數據持久化
AOF 方式(快照恢復)
RDB 方式(只追加文件)
( 2)主從同步(主從復制)
有一主節點和多個從節點,多個節點組成一個 Redis 集群,在這個集群主節點用來進行數據的操作,其他從節點用于同步主節點的內容,并且提供給客戶端進行數據查詢。
使用主從模式就可以實現數據的讀寫分離,把寫操作的請求分發到主節點上,把其他的讀操作請求分發到從節點上,這樣就減輕了 Redis 主節點的運行壓力,并且提高了 Redis 的整體運行速度。不但如此使用主從模式還實現了 Redis 的高可用,當主服務器宕機之后,可以很迅速的把從節點提升為主節點,為 Redis 服務器的宕機恢復節省了寶貴的時間。并且主從復制還降低了數據丟失的風險,因為數據是完整拷貝在多臺服務器上的,當一個服務器磁盤壞掉之后,可以從其他服務器拿到完整的備份數據。
原理總結
Slave啟動成功連接到master后會發送一個sync命令
Master接到命令啟動后臺的存盤進程,同時收集所有接收到的用于修改數據集命令, 在后臺進程執行完畢之后,master將傳送整個數據文件到slave,以完成一次完全同步
全量復制:而slave服務在接收到數據庫文件數據后,將其存盤并加載到內存中。第一次連接
增量復制:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步。主從復制時
但是只要是重新連接master,一次完全同步(全量復制)將被自動執行
slave節點初次連接master節點,會發送psync命令并觸發全量復制。
此時master節點fork一個后臺進程,開始生成一份RDB快照,同時將那些從外面接收到的寫命令緩存到緩沖區中。
RDB文件生成完畢后,將此文件發送給slave節點,slave先寫入磁盤,再從磁盤加載到內存,
接著master會將新增加的緩沖區的寫命令發送給slave,slave執行寫命令并同步數據。
如果slave節點和master節點因網絡故障斷開連接,會自動重連,連接之后master節點會復制缺少的數據給slave節點。
常見三種使用方式
主仆模式
從服務器重啟之后,需要重新連接主服務器,才能成為從服務器
從服務器重新連接之后,會復制主機的全部內容
主服務器重啟之后,還是主服務器。
薪火相傳
父傳子,子傳孫
上一個Slave可以是下一個slave的Master,Slave同樣可以接收其他slaves的連接和同步請求,那么該slave作為了鏈條中下一個的master, 可以有效減輕master的寫壓力,去中心化降低風險。
反客為主
當一個master宕機后,后面的slave可以立刻升為master,其后面的slave不用做任何修改。
用slaveof no one 將從機變為主機。
主機掛掉,反客為主。需要運維人員輸入命令
想要解決這個困擾。就看看哨兵模式
slaveof no one
(3)Redis 哨兵模式(Sentinel)
Redis 哨兵模式就是用來監視 Redis 主從服務器的,當 Redis 的主從服務器發生故障之后,Redis 哨兵提供了自動容災修復的功能。
復制延時
由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。
故障恢復
(4)Redis 集群(Cluster)
Redis 集群實現了對Redis的水平擴容,即啟動N個redis節點,將整個數據庫分布存儲在這N個節點中,每個節點存儲總數據的1/N。
Redis 集群通過分區(partition)來提供一定程度的可用性(availability): 即使集群中有一部分節點失效或者無法進行通訊, 集群也可以繼續處理命令請求。
一個集群至少要有三個主節點。
一個Redis 集群包含 16384 個插槽(hash slot), 數據庫中的每個鍵都屬于這 16384 個插槽的其中一個,
集群使用公式CRC16(key) % 16384 來計算鍵 key 屬于哪個槽, 其中 CRC16(key) 語句用于計算鍵key 的CRC16 校驗和 。
集群中的每個節點負責處理一部分插槽。 舉個例子, 如果一個集群可以有主節點, 其中:
節點A 負責處理 0 號至5460 號插槽。
節點B 負責處理 5461 號至10922 號插槽。
節點C 負責處理 10923 號至16383 號插槽。
總結
(1)數據持久化保證了數據不丟失;
(2)Redis 主從同步讓 Redis 從單機變成了多機。它有兩種模式:主從模式和從從模式,但當主節點出現問題時,需要人工手動恢復系統;
(3)Redis 哨兵模式用來監控 Redis 主從模式,并提供了自動容災恢復的功能。
(4)Redis 集群,除了可以提供主從和哨兵的功能之外,還提供了多個主從節點的集群功能,這樣就可以把數據均勻的存儲各個主機主節點上,實現了系統的橫向擴展,大大提高了 Redis 的并發處理能力。
Redis 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。