Redis 主從複製
爲了解決 Redis 服務器 cpu 性能不足,以後可以啓動多臺 Redis 服務器,將請求分攤到每個節點上,相當於每個 Redis 服務器只處理之前的 1/N 的請求,爲了保證多臺 Redis 服務器中數據一致,需要搭建 Redis 的主從複製實現。
讀寫分離,性能擴展
主從同步的數據複製原理:
- 每次從機聯通後,都會給主機發送sync(同步)指令
- 主機立刻進行存盤操作,發送RDB文件給從機
- 從機收到RDB文件後覆蓋自己的RDB文件,進行全盤加載
- 之後每次主機的寫操作,都會立刻發送給從機,從機執行相同的命令
一主二僕
簡單理解就是一個老大帶兩個小弟
- 需要先刪除redis之前的數據
- 編寫主從的配置文件:
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
- 啓動三個 redis 的服務
搭建主從:
- 通過
info replication
可以查看 主 / 從 狀態
#默認每個都是老大[主機]
role:master
#老大[主機] 的小弟[從機] [默認爲0個]
connected_slaves:0
2. 小弟[從機] 可以通過 slaveof
老大[主機] IP
端口號
可以搭建主從關係(就是認老大)
3. 老大 [主機] 可讀可寫, 小弟[從機]只可以讀, 沒有寫的權限
主機寫的所有數據都會同步給從機
- 從機宕機後,重啓後,主從關係不在,需要重新搭建
- 主機shutdown後情況如何?從機是上位還是原地待命?[ 原地待命 ]
- 主機又回來了後,主機新增記錄,從機還能否順利複製?[ 可以複製 ]
- 其中一臺從機down後情況如何?依照原有它能跟上大部隊嗎? [ 可以 ]
- 切入點問題?slave1、slave2是從頭開始複製還是從切入點開始複製?比如從k4進來,那之前的k1,k2,k3是否也可以複製?[ 從頭複製 ]
缺陷 : 主機壓力太大 [ 中心化 ] 主機宕機, 不能執行寫操作
薪火相傳
簡單理解就是上一個老大salve可以是下一個slave的老大master
- 6380 作爲 6379 的小弟
slaveof 127.0.0.1 6379
- 6381作爲6380的小弟
slaveof 127.0.0.1 6380
- 如下圖
主可寫可讀,從只讀
- 如果中間的slave宕機,主機和slave後的從還能否進行數據複製 ?
- 主機的數據不能傳遞給它後面的從機了
- 後面的從機會等待宕機的從機回來
- 如果宕機的從機回來 ?
- 它之間的主從關係不在,需要重新搭建
- 它之後的從機的主從關係還在
- 它和之前的主機搭建主從後,主機的數據可以通過給他和他的從機
- 主機宕機 ?
- 後面的從機不能寫,仍然等待主機迴歸
優點 : 減小主機壓力 [ 去除中心化 ]
缺陷 :
- 主機宕機, 不能執行寫操作
- 中間的從機宕機後會導致後續從機不能和主機聯通
反客爲主
簡單來說就是老大掛掉了,重新選舉一個小弟當老大
- 在薪火相傳的模式的基礎上,主機宕機時,從機不能執行寫指令,而是等待主機迴歸
- 我們可以選擇讓離主機最近的從機上位變爲主機,就可以執行寫指令
slaveof no one
- 如圖:
哨兵模式
[新主登基、舊主俯首、羣臣俯首][優先選擇]
- 反客爲主的自動版
- 首先將主從修改爲一主二僕模式
6379(6380/6381)
- 如圖
- 在自定義的/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,歡迎大家加入。