十五分鐘快速瞭解Redis 的主從複製

Redis 主從複製

爲了解決 Redis 服務器 cpu 性能不足,以後可以啓動多臺 Redis 服務器,將請求分攤到每個節點上,相當於每個 Redis 服務器只處理之前的 1/N 的請求,爲了保證多臺 Redis 服務器中數據一致,需要搭建 Redis 的主從複製實現。

讀寫分離,性能擴展

主從同步的數據複製原理:

  1. 每次從機聯通後,都會給主機發送sync(同步)指令
  2. 主機立刻進行存盤操作,發送RDB文件給從機
  3. 從機收到RDB文件後覆蓋自己的RDB文件,進行全盤加載
  4. 之後每次主機的寫操作,都會立刻發送給從機,從機執行相同的命令

一主二僕

在這裏插入圖片描述
簡單理解就是一個老大帶兩個小弟

  1. 需要先刪除redis之前的數據
  2. 編寫主從的配置文件:redis-6379(主) / redis-6380/redis-6381

vim /myredis/redis-6379.conf

#引入 redis 默認的配置文件
include /myredis/redis.conf
#保存當前redis進程的id的文件
pidfile /var/run/redis_6379.pid
#端口號
port 6379
#rdb保存的文件
dbfilename dump-6379.rdb
#關閉 aof持久化
appendonly no
#不保存日誌
logfile ""

複製redis6379的配置文件創建6380和6381的配置文件

[root@centos myredis]# cp redis-6379.conf redis-6380.conf
[root@centos myredis]# cp redis-6379.conf redis-6381.conf

打開復制的 6380/6381 配置文件 批量修改端口號

:%s/6379/6380/g
:%s/6379/6381/g

  1. 啓動三個 redis 的服務
    在這裏插入圖片描述
搭建主從:
  1. 通過 info replication 可以查看 主 / 從 狀態
#默認每個都是老大[主機]
role:master  
#老大[主機] 的小弟[從機] [默認爲0]
connected_slaves:0 

在這裏插入圖片描述
2. 小弟[從機] 可以通過 slaveof 老大[主機] IP 端口號 可以搭建主從關係(就是認老大)
在這裏插入圖片描述
3. 老大 [主機] 可讀可寫, 小弟[從機]只可以讀, 沒有寫的權限
在這裏插入圖片描述
主機寫的所有數據都會同步給從機

  • 從機宕機後,重啓後,主從關係不在,需要重新搭建
  • 主機shutdown後情況如何?從機是上位還是原地待命?[ 原地待命 ]
  • 主機又回來了後,主機新增記錄,從機還能否順利複製?[ 可以複製 ]
  • 其中一臺從機down後情況如何?依照原有它能跟上大部隊嗎? [ 可以 ]
  • 切入點問題?slave1、slave2是從頭開始複製還是從切入點開始複製?比如從k4進來,那之前的k1,k2,k3是否也可以複製?[ 從頭複製 ]

缺陷 : 主機壓力太大 [ 中心化 ] 主機宕機, 不能執行寫操作

薪火相傳

在這裏插入圖片描述
簡單理解就是上一個老大salve可以是下一個slave的老大master

  1. 6380 作爲 6379 的小弟

slaveof 127.0.0.1 6379

  1. 6381作爲6380的小弟

slaveof 127.0.0.1 6380

  1. 如下圖
    在這裏插入圖片描述

主可寫可讀,從只讀

  • 如果中間的slave宕機,主機和slave後的從還能否進行數據複製 ?
  • 主機的數據不能傳遞給它後面的從機了
  • 後面的從機會等待宕機的從機回來
  • 如果宕機的從機回來 ?
  • 它之間的主從關係不在,需要重新搭建
  • 它之後的從機的主從關係還在
  • 它和之前的主機搭建主從後,主機的數據可以通過給他和他的從機
  • 主機宕機 ?
  • 後面的從機不能寫,仍然等待主機迴歸

優點 : 減小主機壓力 [ 去除中心化 ]
缺陷 :

  • 主機宕機, 不能執行寫操作
  • 中間的從機宕機後會導致後續從機不能和主機聯通

反客爲主

簡單來說就是老大掛掉了,重新選舉一個小弟當老大

  1. 在薪火相傳的模式的基礎上,主機宕機時,從機不能執行寫指令,而是等待主機迴歸
  2. 我們可以選擇讓離主機最近的從機上位變爲主機,就可以執行寫指令

slaveof no one

  1. 如圖: 在這裏插入圖片描述

哨兵模式

[新主登基、舊主俯首、羣臣俯首][優先選擇]

  1. 反客爲主的自動版
  2. 首先將主從修改爲一主二僕模式

6379(6380/6381)

  1. 如圖
    在這裏插入圖片描述
  2. 在自定義的/myredis目錄下新建 sentinel.conf 哨兵配置文件文件,名字絕不能錯, 裏面插入一下內容:

vim /myredis/sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 1

其中 mymaster爲監控對象起的服務器名稱,1 爲至少有多少個哨兵同意遷移的數量。
在這裏插入圖片描述
寫完後保存退出 !
5. 啓動哨兵

redis-sentinel /myredis/sentinel.conf

在這裏插入圖片描述
shutdown主機 ,

  • 後大概10秒左右可以看到哨兵窗口日誌,切換了新的主機
  • 哨兵程序會發起投票選舉新的主機
  • 所有的從機都會作爲新的主機的從機
  • 以前的宕機的主機也作爲新主機的從機
    在這裏插入圖片描述
    可以看到主機已經自動切換到新的主機
    在這裏插入圖片描述

選舉新主機的規則 :

  • 哪個從機會被選舉爲主機呢?根據優先級別:slave-priority

redis.conf配置文件中設置了 slave-priority 優先級

  • 如圖 :
    在這裏插入圖片描述
  • 如果每個從機都配置了 slave-priority 優先級, 值越小優先級越高
  • 如果沒有設置slave-priority, 哨兵會按照數據偏移量判斷哪個從機上位
  • 如果所有的redis從機數據量都一樣,哨兵會按照啓動redis時創建的runid判斷,挑選值小的當主機

以上就是對 Redis 的主從複製做了一個簡單的敘述!

感謝閱讀, 如果文章對你有幫助記得點贊 收藏 + 關注哦 ! 各種疑難雜症QQ交流羣:1101584918,歡迎大家加入。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章