Springboot Redis 哨兵模式的实现示例

目录
  • Redis配置
    • redis.conf配置
  • sentinel.conf配置
  • Springboot整合
  • 测试
    • 模拟redis宕机

Redis配置

redis.conf配置

由于服务器资源有限,我这里通过配置不同端口,模拟Redis集群,redis-server占用6379、6380、6381端口,redis-sentinel占用26379、26380、26381端口。

首先准备3份redis配置文件,分别取名redis6379.conf,redis6380.conf,redis6381.conf

redis6379.conf,6379端口作为master,需要修改的配置如下

protected-mode no #设置为NO,其他IP才可以访问
port 6379 #端口
daemonize yes
pidfile "/var/run/redis_6379.pid"
logfile "6379.log" #日志,若redis分布在不同服务器,不用修改
dbfilename "dump6379.rdb" #数据,若redis分布在不同服务器,不用修改
masterauth "admin123/*-" #从节点访问主节点时需要的密码
requirepass "admin123/*-" #redis密码,应用访问redis时需要

redis6380.conf,6380端口作为slave,需要设置主节点ip和port,需要修改的配置如下:

protected-mode no #设置为NO,其他IP才可以访问
port 6380 #端口
daemonize yes
pidfile "/var/run/redis_6380.pid"
logfile "6380.log" #日志,若redis分布在不同服务器,不用修改
dbfilename "dump6380.rdb" #数据,若redis分布在不同服务器,不用修改
replicaof 192.168.1.1 6379  #标记主节点ip+端口,IP设置为自己服务器IP地址即可
masterauth "admin123/*-" #从节点访问主节点时需要的密码
requirepass "admin123/*-" #redis密码,应用访问redis时需要

备注:slaveof 192.168.1.1 6379,这里需要设置成你自己的IP,可实现Redis 复制功能

redis6381.conf,6381端口作为slave,同上,需要修改的配置如下:

protected-mode no #设置为NO,其他IP才可以访问
port 6381 #端口
daemonize yes
pidfile "/var/run/redis_6381.pid"
logfile "6381.log" #日志,若redis分布在不同服务器,不用修改
dbfilename "dump6381.rdb" #数据,若redis分布在不同服务器,不用修改
replicaof 192.168.1.1 6379  #标记主节点ip+端口,IP设置为自己服务器IP地址即可
masterauth "admin123/*-" #从节点访问主节点时需要的密码
requirepass "admin123/*-" #redis密码,应用访问redis时需要

sentinel.conf配置

准备3分sentinel.conf配置文件,分别为sentinel26379.conf、sentinel26380.conf、sentinel26381.conf。

sentinel26379.conf,26379端口作为哨兵1,需要修改配置如下

