1. 程式人生 > >Redis學習筆記(4)-持久化、主從配置、哨兵、叢集配置

Redis學習筆記(4)-持久化、主從配置、哨兵、叢集配置

Fork me on Gitee

fork star

HDIS-Framework是一個基於SpringBoot、Kubernetes、阿里雲服務,編寫的一個用於支撐微服務的極速開發框架。

其文件詳盡,Demo全面,設計合理,開箱即用,節省開發時間,提升開發效率。

配套的docker、Kubernetes教程已踩過各種坑,讓你的微服務無障礙的順暢執行起來。

HDIS與Kubernetes或SpringCloud配合使用,能達到最佳效果。

持久化

快照方式

什麼是快照方式?

Redis會根據配置規則將記憶體中的資料複製一份,儲存在硬碟上。

如何使用快照方式?

方式一:根據配置進行快照

配置說明:save S N
S:seconds 秒數
N:number 鍵個數
例子:save 60 20 當60秒內改動的鍵數大於20時,進行快照。
可以配置多行save配置,多個配置可同時生效。
配置執行快照採用的是非同步策略,在執行的過程中不會阻塞客戶端請求。

方式二:根據命令執行快照

客戶端命令:save和besave
當輸入這兩個命令時,redis會執行快照。
區別:save配置會阻塞所有客戶端請求,besave不會阻塞,所以生產環境還是得用besave。

客戶端命令:lastsave
當輸入lastsave命令時,會返回最近一次執行快照的時間戳,用於檢視快照是否執行完成。

客戶端命令:flushall
當執行flushall命令時,redis會清空所有資料,但是清空前會執行快照。
但是,只有存在save配置的情況下才會執行快照。

方式三:執行主從複製時

主從複製初始化時,主資料庫會執行一次快照並向從資料庫傳遞當前的快照檔案。

其他資訊

  • 儲存的位置預設為Redis當前工作目錄的dump.rdb檔案中。
  • 可以通過配置dir(路徑)與dbfilename(檔名)兩個引數來配置快照的檔案的路徑與檔名。
  • 一個數據庫只有一份rdb檔案,當在快照執行過程中是不會修改RDB檔案的,當快照結束後,才會替換老的rdb檔案,也就是說,任何時候rdb檔案都是完整的。
  • 資料恢復時發生在redis重新啟動時。

命令記錄方式

什麼是命令記錄方式?

  • 命令記錄方式是將會改變Redis資料的命令實時記錄到硬碟中。
  • 好處是最大限度的降低redis意外終止導致的資料損失。
  • 壞處是此種方式會降低redis效能。

如何使用命令記錄方式?

方式:根據配置開啟記錄

配置引數:appendonly yes
配置後,啟動redis,redis就會開啟命令記錄方式實現持久化功能。
配置引數:appendfsync everysec
配置後,redis才會每秒將命令寫入到檔案中,否則將由於系統限制,每30秒執行一次寫入。

其他資訊

  • 預設Redis沒有開啟此方式。
  • 儲存的位置預設為Redis當前工作目錄的appendonly .aof檔案中。
  • 可以通過配置dir(路徑)與appendfilename(檔名)兩個引數來配置快照的檔案的路徑與檔名。
  • Redis會自動優化aof檔案(優化冗餘命令),可以通過配置引數配置優化策略: auto-aof-rewrite-percentage
    100(當前AOF檔案大小超過上一次重寫的AOF檔案大小的百分之多少才會重寫) auto-aof-rewrite-min-size
    64mb(允許重寫的最小AOF檔案大小)。
  • 也可以通過BGREWRITEAOF命令手動執行重寫。
  • 資料恢復時發生在redis重新啟動時。

主從複製

主從複製介紹

  • 主資料庫:能讀能寫,可有多個從庫。
  • 從資料庫:預設配置只能讀不能寫,只能有一個主庫。

如何配置主從複製?

配置引數:slaveof 主庫IP地址 主庫埠
在從資料庫配置中加入此引數,即可配置主從複製。
具體操作:

  1. 開啟主資料庫
  2. 從資料庫配置檔案中加入slave of引數
  3. 開啟從資料庫

成功資訊

配置成功後啟動顯示

主端使用info replication顯示

從端使用info replication顯示

