Redis——學習之路四(初識主從配置)


  首先我們配置一台master服務器,兩台slave服務器。master服務器配置就是默認配置 端口為6379,添加就一個密碼CeshiPassword,然后啟動master服務器。

兩台slave服務器配置如下:
    1.先找到配置redis.windows-service.config文件修改port 6379 為port 6380
    2.然后配置master服務器地址:slaveof 127.0.0.1 6379,然后主服務有密碼還需要配置密碼 masterauth CeshiPassword(本人有密碼)
    3.啟動從服務器的加上這個配置文件 redis-server redis.windows-service.config
    4.然后在主服務器基本信息(info),可以看到如圖,說明主從配置成功
    5.另一台slave服務器port修改為6381 其它配置一樣

下面我來簡單的驗證一下

  先連接master服務在服務器上set一個 name "hello world",然后連接其中一台slave服務器get一下。

 
    這是master服務器的結果。
    這是slave服務器的結果。
    我們看到slave有同步到master服務器set name的值,但是下面當我們想給slave服務器set時報錯,這個是為了數據庫同步才這樣設置的。就是讓用戶不會誤操作,導致數據庫的不一致。當然這個設置在.conf里面的slave-read-only yes 這個我們上一章介紹過。
    這樣我們就完成就redis的主從配置,如果你還想要添加slave服務器就只需要按上面的步驟修改為不同的端口即可。下面我們來說明一下一個很嚴重的問題,如果某天出現master服務器宕機了那怎么辦?master服務器宕機了,我們可以實際操作一下,會出現上面樣的情況。
  我們來關閉master服務器 ,然后去slave服務器獲取name 的值 發現依然可以正常獲取。有一個問題現在我們雖然可以正常獲取但是已經沒有set的服務器了,就是說我們的服務器只能get不可以set。我們再查看slave服務info
  可以看到maste_link_status狀態是down,正常連接狀態為up。如果遇到這么的情況我們應該怎么去處理呢?
  我們是不是應該講現在可以正常工作的兩台slave服務選取一台變為master服務器好讓redis正常工作。
下面提供兩種方法:
    1.手動切換(slave到master)
        首先這里選擇6380服務器輸入命令slaveof no one,意思就是告訴這台slave服務器已經沒有master服務器了,你會成為master服務器。
  我們在這台服務器上輸入info 查看 發現這台服務變成了master
   接着我們要做的是將6381這台slave服務器指向6380這台master
  這樣我們就手動完成了master宕機到選擇一台slave服務器為master服務器。有人一定會說讓維護人員自己手動操作這不是耽誤事情嘛,確實是這樣如果mster需要我們手動去操作那用戶早就跑光了。
    2.自動切換(sentinel哨兵)
    這是在redis2.4以后版本,redis作者antirez考慮到社區的需求寫的一個自動維護工具名字叫redis-sentinel。在redis2.8與redis3.0時將sentinel2集成到了redis-server中,在redis2.8以前的版本可能你還是需要自己去下載源代碼編譯生成redis-sentinel然后使用。這里就不講了,我們只說redis2.8這個版本的。首先我們需要去官方下載redis2.8對應版本的sentinel.conf,不要下載redis3.0,我就下載過,啟動時報參數錯誤(如圖下圖)。
下載完成后我們先來看看sentinel有哪些我們去簡單配置就能完成我們的業務需求的。
第一個參數是主服務器的名稱,然后是IP地址,端口號,以及需要幾個sentinel選舉,我們只運行了一個sentinel做簡單選舉。
sentinel monitor <master-name> <ip> <redis-port> <quorum> 
sentinel monitor mymaster 127.0.0.1 6379 1 
 
配置監控連接的密碼,參數一:主服務器的名稱,參數二:密碼
sentinel auth-pass <master-name> <password> 
sentinel auth-pass mymaster CeshiPassword
 
指定了Sentinel認為Redis實例已經失效所需的毫秒數,這里使用默認值30秒
sentinel down-after-milliseconds <master-name> <milliseconds> 
sentinel down-after-milliseconds mymaster 30000 

 

同時我們需要為slave服務器配置一下優先級,即當master宕機時誰被選定為新的master的優先級。我給6381端口的服務器設置了 slave-priority 1 slave優先級最高,給6380端口的服務設置了默認值100。也就是說當6379宕機時6380會被sentinel選舉為master。現在我們先啟動這個三台redis服務器,然后啟動我們的sentinel服務輸入命令 redis-server sentinel.conf --sentinel
上圖可以看到sentinel監控了 127.0.0.1 6379 同時發現了 兩台salve服務器 127.0.0.1 6380 與127.0.0.6381
現在我們來關閉master這台服務器。
然后發現sentinel監控到了,通知他選舉6380這個slave為master了。
然后當我們重啟127.0.0.1 6379 服務器時,發現它居然自動加入了到原來的集群中,自動成6381的slave服務器。
但是當我們查看info信息時發現只有一台slave服務
再查看6379服務的狀態,連接狀態是down
為什么呢?指定服務地址端口正確,對那就是密碼不正確,查看配置信息果然我們重啟的6379服務沒有設置訪問6381的密碼。

設置密碼 config set masterauth CeshiPassword ,查看6381slave服務信息 ok
查看6379信息,如下圖連接狀態為up了

下一章將學習一下C#客戶端如果調用redis。

 

以上是自己個人學習的記錄,都是很簡單的處理,初級的知識,如果有什么不對的地方請大家指正,歡迎評論!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM