Redis 哨兵架构详解

本贴最后更新于 1512 天前,其中的信息可能已经时移世易

一、Redis哨兵高可用架构

image.png

  1. sentinel哨兵是特殊的Redis服务,不提供读写服务,主要用来监控Redis实例节点
  2. 哨兵架构下client端第一次从哨兵找出Redis的主节点,后续就直接访问Redis的主节点,不会每次都通过sentinel代理访问Redis的主节点。
  3. 当Redis的主节点发生变化,哨兵会第一时间感知到,并且将新的Redis主节点通知给client端(这里面Redis的client端一般实现了订阅功能,订阅sentinel发布的节点变动信息)

二、Redis哨兵架构搭建

  1. 复制一份sentinel.conf配置文件

[root@localhost redis]# cp sentinel.conf sentinel_16379.conf

  1. 修改如下的信息

port 26379

daemonize yes

pidfile /usr/local/redis/redis-sentinel.pid

logfile "26379"

dir /usr/local/redis/data

sentinel monitor mymaster 127.0.0.1 6379 2

  1. 启动sentinel哨兵实例

[root@localhost redis]# /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel_26379.conf

  1. 查看sentinel的info信息

[root@localhost redis]# /usr/local/redis/bin/redis-cli -p 26379

127.0.0.1:26379> info

master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

可以看到sentinel的info里面已经列出了Redis的主从,主节点名称(mymaste),两个从节点,3个哨兵节点

  1. 可以再配置两个sentinel,端口26380和26381,修改上面配置文件的对应数字信息

三、演示哨兵模式的作用

  1. 引入哨兵的spring Boot相关依赖

org.springframework.boot

spring-boot-starter-data-redis

org.apache.commons

commons-pool2

  1. spring boot的核心配置

server:

port: 8080

spring:

redis:

database: 0

timeout: 3000

lettuce:

pool:

max-idle: 50

min-idle: 10

max-active: 100

max-wait: 1000
sentinel: #哨兵模式

master: mymaster #主服务器所在集群名称
哨兵的集群机器

nodes: 192.168.226.150:26379,192.168.226.150:26380,192.168.226.150:26381
3. 测试哨兵的集群

image.png

通过连接哨兵,已经把信息写入到Redis集群中

image.png

  1. 模拟哨兵的主节点挂了之后,是否能够重新选举一个节点变成主节点,这里的方法直接杀掉主节点的方式

[root@localhost redis]# ps -ef|grep redis

杀掉Redis的主节点

root 53201 1 0 17:09 ? 00:00:40 /usr/local/redis/bin/redis-server 0.0.0.0:6379

[root@localhost redis]# kill -9 53201

  1. 再来看请求

抛出异常

image.png

过一段时间之后,会切换到其它从节点,把其中一个从节点变成主节点

image.png

再进入看主节点信息:变成了6380

image.png

连接6380端口

[root@pertest redis]# /usr/local/redis/bin/redis-cli -p 6380

127.0.0.1:6380> info

image.png

可以看到6380变成了master

回帖
请输入回帖内容 ...