Redis之主從複製(Master/Slave)案例分析

Redis的主從複製(Master/Slave)

  1. 主從複製:主機數據更新後根據配置和策略,
    自動同步到備機的master/slaver機制,Master以寫爲主,Slave以讀爲主,可以進行讀寫分離、容災恢復。

  2. 配置主從數據庫:

    1. 配從(庫)不配主(庫)

    2. 修改配置文件:

      1. 拷貝三份redis.conf,分別爲6379.conf6380.conf6381.conf,並修改各配置文件的pidfile "/var/run/redis63**.pid"port 63**logfile "63**.log"dbfilename "dump63**.rdb"的**爲79、80、81。
    3. 各redis服務器和客戶端以不同端口啓動

      [root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-server /myredis/redis6379.conf 
      [root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-cli -p 6379
      
  3. 常見組合:

    1. 一主二從:
      1. 一個Master兩個Slave,Slave啓動成功連接到master後可以共享Master的數據(複製原理);
      2. Master可以寫數據讀數據,Slave不可以寫數據只能讀數據;
        在這裏插入圖片描述
      3. 可以通過info replication查看當前狀態;
        在這裏插入圖片描述
      4. Master掛了之後,各個Slave原地待命,仍然可以使用原數據
        在這裏插入圖片描述
      5. Master重新開啓之後還原爲Master
        在這裏插入圖片描述
    2. 主—從主—從
      1. Slaveof 新主庫IP 新主庫端口
      2. 上一個Slave可以是下一個slave的Master,Slave同樣可以接收其他slaves的連接和同步請求,那麼該slave作爲了鏈條中下一個的master,可以有效減輕master的寫壓力;
      3. 中途變更轉向:會清除之前的數據,重新建立拷貝最新的;
    3. 自己做主庫
      1. SLAVEOF no one
      2. 使當前數據庫停止與其他數據庫的同步,轉成主數據庫
  4. 複製原理:

    1. Slave啓動成功連接到master後會發送一個sync命令;
    2. Master接到命令啓動後臺的存盤進程,同時收集所有接收到的用於修改數據集命令,在後臺進程執行完畢之後,master將傳送整個數據文件到slave,以完成一次完全同步;
    3. 全量複製:而slave服務在接收到數據庫文件數據後,將其存盤並加載到內存中;
    4. 增量複製:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步;
    5. 但是隻要是重新連接master,一次完全同步(全量複製)將被自動執行;
  5. 哨兵模式(sentinel)

    1. 自動將自己作爲主庫:能夠後臺監控主機是否故障,如果故障了根據投票數自動將從庫轉換爲主庫;
    2. 配置過程:
      1. /myredis/下創建sentinel.conf文件;
      2. 配置哨兵: sentinel monitor host6379 127.0.0.1 6379 1(host6379爲哨兵名,可任意;1表示大於這個票數且票數最多的可以當Master)
      3. 啓動哨兵:在/usr/local/bin下執行Redis-sentinel /myredis/sentinel.conf
      4. 當master掛了之後,投票選舉:
        在這裏插入圖片描述
        在這裏插入圖片描述
    3. 一組sentinel能同時監控多個Master
  • 複製延時問題:
    由於所有的寫操作都是先在Master上,再同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章