redis 主從複製 讀寫分離 持久化---總結
主從複製模式:
slaveof 127.0.0.1:6379
slaveof no one
一僕二主 :一個主機兩個從機,當主機重啟那麼兩個從機地位不變 原地待命,重啟完之後繼續做master,從機能共享主機上的所有的資料,同時如果主機down掉難麼從機上還有資料,這就是主從複製,但是從機不能直接寫入資料,只能get讀取資料,主機用來寫入資料,這就是讀寫分離
薪火相傳 :一個是主機一個是從機 這個從機同時也是另外一個機器的主機, 這樣第一個主機寫入資料 同時最後一個主機也能get到這個資料,這就是一代一代傳下去 減輕第一個主機的壓力,如果中途變更轉向的話會清除資料,重新拷貝建立最新的。
反客為主:一個主機兩個從機,主機down掉之後,兩個從機很聽話會乖乖不動,如果在其中一個從機中輸入slaveof no one 那麼這個從機會變成主機,另外一個從機我們手動指向這個剛剛變成的主機,這樣他們兩個成為一個主從結構,當down的主機重啟之後也是master只不過這個主機與上個主機之間沒有任何聯絡了
複製原理:slave啟動連線master成功後會傳送一條sync命令,master接受的命令會開啟一個後臺rdb持久化程序,同時收集所有的的增刪改指令,進行aof持久化,在持久化程序結束之後,master將整個資料檔案傳送到slave,已完成一次完全同步。
全量複製:而slave伺服器在接受到資料庫檔案資料後,將資料存檔並載入 到記憶體中。
增量複製:master繼續將新的所有收集到的修改 命令依次傳給slave,完成同步
但是隻要重新連線 完全複製將被執行
哨兵機制sentinel:哨兵機制就是反客為主的自動化模式
新建一個sentinel.conf檔案sentinel monitor host127.0.0.1 6379 1
sentinel-server sentinel.conf
redis持久化:
rdb是將記憶體中的redis資料按照一定的時間間隔寫入磁碟,也就是snapshot快照,它恢復時是將檔案直接讀到記憶體裡,
主程式會fork一個程序來進行持久化,會先將資料寫入到一個臨時檔案裡,等持久化完成會將臨時檔案替換上傳持久化生成的檔案,整個過程中主程序不進行任何io操作,如果是對資料的完整性和一致性要求不高的,而且是大規模的資料 那麼rdb要比aof更加合適。
aof是將redis的寫操作按照配置檔案設定的方式以日誌的形式寫入磁碟中 只能追加 不能修改 當到達設定的閾值,就會rewrite
當redis重啟時會先尋找aof檔案進行恢復。
redis會先找到aof進行恢復
配置主從複製的方法
第一種:
先開啟6379的redis然後使用redis-server --port 6380 --slaveof 127.0.0.1 6379 直接開啟6380埠 並且關係自動就是6380是slave6379是master
開啟客戶端 使用redis-cli -p 6379 或者是 redis-cli -p 6380 使用info replication 檢視
第二種
同樣先開啟6379埠 然後開啟 redis-server --port 6380 埠
redis-cli -p 6380
redis-cli -p 6379
連結兩個客戶端
在客戶端中 使用slaveof host port
第三種 配置檔案的方法
新建一個redis6380.conf檔案 1. port 改成 6380 2. logfile '6380.log' 3. slaveof 127.0.0.1
redis-server redis6380.conf 執行 然後使用 redis-cli -p 6380