1. 程式人生 > >第二彈、window下配置redis的一主二從三哨兵模式

第二彈、window下配置redis的一主二從三哨兵模式

1.首先把你下載的redis複製兩份出來,我的分別如下命名

在D盤下建立一個資料夾,我起名為redis
Redis-master
Redis-slave1
Redis-slave2

2.修改配置檔案

2.1修改redis-master的配置檔案redis.windows.conf

port 6379
bind 127.0.0.1

2.2修改redis-slave1 和redis-slave2的配置檔案
#redis-slave1的配置檔案
port 6380
bind 127.0.0.1
slaveof 127.0.0.1 6379

#redis-slave2的配置檔案
port 6381
bind 127.0.0.1
slaveof 127.0.0.1 6379

3.新建哨兵配置檔案,分別命名為
sentinel.conf 
sentinel26479.conf
sentinel26579.conf

哨兵配置檔案內容

sentinel.conf

port 26379
#master
sentinel monitor master 127.0.0.1 6380 1
sentinel down-after-milliseconds master 5000
sentinel config-epoch master 1
sentinel leader-epoch master 1


sentinel26479.conf

port 26479
#slave1
sentinel monitor master 127.0.0.1 6380 1
sentinel down-after-milliseconds master 5000
sentinel config-epoch master 1
sentinel leader-epoch master 1


sentinel26579.conf

port 26579
#slave1
sentinel monitor master 127.0.0.1 6380 1
sentinel down-after-milliseconds master 5000
sentinel config-epoch master 1
sentinel leader-epoch master 1

哨兵配置檔案說明

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失敗  


4.配置檔案就這些了,下面進行測試看看是否成功

4.1分別啟動每個redis服務,

redis-server.exe redis.windows.conf 

4.2然後分別啟動每個redis下的客戶端服務,分別對應如下命令
redis-cli.exe -h 127.0.0.1 -p 6379
redis-cli.exe -h 127.0.0.1 -p 6380
redis-cli.exe -h 127.0.0.1 -p 6381
測試資料是否同步,在master客戶端輸入

我在master 設定了一個key為li,值為kaixuan

可以看到兩臺從機都同步了資料,當我試圖在從機寫入資料時,是不允許的,告訴我麼只讀,所以資料只能從主機寫入,這樣做到讀寫分離


5.我們啟動3個哨兵

命令分別如下

redis-server.exe sentinel.conf --sentinel
redis-server.exe sentinel26479.conf --sentinel
redis-server.exe sentinel26579.conf --sentinel


下面測試主從切換

但我主機掛了後,從機是否能成功上位變為主機

先看下當前的redis狀態

分別在客戶端輸入 

info replication


現在down掉主機


我們發現現在其中埠為6380的從機現在變為了主機,說明我們的哨兵起作用了,OK!