(五)Redis哨兵模式(Sentinel)的原理与搭建

sentinel的中文含义是哨兵、守卫。也就是说既然主从模式中,当master节点挂了以后,slave节点不能主动选举一个master节点出来,那么我就安排一个或多个sentinel来做这件事,当sentinel发现master节点挂了以后,sentinel就会从slave中重新选举一个master。

对哨兵模式的理解

1.sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义。

2.当master节点挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master。

3.当master节点重新启动后,它将不再是master,而是作为slave接收新的master节点的同步数据

4.sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群。

5.当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心。

6.一个sentinel或sentinel集群可以管理多个主从Redis。

7.sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了。

8.sentinel监控的Redis集群都会定义一个master名字,这个名字代表Redis集群的master Redis。

当使用sentinel模式的时候,客户端就不要直接连接Redis,而是连接sentinel的ip和port,由sentinel来提供具体的可提供服务的Redis实现,这样当master节点挂掉以后,sentinel就会感知并将新的master节点提供给使用者。

Sentinel本身也支持集群,只使用单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后,sentinel本身也有单点问题。所以有必要将sentinel集群,这样有几个好处:

1.如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题)。

2.如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。

3.sentinel集群自身也需要多数机制,也就是2个sentinel进程时,挂掉一个另一个就不可用了。

搭建

sentinel是配合主从模式使用的,紧接上一篇的Redis主从环境

  1. 启动sentinel需要使用 redis安装目录的 /src/redis-sentinel
  2. 配置sentinel配置文件
  • sentinel默认端口26379,我们启动多个sentinel,使用不同的端口
  • 创建端口对应的目录 26379 26380 26381
  • 配置文件sentinel.conf
port 26379
daemonize yes
logfile "/data/redis/logs/sentinel-26379.log"
dir "./"
sentinel myid 52580ec6511af778547c7a48d7c46d9dae808572
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.3.67 7001 2
sentinel failover-timeout mymaster 15000
bind 192.168.3.67
  • 分别为各个端口设置配置文件
  1. 启动。分别使用各自的配置文件启动三个sentinel服务
redis-sentinel /26379/sentinel.conf
  1. 启动成功后,sentinel的配置文件被重写了
port 26379
daemonize yes
logfile "/data/redis/logs/sentinel-26379.log"
dir "/usr/local/test/redis-cluster"
sentinel myid 52580ec6511af778547c7a48d7c46d9dae808572
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.3.67 7001 2
sentinel failover-timeout mymaster 15000
bind 192.168.3.67
# Generated by CONFIG REWRITE
protected-mode no
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 192.168.3.67 7002
sentinel known-replica mymaster 192.168.3.67 7000
sentinel known-sentinel mymaster 192.168.3.67 26380 d3e5e59c8665aef66c6c05e7063159ce3c566bc1
sentinel known-sentinel mymaster 192.168.3.67 26381 d0891d6429be0b8e5d75d61a9a7f1739146166f8
sentinel current-epoch 0

redis各节点以及sentinel的各节点都可以看出

  1. 主动关闭master(7001)几点,这时候查看redis info信息,
# Replication
role:slave
master_host:192.168.3.67
master_port:7002
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:2810412
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:9751164fabc350f3e36c6c5b3415352e9005a096
master_replid2:ed564db30c302becd3995539e7ce9b30ad5d5af6
master_repl_offset:2810412
second_repl_offset:2791666
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1761837
repl_backlog_histlen:1048576

这时候我们可以看到sentinel帮我们把master节点变为了7002。
重新启动7001节点,原来的master节点会变为slave节点

sentinel.conf配置的说明

sentinel monitor <master-name> <ip> <redis-port> <quorum>
告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效

sentinel auth-pass <master-name> <password>
设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。

sentinel down-after-milliseconds <master-name> <milliseconds> 
这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒

sentinel parallel-syncs <master-name> <numslaves> 
这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。

sentinel failover-timeout <master-name> <milliseconds>
failover-timeout 可以用在以下这些方面:     
1. 同一个sentinel对同一个master两次failover之间的间隔时间。   
2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。    
3.当想要取消一个正在进行的failover所需要的时间。    
4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。

参考# Redis高可用之哨兵模式Sentinel配置与启动(五)

springboot 2.x整合sentinel模式

spring.redis.database=15
# lettuce 客户端配置(从 Spring Boot 2.x 开始,推荐使用 lettuce 客户端)
# 建立连接最大等待时间,默认1ms,超出该时间会抛异常。设为-1表示无限等待,直到分配成功。
spring.redis.lettuce.pool.max-wait=1ms
# 最大连连接数,默认为8,负值表示没有限制
spring.redis.lettuce.pool.max-active=8
# 最大空闲连接数,默认8。负值表示没有限制
spring.redis.lettuce.pool.max-idle=8
# 最小空闲连接数,默认0。
spring.redis.lettuce.pool.min-idle=0
# 设置关闭连接的超时时间
spring.redis.lettuce.shutdown-timeout=100ms

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.3.67:26379,192.168.3.67:26380,192.168.3.67:26381

直接测试使用就可以了
redis 集群模式不支持database的选择,redis主从模式+哨兵模式是支持的

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容