Redis主從複製

主從複製:

Redis主從複製配置和使用都很是簡單,經過主從複製能夠容許多個Redis server擁有和master server相同的數據庫副本redis

 

 



Redis主從複製特色:
1.Master能夠擁有多個slave
2.多個slave能夠鏈接同一個master外,還能夠鏈接到其餘slave
3.主從複製不會阻塞master,在同步數據時,master能夠繼續處理client請求
4.提升系統的伸縮性

Redis主從複製過程:
1.Slave與master創建鏈接,發送sync同步命令
2.Master會啓動一個後臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存。
3.後臺完成保存後,就將此文件發送給slave
4.slave將文件保存到硬盤上

配置主從服務器:
  配置slave服務器很簡單,只需在slave的配置文件中加入一下配置:
  slaveof 192.168.1.1 6379 #指定master的IP和端口
  masterauth lamp #這是主機的密碼數據庫

 

如今在master裏設置一個鍵,如:set name weichen;使用keys * 或 get name 查看slave是否能複製成功。緩存

自Redis2.6後,slave默認將只讀;在Redis從庫中寫,會出現以下提示:安全

  

  不過這個能夠在配置文件裏面做更改(slave-read-only no),而後重啓Redis便可容許寫操做。服務器

  容許slave寫操做,一方面對存儲臨時的數據有用(由於在和主庫從新同步後,從庫數據能夠很容易被刪除掉),可是若是因爲配置錯誤致使客戶端對其寫操做則會引起問題。網絡

  slave只讀的設計是防止在網絡上暴露給不被信任的客戶端,僅僅是針對誤用Redis實例的一個保護層;可是一個只讀的slave仍然默認輸出全部管理命令,好比 CONFIG, DEBUG等等。在必定程度上,你能夠經過使用 'rename-command' 跟蹤全部的管理/危險命令來提升只讀的slave的安全性。less

 

同步複製策略:disk 或 socketsocket

#是否使用socket方式複製數據。目前redis複製提供兩種方式,disk和socket。若是新的slave連上來或者重連的slave沒法部分同步,就會執行全量同步,master會生成rdb文件。有2種方式:disk方式是master建立一個新的進程把rdb文件保存到磁盤,再把磁盤上的rdb文件傳遞給slave。socket是master建立一個新的進程,直接把rdb文件以socket的方式發給slave。disk方式的時候,當一個rdb保存的過程當中,多個slave都能共享這個rdb文件。socket的方式就的一個個slave順序複製。在磁盤速度緩慢,網速快的狀況下推薦用socket方式。 性能

 

無磁盤複製

 

主庫接收到SYNC的命令時會執行RDB過程,即便在配置文件中禁用RDB持久化也會生成,那麼若是主庫所在的服務器磁盤IO性能較差,那麼這個複製過程就會出現瓶頸,慶幸的是,Redis在2.8.18版本開始實現了無磁盤複製功能(不過該功能仍是處於試驗階段)。spa

 

原理:

Redis在與從數據庫進行復制初始化時將不會將快照存儲到磁盤,而是直接經過網絡發送給從數據庫,避免了IO性能差問題。

 

開啓無磁盤複製:repl-diskless-sync yes

 

(用info查看當前Redis服務器信息)

  經過幾個參數能夠判斷是Reis主仍是從,

  role:master

  slave0:192.168.88.90,6379,online

注:只要Redis slave配置完成,任什麼時候候slave打開,master數據都會自動複製。