其他資訊

  • 進入相應的資料庫後可以用info replication命令檢視節點主從資訊。
  • 從庫配置了主庫後啟動時,主庫會生成快照並快取生成快照期間的所有寫命令,當快照生成完畢後,主庫會把快照和快取起來的寫命令一起發給從庫,從庫拿到資料後進行初始化,初始化結束後,主庫每次接到寫的命令都會同步到從庫。
  • 當主從庫斷線重連後,會重新執行從庫初始化過程保證資料同步。
  • 主從資料庫可以做讀(從)寫(主)分離提高資料庫效能。
  • 為了提高效能,可以設定從庫啟用持久化,主庫禁用持久化,這樣做也符合哨兵的機制。

哨兵

什麼是哨兵?

  • 哨兵的作用就是監視主從庫
  • 並且當主庫出問題時將從庫轉成主庫。
  • 當崩潰的主庫恢復時,將此庫變為現有在的主庫的從庫。
  • 哨兵之間也會相互監控執行情況。

如何配置哨兵?

  1. 建立起主從資料庫
  2. 在想要建立哨兵的物理節點上單獨建立一個sentinel.conf配置檔案
  3. 登入此物理節點並執行命令啟動哨兵:redis-sentinel 配置檔案路徑

成功結果顯示

其他資訊

  • 配置檔案內容為:sentinel monitor 哨兵名稱(自定義,唯一) 主庫IP地址 主庫埠號 哨兵節點同意數(整數)
  • 哨兵節點同意數:多個哨兵監控一個主庫時,當主庫崩潰,只有當此數以上的哨兵都檢測到奔潰,才會啟動哨兵的主從切換。
  • 配置檔案只需要配置主資料庫資訊,哨兵會自動發現從資料庫。

哨兵部署參考方案

  • 每個物理節點都部署一個哨兵,不論是主庫還是從庫。
  • 設定哨兵節點同意數為:N/2+1,N為哨兵節點數量。

叢集配置(水平切分)

為什麼要使用叢集配置?

當使用主從時,每個庫都有著全部的資料,這樣的話,最大的儲存空間受限於最小記憶體的機器,因此,將資料水平的放在不同的物理節點上,可以解決以上問題。

如何配置水平切分?

  1. 每個叢集至少需要三個主庫
  2. 配置每個庫的cluster-enable yes
  3. 啟動每個庫
  4. 使用info cluster檢視當前節點是否成功打開了叢集配置,cluster-enable:1表示開啟成功,但此時只是打開了叢集配置,並沒有加入叢集。
  5. 使用redis-trib.rb外掛初始化叢集。

其他資訊

  • 當節點加入集群后,實現資料水平切分的方式是為需要成為主庫的節點分配插槽(slot)。
  • 插槽:redis以演算法將所有可能的鍵值換算為0-16384的整數,這分配出來的鍵值就是插槽。

如何使用redis-trib.rb外掛初始化?

客戶端命令

redis-trib.rb create --replicas N 節點IP:節點埠 節點IP:節點埠 節點IP:節點埠
N:每個主資料庫擁有的從資料庫的個數
節點部分的組成格式:如果N為1,就是主從,N為2就是主從從。

初始化所做的事情

  1. 檢視每個節點是否執行正常,是否打開了叢集配置。
  2. 將每個節點加入叢集。
  3. 分配插槽
  4. 分配主從資料節點。
  5. 使用cluster slots檢視插槽分配情況。

如何使用redis-trib.rb外掛重新分配插槽?

如果插槽被分配過,需要重新移動節點,並且不影響已有資料。
此情況適用於叢集執行過程中新增節點或刪除節點等操作。

具體操作

  1. 配置新增庫的cluster-enable yes
  2. 啟動新增的每個庫
  3. 使用節點命令redis-trib.rb reshard 節點IP:節點埠,節點可以是叢集中任意一個節點,指令碼會自動獲取整個叢集資訊。
  4. 程式尋要你需要移動多少個插槽。輸入你想移動的插槽個數。
  5. 程式尋要目的地節點ID,使用cluster nodes命令可以得到節點ID,並輸入ID。
  6. 程式尋要移出插槽的節點ID,輸入ID。
  7. 使用cluster slots檢視插槽分配情況。