Redis(三)-- 主從同步

1、主從同步的工做原理

redis主從複製過程: 當配置好slave後,slave與master創建鏈接,而後發送sync命令。不管是第一次鏈接仍是從新鏈接,master都會啓動一個後臺進程,將 數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存。後臺進程完成寫文件後,master就發送文件給slave,slave將 文件保存到硬盤上,再加載到內存中,接着master就會把緩存的命令轉發給slave,後續master將收到的寫命令發送給slave。若是master同時收到多個slave發來的同步鏈接命令,master只會啓動一個進程來寫數據庫鏡像,而後發送給全部的slave。master同步數據時是非阻塞式的,能夠接收用戶的讀寫請求。然而在slave端是阻塞模式的,slave在同步master數據時,並不可以響應客戶端的查詢。redis

能夠在master禁用數據持久化,只須要註釋掉master 配置文件中的全部save配置,而後只在slave上配置數據持久化。數據庫

若是Master和Slave之間的連接出現斷連現象,Slave能夠自動重連Master,可是在鏈接成功以後,一次徹底同步將被自動執行。緩存

img

  • slave鏈接到master
  • slave發送SYNC命令
  • master服務器備份數據庫到.rdb文件
  • master服務器把.rdb文件傳輸給slave服務器
  • slave服務器把.rdb文件數據導入到數據庫

上面的這5步是同步的第一階段,接下來在master服務器上調用每一個命令都在使用replicationFeedSlaves()來同步到slave服務器。bash

2、配置主從同步

1.新建文件夾master-slave,在master-slave中新建master和slave,將redis.conf到master和slave文件夾中。服務器

2.修改master和slave的配置文件:端口號、進程文件和日誌文件的位置。測試

3.修改slave的配置文件:spa

slaveof <masterip> <masterport>    # 指定master的ip和port
masterauth <master-password>       # master有驗證的狀況下
slave-read-only yes                # 設置slave爲只讀模式,默認的
複製代碼

4.分別進入到master和slave文件夾,啓動 redis服務:redis-server redis.conf日誌

5.客戶端鏈接code

  1. 鏈接master:redis-cli -h 192.168.99.207 -p 6379

查看master的信息,輸入 info,看到角色是mastercdn

img

  1. 鏈接slave:redis-cli -h 192.168.99.207 -p 6380

查看slave的信息,輸入info,看到的角色是slave,且

  • master_link_status:up
  • master_repl_offset 和 slave_repl_offset相等
  • master_last_io_seconds_ago 在 10 秒內,則說明配置成功

img

6.測試

  1. 在master中添加數據:set name xbq

  2. 在slave中查詢數據:get name,結果和在master中插入的數據同樣。

  3. 測試下 在slave中添加數據:set address shenzheng,發現報錯,(error) READONLY You can't write against a read only slave.

這是由於 咱們設置了 slave爲只讀,不能夠操做寫。

3、主從同步的應用

1.用於對 數據的熱備份

2.用於讀寫分離


歡迎關注個人公衆號,第一時間接收最新文章~ 搜索公衆號: 碼咖 或者 掃描下方二維碼:

img
相關文章
相關標籤/搜索