1. 程式人生 > >Redis集群+sentinel

Redis集群+sentinel

基本 overflow -o 穩定 red 查詢 tom prot sans

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(改這個文件名只是為了好區分它用那個端口,不改也可以)

修改配置

  1. 修改bind
Bind 127.0.0.1
#修改為(192.168.2.121是本機IP
bind 192.168.2.121
  1. 修改port
Prot 6379
#修改為 (6379端口 已經被master用了)
port 6380
  1. 修改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簡介

  1. 概述

    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的新地址。
  1. 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,然後,設置值。

  1. 查看一下基本信息

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
  1. 設置值|獲取值
192.168.2.121:6379> set name ‘Mr.Yang‘
OK
192.168.2.121:6379> get name
"Mr.Yang"

技術分享圖片

  1. 另起一個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設置的值
技術分享圖片
技術分享圖片

  1. 測試在Slave1設置值
    技術分享圖片
提示:
(error) READONLY You can‘t write against a read only slave.

Slave為只讀不能夠設置值

  1. Master修改值,看slave是否能同步

技術分享圖片
查看Salve1中它的值
技術分享圖片

其他Salve中的值也一樣

  1. 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