天天看點

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

1.redis主備叢集

本文所用redis版本為3.2.1

1.1下載下傳redis

連結:https://pan.baidu.com/s/1bjdoi1LO9qcC1mbPe9ts-Q

提取碼:isc9

1.2下載下傳完成後解壓,目錄如圖

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

1.3複制一份解壓後的redis,目錄如圖

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

第一個redis的配置檔案不用修改,點開第二個檔案夾,修改redis.windows.conf

首先找到port,修改端口号為6380

然後找到slaveof <masterip> <masterport>,修改為slaveof 127.0.0.1 6379,并将前面的注釋去掉,點選儲存

1.4啟動redis

分别執行2個檔案夾下面的start.bat

啟動第一個如圖:

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

啟動第二個如圖:

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

可以看到顯示對外連結接端口号為6379的資訊,接下來就來驗證一下

1.5驗證主備叢集

打開DOS指令視窗,切換到這倆随便一個檔案夾下面

輸入 redis-cli -h 127.0.0.1 -p 6379,或者輸入redis-cli.exe也能切換到6379下

接着輸入 info replication 指令檢視資訊

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

我們先在6379下面設定一個鍵值對,看在6380下面能否看到。

set k1 v1
 
get k1
           

沒問題的話Ctrl+C退出,redis-cli -h 127.0.0.1 -p 6380 切換到6380下面

輸入 get k1,發現也可以得到v1

接着輸入info replication

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

現在我們把6379關掉,繼續get k1,發現還可以讀到v1。

實際上至此redis主從叢集已經完成了,但是當6379挂掉以後,想往6380存入資料,發現報錯((error) READONLY You can't write against a read only slave.),然後輸入info replication指令,發現6380還是備,并沒有升成主

Windows下Redis主備叢集及哨兵模式的搭建1.redis主備叢集2.Redis哨兵模式

這就有點難堪了o(╯□╰)o

我們想要的是主備都可以寫資料,而且主挂掉以後備可以自動升成主,當挂掉的那個主重新開機的時候會降為備,那麼這時候我們就要引入redis哨兵模式了。

2.Redis哨兵模式

Redis哨兵模式,用現在流行的話可以說就是一個“哨兵機器人”,給“哨兵機器人”進行相應的配置之後,這個"機器人"可以7*24小時工作,它能能夠自動幫助你做一些事情,如監控,提醒,自動處理故障等。

每個哨兵(sentinel) 會向其它哨兵(sentinel)、master、slave定時發送消息,以确認對方是否”活”着,如果發現對方在指定時間(可配置)内未回應,則暫時認為對方已挂(所謂的”主觀認為當機” Subjective Down,簡稱sdown).

若“哨兵群”中的多數sentinel,都報告某一master沒響應,系統才認為該master"徹底死亡"(即:客觀上的真正down機,Objective Down,簡稱odown),通過一定的vote算法,從剩下的slave節點中,選一台提升為master,然後自動修改相關配置.

關于redis哨兵的具體原理就不贅述了,文末會放上參考連結。本文主要說明一下如何搭建,其實很簡單,隻需要加一個配置檔案就可以了。

2.1建立sentinel.conf檔案

redis解壓目錄下是沒有這個檔案的,需要我們自己建立

# 這個是Redis6379配置内容,其他檔案同理新增然後改一下端口即可,26380
#目前Sentinel服務運作的端口
protected-mode no
port 26381
# 哨兵監聽的主伺服器 後面的1表示主機挂掉以後進行投票,隻需要1票就可以從機變主機
sentinel monitor mymaster 127.0.0.1 6379 2
# 3s内mymaster無響應,則認為mymaster當機了
sentinel down-after-milliseconds mymaster 3000
#如果10秒後,mysater仍沒啟動過來,則啟動failover  
sentinel failover-timeout mymaster 10000  
# 執行故障轉移時, 最多有1個從伺服器同時對新的主伺服器進行同步
sentinel parallel-syncs mymaster 1
# 設定哨兵sentinel 連接配接主從的密碼 注意必須為主從設定一樣的驗證密碼,沒有的話不用設定
sentinel auth-pass mymaster 123456
           

在2個檔案夾下面都放入此檔案,隻是端口不同

分别啟動2個redis以及2個哨兵,哨兵啟動指令為redis-server.exe sentinel.conf --sentinel

我們會發現報錯Creating Server TCP listening socket *:26379: listen: UnKnown error

經過網上查詢得知是沒有配置bind參數的原因,增加bind參數後sentinel.conf檔案如下

# 這個是Redis6379配置内容,其他檔案同理新增然後改一下端口即可,26380 26381
#目前Sentinel服務運作的端口
port 26381
bind 127.0.0.1
# 哨兵監聽的主伺服器 
sentinel monitor mymaster 127.0.0.1 6379 2
# 3s内mymaster無響應,則認為mymaster當機了
sentinel down-after-milliseconds mymaster 3000
#如果10秒後,mysater仍沒啟動過來,則啟動failover  
sentinel failover-timeout mymaster 10000  
# 執行故障轉移時, 最多有1個從伺服器同時對新的主伺服器進行同步
sentinel parallel-syncs mymaster 1
           

現在我們分别啟動2個redis以及2個哨兵

注意,啟動redis主備叢集時要先啟動主,後啟動從,啟動哨兵先啟動哪個都可以。

啟動哨兵指令:redis-server.exe sentinel.conf --sentinel ,後面的“--sentinel”也要打上

都啟動成功之後,就可以進行測試了。

這裡有一個自己踩過的坑告訴大家,當測試主挂掉的時候,發現從可以正常的升為主,但是主重新開機的時候,如果你設定了redis密碼,會發現報錯:Master does not understand REPLCONF capa: -NOAUTH Authentication required。

這是因為配置主備叢集時,在redis.window.conf中,你隻給從配置了masterauth "12345",這種情況在主沒挂掉時可以用,但當主挂掉後重新開機時會變為從,沒有密碼連不上叢集,是以會報這個錯,是以需要在主的redis.window.conf中也加上這句話。

參考連結:

https://blog.csdn.net/u010648555/article/details/79430105

https://blog.csdn.net/u011872945/article/details/82928329

http://www.cnblogs.com/sammyliu/p/6929066.html

https://blog.csdn.net/Derek_Yam/article/details/81286637

繼續閱讀