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 <master-name> <ip> <redis-port> <quorum>,告诉Sentinel监听指定主节点,并且只有在至少<quorum>哨兵达成一致的情况下才会判断它 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

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

2、测试

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

3、多哨兵模式

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

4、原理

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

四、SpringBoot整合哨兵模式Redis

1、添加依赖

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

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

<dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
</dependency>

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

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");
    }
}

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雅俗共赏zyyyyyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值