1. 單機部署Redis的問題:首先是若是機器故障(忽然斷電或者機器宕機),那麼數據就會大量丟失;其次就是單機Redis的容量會有瓶頸,受限於機器的內存空間;每秒的請求處理數也會受到單機Redis的限制,儘管Redis每秒的請求處理數能夠很高,但在大型應用中仍然是遠遠不夠的。爲了解決這些問題,實現高可用,Redis提供了一個主從複製的功能,來實現集羣式部署Redisredis
2. 簡單瞭解主從複製的模型:主從複製,會有一個主節點和多個從節點,每個節點都是一個Redis,並且每個Redis節點都能給客戶端提供Redis的服務,主從複製就是從主Redis節點中複製數據到從Redis節點,若是主節點進行一個數據更新操做,那麼從節點也會進行一個相同的操做。主從複製經過RDB文件來實現。網絡
3. 主從複製的做用:異步
4. 主從複製的特色:函數
1. 有兩種實現方式:分別是經過運行命令來實現,另外一種是經過redis的啓動配置文件來實現性能
1. run_id:Redis每次啓動時,都會生成一個不一樣的id來標示當前運行的Redis。從節點中會保存主節點的run_id標示,若是主節點的Redis發生了重啓,那麼從節點依據ip和端口號鏈接到主節點時,就會發現主節點的run_id標示的改變(這種改變意味着主節點中的數據可能發生的大量的改動),因此此時就會引發全量複製,也就是將主節點中的全部數據所有複製過來。spa
2. 偏移量:每當主節點增刪改一個數據時,主節點中就會有一個數值來記錄這種變化,偏移量就是記錄Redis中數據改變的一個標示,當主節點更改一個數據時,偏移量也會發生對應的改變,並且主節點在將數據更改命令同步給從節點時,也會將該偏移量發送給從節點,這樣就能夠對比主從節點的偏移量,來觀察是否出現主從不一致的問題。下圖中master_repl_offset就表示主節點的偏移量,高亮處就表示從節點中的偏移量,使用 ./redis-cli -p 6379 info replication 該命令便可在主節點中查看主從節點的偏移量3d
3. 全量複製:全量複製指的是不只僅複製主節點發送過來的RDB文件中的數據,還要將主節點在生成RDB文件期間主節點後續執行的數據更改命令所更改的數據一併複製過來,在這期間,主節點執行的數據更改命令會被記錄在一個緩衝區repl_back_buffer中,當從節點RDB加載完畢後,就會將這一部分被更改的數據同步到從節點中,具體過程以下blog
4. 全量複製的性能開銷:主要消耗在主節點RDB文件的生成須要的時間,其次是RDB文件在網絡間的傳輸時間,還須要從節點的數據清空時間、加載RDB文件的時間進程
5. 數據更改命令緩衝區repl_back_buffer用於:當Redis經過Linux中的fork()函數開闢一個子進程處理其餘事務(好比主進程執行bgsave生成一個RDB文件時,或者主進程執行bgrewriteaof生成一個AOF文件時),而主進程(即處理客戶端命令的進程)後續執行的一些數據更改命令會被暫時保存在該區域,並且該區域空間有限(配置文件中repl-backlog-size 1mb便可配置該處空間大小)事務
1. 部分複製解決的問題:在實際環境中,主節點與從節點之間可能會發生一些網絡波動等狀況,致使從節點與主節點之間的網絡鏈接斷開(主從節點的Redis均未關閉),若是從新鏈接上後,可使用全量複製來從新進行一次主從節點數據同步,可是全量複製會帶來一個性能開銷的問題,並且從節點中可能有大量數據是主節點中沒有更該過的,也就是不須要進行再次同步的數據,若是使用全量複製確定是帶來了一些沒必要要的浪費。因此,部分複製功能就是爲了解決該問題的。
2. 部分複製的發生過程:
1. 故障發生時服務自動轉移(自動故障轉移):即當某個節點發生故障致使中止服務時,該節點提供的服務會有另外一個節點自動代替提供,這樣就實現了一個高可用的效果
2. 從節點故障:即若是某個從節點發生了故障,致使沒法向在該節點上的客戶端提供讀服務,解決辦法就是使該客戶端轉移到另外一個可用從節點上,可是在轉移時,應該考慮該從節點能承受幾個客戶端的壓力
3. 主節點故障:若是主節點發生故障,在使用主節點進行讀寫操做的客戶端就沒法使用了,而使用從節點只進行讀操做的客戶端仍是能夠繼續使用的,解決辦法就是從從節點中選一個節點更改成主節點,而且將原主節點的客戶端鏈接到新的主節點上,而後經過該客戶端將其餘從節點鏈接到新的主節點中
4. 主從複製確實能夠解決故障問題,可是主從複製不能實現自動故障轉移,其必需要經過一些手動操做,並且很是麻煩,因此要實現自動故障轉移還須要另外一個功能,Redis中提供了sentinel功能來實現自動故障轉移。
1. 讀寫分離:即客戶端發來的讀寫命令分開,寫命令交給主節點執行,讀命令交給從節點執行,不只減小了主節點的壓力,並且加強了讀操做的能力;但也會形成一些問題
2. 主從配置不一致:形成的問題有
3. 規避全量複製:全量複製的性能開銷較大,因此要儘可能避免全量複製,
4. 規避複製風暴: