redis主從,哨兵(windows版)

 

 

1、下載git

因爲redis官方並不支持windows操做系統,因此官網上是下不到的,須要到gitlab上下載,下載地址以下:github

https://github.com/MicrosoftArchive/redis/releasesredis

2、解壓安裝windows

將下載後的zip文件解壓到本地磁盤,注意解壓到的目錄不能有中文和特殊字符,不然會出現不少奇葩的問題。解壓後的目錄以下:緩存

3、HA配置服務器

咱們採用一主(master)二從(slave)三sentinel的架構模式來作演示
master ip:127.0.0.1 port:6379
slave1 ip:127.0.0.1 port:6380
slave2 ip:127.0.0.1 port:6381架構

4、新建和修改配置文件併發

一、修改redis.conf配置文件gitlab

因爲咱們採用的是一主二從三sentinel的模式,因此咱們須要6個配置文件,拷貝2份redis.windows.conf配置文件,分別命名爲redis.windows6380.conf和redis.windows6381.conf,其中修改redis.windows.conf配置文件的以下幾個參數:
port 6379
bind 127.0.0.1測試

redis.windows6380.conf以下:
port 6380
bind 127.0.0.1
slaveof 127.0.0.1 6379 // 設置master服務器爲6379

redis.windows6381.conf以下:
port 6381
bind 127.0.0.1
slaveof 127.0.0.1 6379 // 設置master服務器爲6379

二、建立並修改sentinel.conf

該模式使用了3sentinel,因此咱們須要複製3份sentinel.conf配置文件,並分別命名爲sentinel26479.conf和sentinel26579.conf,其中修改sentinel.conf配置文件中的以下幾個參數:
/**
1. port :當前Sentinel服務運行的端口
2.sentinel monitor mymaster 127.0.0.1 6379 2:Sentinel去監視一個名爲mymaster的主redis實例,這個主實例的IP地址爲本機地址127.0.0.1,端口號爲6379,而將這個主實例判斷爲失效至少須要2個 Sentinel進程的贊成,只要贊成Sentinel的數量不達標,自動failover就不會執行
3.sentinel down-after-milliseconds mymaster 5000:指定了Sentinel認爲Redis實例已經失效所需的毫秒數。當 實例超過該時間沒有返回PING,或者直接返回錯誤,那麼Sentinel將這個實例標記爲主觀下線。只有一個 Sentinel進程將實例標記爲主觀下線並不必定會引發實例的自動故障遷移:只有在足夠數量的Sentinel都將一個實例標記爲主觀下線以後,實例纔會被標記爲客觀下線,這時自動故障遷移纔會執行
4.sentinel parallel-syncs mymaster 1:指定了在執行故障轉移時,最多能夠有多少個從Redis實例在同步新的主實例,在從Redis實例較多的狀況下這個數字越小,同步的時間越長,完成故障轉移所需的時間就越長
5.sentinel failover-timeout mymaster 15000:若是在該時間(ms)內未能完成failover操做,則認爲該failover失敗
**/

sentinel.conf內容:
port 26379
sentinel myid 88a3f92f656984fd84c183b6b183d5d264ddc485
sentinel monitor mymaster 127.0.0.1 6381 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

 

sentinel26479.conf內容:
port 26479
sentinel myid 6c4798231532356aacf132f1aa952f022f41012e
sentinel monitor mymaster 127.0.0.1 6381 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

sentinel26579.conf內容:
port 26579
sentinel myid fad25e089080be8dddadd3f20e44f888b1f8d48a
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

三、安裝服務,須要從新設置名稱。而後去服務中,開啓「redis6380」(此時就能夠鏈接6380的庫了)

redis-server --service-install redis.windows.conf --service-name redis6379
redis-server --service-install redis.windows6380.conf --service-name redis6380
redis-server --service-install redis.windows6381.conf --service-name redis6381

5、啓動服務器

一、分別啓動master,slave1,slave2

啓動命令分別以下:

redis-server.exe redis.windows.conf
redis-server.exe redis.windows6380.conf
redis-server.exe redis.windows6381.conf

二、分別啓動sentinel1,sentinel2,sentinel3

啓動命令分別以下:
redis-server.exe sentinel.conf --sentinel
redis-server.exe sentinel26479.conf --sentinel
redis-server.exe sentinel26579.conf --sentinel

服務啓動成功後,界面顯示以下:

三、查看redis服務器狀態

四、查看sentinel的狀態

6、redis主從自動failover測試

一、中止master服務器

二、查看剩餘服務器的狀態


從上圖中能夠看出來,master的服務器端口從6379變成了6380,也就是說redis自動的實現了主從切換,咱們能夠在查看下sentinel的狀態,以下:

咱們發現sentinel監控到127.0.0.1:6379已經沒法ping通了,切換master服務器爲127.0.0.1:6381

 7、下面來研究下slave服務器和master服務器間是如何創建起主從同步機制的。

一、Slave服務啓動,主動鏈接Master,併發送SYNC命令,請求初始化同步

二、Master收到SYNC後,執行BGSAVE命令生成RDB文件,並緩存該時間段內的寫命令

三、Master完成RDB文件後,將其發送給全部Slave服務器

四、Slave服務器接收到RDB文件後,刪除內存中舊的緩存數據,並裝載RDB文件

五、Master在發送完RDB後,即刻向全部Slave服務器發送緩存中的寫命令

六、至此初始化完成,後續進行增量同步

 

8、Redis Slaveof 命令

Redis Slaveof 命令能夠將當前服務器轉變爲指定服務器的從屬服務器(slave server)。

若是當前服務器已是某個主服務器(master server)的從屬服務器,那麼執行 slaveof host port 將使當前服務器中止對舊主服務器的同步,丟棄舊數據集,轉而開始對新主服務器進行同步。

另外,對一個從屬服務器執行命令 slaveof no one 將使得這個從屬服務器關閉複製功能,並從從屬服務器轉變回主服務器,原來同步所得的數據集不會被丟棄。

利用『 slaveof no one 不會丟棄同步所得數據集 』這個特性,能夠在主服務器失敗的時候,將從屬服務器用做新的主服務器,從而實現無間斷運行

相關文章
相關標籤/搜索