• Linux下redis单机安装、主从搭建及哨兵模式搭建及springboot整合测试


    一、安装redis

    1、安装

    下载linux的安装包,下载地址https://redis.io/download/,6.2.4版本百度云下载地址https://pan.baidu.com/s/1K-L2vuNRrJXqPcwZkXLQCw?pwd=a9kb,将安装包上传至服务器,解压缩tar -zxvf redis-6.2.4.tar.gz得到源码包,进入解压文件目录cd redis-6.2.4/ ,对源码包进行编译make,编译完成后,可以看到src文件夹和redis.conf配置文件,如下所示
    在这里插入图片描述
    编译完成后,将redis安装到指定目录,输入命令make PREFIX=/home/ysgs/tools/redis install,可以看到,在redis目录下创建了bin文件夹,将配置文件也拷贝到安装目录下cp redis.conf /home/ysgs/tools/redis/bin
    在这里插入图片描述
    上面图中,分别对应为redis-benchmark redis -->性能测试工具、redis-check-aof AOF -->文件修复工具、redis-check-rdb RDB -->文件修复工具、redis-cli -->redis命令行客户端、redis-sentinal -->redis集群管理工具、redis-server -->redis服务进程。

    2、配置

    然后我们在redis.conf配置文件的基础上进行配置,如下所示
    1、默认只允许本机链接,我们将其注释掉
    在这里插入图片描述
    2、redis3.0之后添加了保护模式,若不想使用密码,改为no
    在这里插入图片描述
    3、设置密码,找到requirepass配置,默认是注释掉的,配置上密码
    在这里插入图片描述
    在这里插入图片描述

    4、将默认的daemonize改为yes,让redis以守护进程的方式启动
    在这里插入图片描述

    3、启动

    进入bin目录,./redis-server ./redis.conf使用对应配置文件启动,上文中我们已经将redis设置为守护进程,因此这是后端启动方式,无论我们是否关闭ssh窗口,redis都会保持运行。然后我们启动命令行./redis-cli,由于我们设置了密码,因此要先用密码登录,如下图,可以看到redis运行链接成功
    在这里插入图片描述
    在这里插入图片描述
    同时,我们用可视化工具也链接成功

    二、主从模式搭建

    1、配置

    在上文的基础上,我们将redis.conf配置文件重命名为6379.conf作为主配置文件,同时,复制两份配置文件分别命名为6380.conf和6381.conf,并将其中的端口改为6380和6381
    在这里插入图片描述
    同时添加如下配置replicaof 你的主机ip 6379,因为我们的主节点设置了密码,所以从节点添加masterauth 密码,或者我们把主节点的密码去掉

    2、启动

    先启动主节点./redis-server ./6379.conf,再启动从节点./redis-server ./6380.conf;./redis-server ./6381.conf,然后用redis-cli链接主节点查看./redis-cli -h 127.0.0.1 -p 6379info replication在这里插入图片描述
    我们看到,当前的角色是master,有两个从节点连接,分别是6380和6381,同理我们查看从节点的信息
    在这里插入图片描述
    上图,节点角色是从节点,主节点是6379,从节点只读,我们在主节点添加一条数据,然后从节点读取
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    至此,一主二从已经搭建完成。有了主从,就相当于主节点有了备份,一旦主节点宕机,我们可以选择一个从节点作为新的主节点使用,但是,这个操作还是要人工干预的,我们至少把其他从节点订阅的主节点改为我们选择的新的主节点,那么,有没有更好的方式呢?

    三、哨兵模式搭建

    上文提到,我们想要一个自动选择主节点的主从模式,它就是哨兵模式,我们搭建一下哨兵模式,看看它是如何运行的。

    1、配置

    在主节点下新增配置文件sentine.conf,添加如下内容

    #哨兵实例端口
    port 26379
    #守护进程,默认不作为守护进程运行
    daemonize yes
    #开启守护进程后,pid文件存储路径
    pidfile /home/ysgs/tools/redis/sentinel/sentinel-6379.pid
    # sentinel monitor    ,告诉Sentinel监听指定主节点,并且只有在至少哨兵达成一致的情况下才会判断它 O_DOWN 状态
    sentinel monitor mymaster 127.0.0.1 6379 1
    #redis的密码
    sentinel auth-pass mymaster root
    #多长时间没响应视为宕机,默认30秒
    sentinel down-after-milliseconds mymaster 30000
    # 在故障转移期间,多少个副本节点进行数据同步
    sentinel parallel-syncs mymaster 1
    #所有slaves指向新的master所需的最大时间
    sentinel failover-timeout mymaster 180000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    然后启动这个哨兵./redis-sentinel ./sentinel.conf

    2、测试

    我们手动将6379主节点停掉,然后观察6380和6381两个从节点的信息
    在这里插入图片描述
    可以看到,主节点已经停掉了
    在这里插入图片描述
    在这里插入图片描述
    选出了新的master是6381,然后6380自动挂在了6381上,我们再把6379启动,看一下它的信息
    在这里插入图片描述
    这个节点的角色成为了从节点,但是却没连接到主节点,这是因为我们的每个节点都设置了连接密码,之前的两个从节点设置了主节点密码,而原先的主节点没有设置密码,因此,如果我们的集群的网络环境是安全的,可以考虑不设置密码,否则,我们每个密码最好设置成一样的,并都配置上主节点密码,修改配置后,连接成功
    在这里插入图片描述

    3、多哨兵模式

    上文我们只设置了一个哨兵,那么万一这个哨兵也宕机了怎么办呢?我们可以设置一个哨兵集群,让哨兵之间也互相监听,复制两份哨兵配置文件,修改端口和投票数量,然后重启服务
    在这里插入图片描述

    4、原理

    在这里插入图片描述
    在上图中,哨兵会监听每个redis节点,并和哨兵集群同步节点信息(监听redis的节点不一定是同一个),假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。

    四、SpringBoot整合哨兵模式Redis

    1、添加依赖

            
                org.springframework.boot
                spring-boot-starter-data-redis
            
    
    • 1
    • 2
    • 3
    • 4

    如果出现Unsatisfied dependency expressed through field ‘redisTemplate‘这个报错,那么需要再添加如下依赖

    
            org.apache.commons
            commons-pool2
    
    
    • 1
    • 2
    • 3
    • 4

    2、配置文件

    #redis哨兵模式
    #redis的密码,没设置可去掉
    spring.redis.password=root
    #哨兵主节点名称
    spring.redis.sentinel.master=mymaster
    #哨兵节点
    spring.redis.sentinel.nodes=192.168.136.128:26379,192.168.136.128:26380,192.168.136.128:26381
    #哨兵密码
    spring.redis.sentinel.password=root
    #jedis连接池
    spring.redis.jedis.pool.enabled=true
    spring.redis.jedis.pool.max-active=8
    spring.redis.jedis.pool.max-wait=-1
    spring.redis.jedis.pool.max-idle=8
    spring.redis.jedis.pool.min-idle=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3、测试

    @Controller
    public class Test {
        @Autowired
        StringRedisTemplate stringRedisTemplate;
        @RequestMapping("/test")
        @ResponseBody
        public String redis(String text) {
            stringRedisTemplate.opsForValue().set("test",text);
            return stringRedisTemplate.opsForValue().get("test");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    从零学习 InfiniBand-network架构(八) —— IB协议中的原子操作
    基于Java的师生健康体检管理系统设计与实现(源码+lw+部署文档+讲解等)
    【Web前端学习入门】HTML知识详解
    electron桌面应用webSoket实时弹框提示实现
    收藏吃灰,1024推荐2款Python趣味的第三方模块吧
    【React】配置别名路径@
    echo tail 与 重定向符
    睡觉前看看吧,有用——35K成功入职蚂蚁金服:Java后端面试经历
    ICLR‘23论文得分排名! 多篇论文竟同时获1分和10分?
    Laravel daily日志保留N天源码分析
  • 原文地址:https://blog.csdn.net/qq_36933421/article/details/127412341