Redis集群+sentinel

Redis集群+sentinel

目录结构

Redis版本Redis-x64-3.2.100,分别新建marter,slave1、slave2、slave3、sentinel 5个文件夹.将Redis解压,以上的每个文件夹拷贝一份。

1

2

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
3

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

4

启动salve1之后,我们切换到刚才的master窗口,可以看到salve1已经连接上master了。

5

按照配置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参数,否则会报以下错误

6

异常:
*** 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

7

Sentinel也可以像redis配置集聚,当其中一个挂掉之后,其它sentinel仍然可以继续工作。只需要多拷贝一份,修改一下端口即可。

测试master和salve数据同步

  • 在master中设置值,看slave是否能够同步

启动一个client连接master,然后,设置值。

  1. 查看一下基本信息

I:Redis_Groupmaster>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"

8

  1. 另起一个client连接slave看slave是否能够获取到master设置的值
I:Redis_Groupslave1>redis-cli.exe -h 192.168.2.121 -p 6380
192.168.2.121:6380> get name
"Mr.Yang"
192.168.2.121:6380>

9

同理,我们开起client连接slave2、slave3同样也能获取到master设置的值
10
11

  1. 测试在Slave1设置值
    12
提示:
(error) READONLY You can't write against a read only slave.

Slave为只读不能够设置值

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

13
查看Salve1中它的值
14

其他Salve中的值也一样

  1. Master删除值,看slave是否能同步

15

Slave1、Slave2、Slave3中已经查询不到该值

16

测试Sentinel

当master挂掉之后,看sentinel是否能够将其中一台slave由slave提升成master从而保证系统的稳定性

我们直接将启动master的窗口关闭,再看setinel将slave1、slave2、slave3当中那一个slave设置成master了。

Sentinel将 slave1从slave变成master了

17
18

重新开启原来已经关闭掉的master(6379端口)

19
20

可以看到它已经由master变成slave了

同时我们在原来的slave1(现在它已经变成master了)的连接信息中可以看到6379这个slave(原来的master)已经连接到它了。
21

原文地址:https://www.cnblogs.com/Yang2012/p/8078644.html