port 26379 #端口
daemonize yes
pidfile "/var/run/redis-sentinel26379.pid"
logfile "/usr/local/bin/sentinelLogs/sentinel_26379.log"
#配置指示 Sentinel 去监视一个名为 mymaster 的主节点, 主节点的 IP 地址为 127.0.0.1 , 端口号为 6379 ,
#而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)
sentinel monitor mymaster 192.168.1.1 6379 2
sentinel auth-pass mymaster admin123/*-   #哨兵访问主节点密码
protected-mode no

sentinel26380.conf,26380端口作为哨兵2,需要修改配置如下

port 26380 #端口
daemonize yes
pidfile "/var/run/redis-sentinel26380.pid"
logfile "/usr/local/bin/sentinelLogs/sentinel_26380.log"
#配置指示 Sentinel 去监视一个名为 mymaster 的主节点, 主节点的 IP 地址为 127.0.0.1 , 端口号为 6379 ,
#而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)
sentinel monitor mymaster 192.168.1.1 6379 2
sentinel auth-pass mymaster admin123/*-   #哨兵访问主节点密码
protected-mode no

sentinel26381.conf,26381端口作为哨兵3,需要修改配置如下

port 26381 #端口
daemonize yes
pidfile "/var/run/redis-sentinel26381.pid"
logfile "/usr/local/bin/sentinelLogs/sentinel_26381.log"
#配置指示 Sentinel 去监视一个名为 mymaster 的主节点, 主节点的 IP 地址为 127.0.0.1 , 端口号为 6379 ,
#而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)
sentinel monitor mymaster 192.168.1.1 6379 2
sentinel auth-pass mymaster admin123/*-   #哨兵访问主节点密码
protected-mode no

启动redis-server,redis-sentinel

[root@VM-20-5-centos bin]# redis-server redis6379.conf
[root@VM-20-5-centos bin]# redis-server redis6380.conf
[root@VM-20-5-centos bin]# redis-server redis6381.conf
[root@VM-20-5-centos bin]# redis-sentinel sentinel_26379.conf
[root@VM-20-5-centos bin]# redis-sentinel sentinel_26380.conf
[root@VM-20-5-centos bin]# redis-sentinel sentinel_26381.conf

查看状态,如下图所示,即为启动成功

 [root@VM-20-5-centos mconfig]# redis-cli -p 26379
127.0.0.1:26379> sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "192.168.1.1"
    5) "port"
    6) "6379"
    7) "runid"

127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "192.168.1.1:6381"
    3) "ip"
    4) "192.168.1.1"
    5) "port"
    6) "6381"
    7) "runid"
    8) ""

2)  1) "name"
    2) "192.75.218.240:6380"
    3) "ip"
    4) "192.75.218.240"
    5) "port"

127.0.0.1:26379>

Springboot整合

导入包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

properties配置

spring.redis.host=192.168.1.1
spring.redis.port=6379
spring.redis.password=admin123/*-
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.password=admin123/*-
spring.redis.sentinel.nodes=192.168.1.1:26379,192.168.1.1:26380,192.168.1.1:26381

测试

代码示例

package com.mx.learnredis.controller;
 
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
 
import java.util.Date;
 
@SpringBootTest
class UserControllerTest {
 
    @Autowired
    @Qualifier("redisTemplate")
    private RedisTemplate redisTemplate;
 
    @Test
    public void test() throws InterruptedException {
        redisTemplate.opsForValue().set("user", "xx");
        while (true)
        {
            Thread.sleep(2000);
            System.out.println("time "+new Date()+":" +redisTemplate.opsForValue().get("user"));
        }
    }
}

模拟redis宕机

idea控制台输出:

time Sat Jan 08 20:09:12 CST 2022:xx
time Sat Jan 08 20:09:14 CST 2022:xx
time Sat Jan 08 20:09:16 CST 2022:xx
time Sat Jan 08 20:09:18 CST 2022:xx
time Sat Jan 08 20:09:20 CST 2022:xx
time Sat Jan 08 20:09:22 CST 2022:xx

关闭掉主节点,登录linux服务器

[root@VM-20-5-centos mconfig]# ps -ef|grep redis
root     27881     1  0 17:19 ?        00:00:12 redis-server *:6380
root     27997     1  0 17:20 ?        00:00:17 redis-sentinel *:26379 [sentinel]
root     28017     1  0 17:20 ?        00:00:17 redis-sentinel *:26380 [sentinel]
root     28030     1  0 17:20 ?        00:00:17 redis-sentinel *:26381 [sentinel]
root     28471     1  0 20:13 ?        00:00:00 redis-server *:6381
root     28664     1  0 17:23 ?        00:00:12 redis-server *:6379
root     28753 11813  0 20:14 pts/1    00:00:00 grep --color=auto redis
[root@VM-20-5-centos mconfig]# kill -9 28664
[root@VM-20-5-centos mconfig]#

idea控制台输出,可看到重连日志,Success

time Sat Jan 08 20:15:02 CST 2022:xx
time Sat Jan 08 20:15:04 CST 2022:xx
2022-01-08 20:15:05.010  INFO 7216 --- [xecutorLoop-1-3] i.l.core.protocol.ConnectionWatchdog     : Reconnecting, last destination was /192.168.1.1:6379
2022-01-08 20:15:07.211  WARN 7216 --- [ioEventLoop-4-4] i.l.core.protocol.ConnectionWatchdog     : Cannot reconnect to [192.168.1.1:6379]: Connection refused: no further information: /192.168.1.1:6379
2022-01-08 20:15:11.920  INFO 7216 --- [xecutorLoop-1-2] i.l.core.protocol.ConnectionWatchdog     : Reconnecting, last destination was 192.168.1.1:6379
2022-01-08 20:15:14.081  WARN 7216 --- [ioEventLoop-4-2] i.l.core.protocol.ConnectionWatchdog     : Cannot reconnect to [192.168.1.1:6379]: Connection refused: no further information: /192.168.1.1:6379
2022-01-08 20:15:18.617  INFO 7216 --- [xecutorLoop-1-4] i.l.core.protocol.ConnectionWatchdog     : Reconnecting, last destination was 192.168.1.1:6379
2022-01-08 20:15:20.767  WARN 7216 --- [ioEventLoop-4-4] i.l.core.protocol.ConnectionWatchdog     : Cannot reconnect to [192.168.1.1:6379]: Connection refused: no further information: /192.168.1.1:6379
2022-01-08 20:15:26.119  INFO 7216 --- [xecutorLoop-1-2] i.l.core.protocol.ConnectionWatchdog     : Reconnecting, last destination was 192.168.1.1:6379
2022-01-08 20:15:28.278  WARN 7216 --- [ioEventLoop-4-2] i.l.core.protocol.ConnectionWatchdog     : Cannot reconnect to [192.168.1.1:6379]: Connection refused: no further information: /192.168.1.1:6379
2022-01-08 20:15:33.720  INFO 7216 --- [xecutorLoop-1-2] i.l.core.protocol.ConnectionWatchdog     : Reconnecting, last destination was 192.168.1.1:6379
2022-01-08 20:15:35.880  WARN 7216 --- [ioEventLoop-4-2] i.l.core.protocol.ConnectionWatchdog     : Cannot reconnect to [192.168.1.1:6379]: Connection refused: no further information: /192.168.1.1:6379
2022-01-08 20:15:40.020  INFO 7216 --- [xecutorLoop-1-4] i.l.core.protocol.ConnectionWatchdog     : Reconnecting, last destination was 192.168.1.1:6379
2022-01-08 20:15:40.160  INFO 7216 --- [ioEventLoop-4-4] i.l.core.protocol.ReconnectionHandler    : Reconnected to 192.168.1.1:6381
time Sat Jan 08 20:15:06 CST 2022:xx

到此这篇关于Springboot Redis 哨兵模式的实现示例的文章就介绍到这了,更多相关Springboot Redis 哨兵模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot结合Redis哨兵模式的实现示例

    Redis哨兵模式 Redis Sentinel介绍 Redis Sentinel是Redis高可用的实现方案.Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控.通知.自动故障转移. Redis Sentinel主要功能 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常. 提醒(Notificatio

  • Springboot Redis 哨兵模式的实现示例

    目录 Redis配置 redis.conf配置 sentinel.conf配置 Springboot整合 测试 模拟redis宕机 Redis配置 redis.conf配置 由于服务器资源有限,我这里通过配置不同端口,模拟Redis集群,redis-server占用6379.6380.6381端口,redis-sentinel占用26379.26380.26381端口. 首先准备3份redis配置文件,分别取名redis6379.conf,redis6380.conf,redis6381.con

  • SpringBoot+Redis哨兵模式的实现

    最近学习到了Redis的哨兵模式,光看视频还不行,需要自己动手实现一遍才能加深映像,特此记录. 由于没有真实的服务器可以供我操作,所以在虚拟机上启动了3个redis服务,分别占用7001.7002.7003端口. Redis下载安装不多赘述,只在这里记录一下配置. 首先在tmp目录下创建3个文件夹: cd /tmp mkdir 7001 7002 7003 然后将redis的配置文件redis.conf拷贝到刚刚创建的3个文件夹下 cp redis-6.2.6/redis.conf /tmp/7

  • 浅谈Redis哨兵模式高可用解决方案

    目录 一.序言 1.目标与收获 2.端口规划 二.单机模拟 (一)服务规划 1.Redis实例 2.哨兵服务 (二)服务配置 1.Redis实例 2.哨兵服务 (三)服务管理 1.Redis实例 2.哨兵服务 三.客户端整合 (一)基础整合 1.全局配置文件 2.集成配置 (二)读写分离 一.序言 Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务. 1.目标与收获 一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使用Supe

  • 浅谈Redis哨兵模式的使用

    概述 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工 干预,费事费力,还会造成一段时间内服务不可用.这不是一种推荐的方式,更多时候,我们优先考虑 哨兵模式.Redis从2.8开始正式提供了Sentinel(哨兵) 架构来解决这个问题. 谋朝篡位的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库. 哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独 立运行.其原理是哨兵通过发送命令,

  • Docker配置redis哨兵模式的方法(多服务器上)

    前言 之前学习的redis一直是在单一服务器上运行的,而且是直接部署在服务器上.听说用docker会让配置过程更轻松 (并没有)这次就在用Docker的基础上配置Redis一主一从三哨兵.本篇为配置数据节点,即一主一从两个节点. 条件 三台服务器(因为需要至少三个哨兵保证安全性)[可以在阿里云上租几个小时] 服务器1:8.131.78.18 服务器2:8.131.69.106 服务器3:8.131.71.196 端口号7000.17000已在安全组上放行(阿里云) 环境:centos8.0 安装

  • Redis哨兵模式介绍

    哨兵简介 主机"宕机" 将宕机的 master 下线 找一个 slave 作为 master 通知所有的 slave 连接新的 master 启动新的 master 和 slave 全量复制 *N+ 部分复制*N 存在的问题: 谁来确认 master 宕机了 重新找一个新的 master ,怎么找法? 修改配置后,原来的 master 恢复了怎么办? 哨兵 哨兵(sentinal)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 master 并

  • SpringBoot+Redis实现布隆过滤器的示例代码

    目录 简述 Redis安装BloomFilter 基本指令 结合SpingBoot 方式一 方式二 简述 关于布隆过滤器的详细介绍,我在这里就不再赘述一遍了 我们首先知道:BloomFilter使用长度为m bit的字节数组,使用k个hash函数,增加一个元素: 通过k次hash将元素映射到字节数组中k个位置中,并设置对应位置的字节为1.查询元素是否存在: 将元素k次hash得到k个位置,如果对应k个位置的bit是1则认为存在,反之则认为不存在. Guava 中已经有具体的实现,而在我们实际生产

  • Redis哨兵模式实现一主二从三哨兵

    目录 一.redis环境: 二.哨兵介绍: 三.安装redis: 四.使用Redis主从复制的作用: 五.配置redis一主二从: 六.配置redis三哨兵: 一.redis环境: 环境:redis6.2.6linux虚拟机一台,contos7: 二.哨兵介绍: 1.一主二从三哨兵理论图: 一主两从三哨兵集群,当master节点宕机时,通过哨兵(sentinel)重新推选出新的master节点,保证集群的可用性. 2.哨兵的主要功能:1.集群监控:负责监控 Redis master 和 slav

  • redis哨兵模式说明与搭建详解

    哨兵模式是redis高可用的一种解决方案. 哨兵必须用三个实例取保证自己的高可用,但是哨兵+主从模式是不能保证消息不丢失的. 为什么用三个来保证呢? 假设现在有两个服务器,第一台有redis主节点M1,和哨兵S1,第二台有redis从节点S2,哨兵S2. 如果M1宕机,S1和S2中只要有1个哨兵认为master宕机就可以还行切换,此时哨兵大多数(我理解的大多数的过半)还在运行,那么S1,S2能通过选举,拿出来一个哨兵进行故障转移. 如果第一个服务器整个宕机,M1,S1都已经死掉了,此时S2发现M

随机推荐