• 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");
        }
    
    }
  • 相关阅读:
    贝叶斯公式由浅入深大讲解—AI基础算法入门
    再谈前端HTML模板技术
    再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
    mac版chrome升级到Version 65.0.3325.18后无法打开百度bing搜狗
    图说js中的this——深入理解javascript中this指针
    web app响应式字体设置!rem之我见
    【2020-04-18】 加班
    【2020-04-06】汇郡海下的沉思
    【2020-03-28】Dubbo源码杂谈
    【2020-03-21】Dubbo本地环境搭建-实现服务注册和消费
  • 原文地址:https://www.cnblogs.com/nyatom/p/9118046.html
Copyright © 2020-2023  润新知