Redis集群+sentinel
Redis集群+sentinel
目錄結構
Redis版本Redis-x64-3.2.100,分別新建marter,slave1、slave2、slave3、sentinel 5個文件夾.將Redis解壓,以上的每個文件夾拷貝一份。
Master配置
將
redis.windows.conf
修改為redis6379.conf
(改這個文件名只是為了好區分它用那個端口,不改也可以)
修改配置
只需要修改Bind的IP。
Port端口不需要修改,就讓master用默認的6379端口
Bind 127.0.0.1
#修改為(192.168.2.121是本機IP)
Bind 192.168.2.121
啟動Master
redis-server.exe redis6379.conf
Slave1配置
將
redis.windows.conf
修改為redis6379.conf
(改這個文件名只是為了好區分它用那個端口,不改也可以)
修改配置
- 修改bind
Bind 127.0.0.1
#修改為(192.168.2.121是本機IP)
bind 192.168.2.121
- 修改port
Prot 6379
#修改為 (6379端口 已經被master用了)
port 6380
- 修改slaveof
slaveof原來是註釋掉的#slaveof,要將它去掉。
slaveof前面不能用空格否則啟動slave時會報錯
表明slave1是master的slave
slaveof 192.168.2.121 6379
啟動salve1
啟動salve1之後,我們切換到剛才的master窗口,可以看到salve1已經連接上master了。
按照配置Salve1的方式,分別配置置slave2、slave3(配置文件裏面需要修改:Bind、Port、Slaveof)
Sentinel簡介
-
概述
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis做Master-slave的高可用方案時,假如master宕機了,Redis本身(包括它的很多客戶端)都沒有實現自動進行主備切換,而Redis-sentinel本身也是一個獨立運行的進程,它能監控多個master-slave集群,發現master宕機後能進行自懂切換。
- 不時地監控redis是否按照預期良好地運行;
- 如果發現某個redis節點運行出現狀況,能夠通知另外一個進程(例如它的客戶端);
- 能夠進行自動切換。當一個master節點不可用時,能夠選舉出master的多個slave(如果有超過一個slave的話)中的一個來作為新的master,其它的slave節點會將它所追隨的master的地址改為被提升為master的slave的新地址。
- Sentinel支持集群
很顯然,只使用單個sentinel進程來監控redis集群是不可靠的,當sentinel進程宕掉後(sentinel本身也有單點問題,single-point-of-failure)整個集群系統將無法按照預期的方式運行。所以有必要將sentinel集群,這樣有幾個好處:
- 即使有一些sentinel進程宕掉了,依然可以進行redis集群的主備切換;
- 如果只有一個sentinel進程,如果這個進程運行出錯,或者是網絡堵塞,那麽將無法實現redis集群的主備切換(單點問題);
- 如果有多個sentinel,redis的客戶端可以隨意地連接任意一個sentinel來獲得關於redis集群中的信息。
配置Sentinel
新建一個sentinel26379.conf
配置文件
文件內容
bind 192.168.2.121
port 26379
sentinel monitor mymaster 192.168.2.121 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
啟動sentinel
redis-server.exe sentinel26379.conf --sentinel
註意一定要加後面的--sentinel參數,否則會報以下錯誤
異常:
*** FATAL CONFIG FILE ERROR ***
[16604] 06 Jan 11:27:24.150 # Reading the configuration file, at line 4
[16604] 06 Jan 11:27:24.150 # >>> ‘sentinel myid 0fad29ab9451bd82d10eb015092cf893a886dbd4‘
[16604] 06 Jan 11:27:24.151 # sentinel directive while not in sentinel mode
Sentinel也可以像redis配置集聚,當其中一個掛掉之後,其它sentinel仍然可以繼續工作。只需要多拷貝一份,修改一下端口即可。
測試master和salve數據同步
- 在master中設置值,看slave是否能夠同步
啟動一個client連接master,然後,設置值。
- 查看一下基本信息
I:\Redis_Group\master>redis-cli.exe -h 192.168.2.121 -p 6379 192.168.2.121:6379> info Replication
# Replication
role:master
connected_slaves:3
slave0:ip=192.168.2.121,port=6380,state=online,offset=189652,lag=1
slave1:ip=192.168.2.121,port=6382,state=online,offset=189793,lag=0
slave2:ip=192.168.2.121,port=6381,state=online,offset=189793,lag=1
master_repl_offset:189793
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:189792
- 設置值|獲取值
192.168.2.121:6379> set name ‘Mr.Yang‘
OK
192.168.2.121:6379> get name
"Mr.Yang"
- 另起一個client連接slave看slave是否能夠獲取到master設置的值
I:\Redis_Group\slave1>redis-cli.exe -h 192.168.2.121 -p 6380
192.168.2.121:6380> get name
"Mr.Yang"
192.168.2.121:6380>
同理,我們開起client連接slave2、slave3同樣也能獲取到master設置的值
- 測試在Slave1設置值
提示:
(error) READONLY You can‘t write against a read only slave.
Slave為只讀不能夠設置值
- Master修改值,看slave是否能同步
查看Salve1中它的值
其他Salve中的值也一樣
- Master刪除值,看slave是否能同步
Slave1、Slave2、Slave3中已經查詢不到該值
測試Sentinel
當master掛掉之後,看sentinel是否能夠將其中一臺slave由slave提升成master從而保證系統的穩定性
我們直接將啟動master的窗口關閉,再看setinel將slave1、slave2、slave3當中那一個slave設置成master了。
Sentinel將 slave1從slave變成master了
重新開啟原來已經關閉掉的master(6379端口)
可以看到它已經由master變成slave了
同時我們在原來的slave1(現在它已經變成master了)的連接信息中可以看到6379這個slave(原來的master)已經連接到它了。
Redis集群+sentinel