redis哨兵集群+spring boot 2.×

Ubuntu集群构建篇

redis-cli:不跟参数,默认访问localhost:6379端口,无密码登陆

  redis-cli -h ${host} -p ${port} -a ${password}

redis-server ${redis.conf}:这里注意配置文件

  配置文件redis.conf,相关目录需提前创建,否则报错 No such file or directory

配置参数,按需配置。

设备有限,案例基于Ubuntu单机,多端口构建redis实例。

解压:

tar zxvf redis-3.0.2.tar.gz

安装:

make

redis.conf配置文件

初始主节点配置文件:

# 后台启动  即启动守护进程
daemonize yes

# 守护进程运行,Redis默认将pid写入某路径下
pidfile /home/redis/redis/redisRun/redis_6381.pid 

# 指定端口
port 6381

# 客户端闲置多久后关闭连接,为0则关闭该功能
timeout 0
tcp-keepalive 0

# 指定日志级别,支持dubug、verbose、notice、warning,默认verbose
loglevel notice

# 日志文件路径
logfile /home/redis/redislog/redis.log

# 数据库数量
databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
# 满足以下条件将会同步数据:
# 900秒(15分钟)内有1个更改
# 300秒(5分钟)内有10个更改
# 60秒内有10000个更改
# 注:可以把所有save行注释掉,即取消同步操作
save 900 1
save 300 10
save 60 10000


stop-writes-on-bgsave-error yes  

# 指定存储至本地数据库时是否压缩数据,默认为yes
# Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes

rdbchecksum yes

# 指定本地数据库文件名
dbfilename dump.rdb

# 工作目录,即指定本地数据库存放目录,文件名由dbfilename指定
dir /home/redis/redisdb


# 如果做故障切换,不论主从节点都要填写密码且要保持一致    
masterauth 123456
slave-serve-stale-data yes    
slave-read-only yes    
repl-disable-tcp-nodelay no    
slave-priority 98  

# 当前redis密码   
requirepass 123456

# 指定是否在每次更新操作后进行日志记录,默认为no
appendonly yes

# 指定更新日志条件,共有3个可选值:
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折衷,默认值)
# appendfsync always    
appendfsync everysec    
# appendfsync no

no-appendfsync-on-rewrite no    
auto-aof-rewrite-percentage 100    
auto-aof-rewrite-min-size 64mb    
lua-time-limit 5000    
slowlog-log-slower-than 10000    
slowlog-max-len 128    
notify-keyspace-events ""    
hash-max-ziplist-entries 512    
hash-max-ziplist-value 64    
list-max-ziplist-entries 512    
list-max-ziplist-value 64    
set-max-intset-entries 512    
zset-max-ziplist-entries 128    
zset-max-ziplist-value 64  

# 指定是否激活重置哈希,默认为开启  
activerehashing yes    
client-output-buffer-limit normal 0 0 0    
client-output-buffer-limit slave 256mb 64mb 60    
client-output-buffer-limit pubsub 32mb 8mb 60    
hz 10    
aof-rewrite-incremental-fsync yes

初始从节点配置文件:

daemonize yes    
#pid----
pidfile /home/redis/redis/redisRun/redis_6391.pid
port 6391
timeout 0    
tcp-keepalive 0    
loglevel notice    
#日志 ----
logfile /home/redis/redislog/redis1.log   
databases 16    
save 900 1    
save 300 10    
save 60 10000    
stop-writes-on-bgsave-error yes    
rdbcompression yes    
rdbchecksum yes 
#本地数据库文件名   ------
dbfilename dump1.rdb   
dir /home/redis/redisdb
#主节点密码    
masterauth 123456
slave-serve-stale-data yes    
slave-read-only yes    
repl-disable-tcp-nodelay no    
slave-priority 98    
requirepass 123456 
appendonly yes    
# appendfsync always    
appendfsync everysec    
# appendfsync no    
no-appendfsync-on-rewrite no    
auto-aof-rewrite-percentage 100    
auto-aof-rewrite-min-size 64mb    
lua-time-limit 5000    
slowlog-log-slower-than 10000    
slowlog-max-len 128    
notify-keyspace-events ""    
hash-max-ziplist-entries 512    
hash-max-ziplist-value 64    
list-max-ziplist-entries 512    
list-max-ziplist-value 64    
set-max-intset-entries 512    
zset-max-ziplist-entries 128    
zset-max-ziplist-value 64    
activerehashing yes    
client-output-buffer-limit normal 0 0 0    
client-output-buffer-limit slave 256mb 64mb 60    
client-output-buffer-limit pubsub 32mb 8mb 60    
hz 10    
aof-rewrite-incremental-fsync yes    
# Generated by CONFIG REWRITE    
#配置主节点信息    
slaveof *.*.*.* 6381

sentinel.conf哨兵配置文件

port 26381
#1表示在sentinel集群中只要有两个节点检测到redis主节点出故障就进行切换,单sentinel节点无效(自己测试发现的)  
#如果3s内mymaster无响应,则认为mymaster宕机了  
#如果10秒后,mysater仍没活过来,则启动failover  
sentinel monitor mymaster *.*.*.* 6381 1  
sentinel down-after-milliseconds mymaster 3000  
sentinel failover-timeout mymaster 10000  
daemonize yes  
#指定工作目录  
dir /home/redis/sentinel-work
protected-mode no  
logfile /home/redis/sentinellog/sentinel.log
#redis主节点密码  
sentinel auth-pass mymaster 123456  
# Generated by CONFIG REWRITE

启动集群

主从节点redis后台启动
redis-server redis.conf
哨兵启动
redis-sentinel sentinel.conf

登陆验证

登陆
redis-cli -h *.*.*.* -p 6381 -a 123456
验证主从关联
info Replication

查看哨兵日志sentinel.log

主节点宕机,slaves重新选举master

 

原主节点重启,成为新的从节点

基于SpringBoot整合哨兵集群

 引入pom依赖

        <!-- redis启动依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- 对象池化组件 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.0</version>
        </dependency> 

application.yml配置

spring:
  redis:
    database: 2
    password: 123456
    lettuce:
      pool:
        max-active: 8
        min-idle: 0
        max-wait: -1
    sentinel:
      master: mymaster
      nodes: *.*.*.*:26381,*.*.*.*:26391,*.*.*.*:26392,*.*.*.*:26393
    host: *.*.*.*
    port: 6381

测试即可:

@RestController
public class TestRedisController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RequestMapping(value = "/set")
    public void set(){
        stringRedisTemplate.opsForValue().set("tom","jerry");
    }

    @RequestMapping(value = "/get")
    public String get(){
        return stringRedisTemplate.opsForValue().get("tom");
    }

}
原文地址:https://www.cnblogs.com/nyatom/p/9118046.html