1. 程式人生 > >redis 主從複製 讀寫分離 持久化---總結

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