三台服务器使用docker搭redis哨兵,概念整合springboot

一、前言

redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群。
redis有两种高可用的方案:

第一个就是我们本次的要搭建的,就是高可用的哨兵,主redis挂掉,哨兵会进行投票进行故障转移
第二个就是分片集群,哨兵的一个缺点就是只能存在一个master节点,写的效率太低。分片集群就是解决哨兵的问题,可以水平扩展,提高redis的性能!

哨兵最低配是三哨兵,以奇数递增。
分片集群最低配是三主三从。

小编之前写过一篇在一台机器上搭建的文章,大家有兴趣可以先去体验一下,实际生产上不会让你一台机器上;也没有任何意义,服务器挂了,再多的集群也全部挂掉了!!

docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

二、准备

首先我们要准备:
三台服务器(没有的条件的搭三个虚拟机),巧了小编就是虚拟机哈!

三台机器的ip和名称在表格里整理一下!

ip

redis节点名称

sentinel节点名称

192.168.239.131

redis-master

redis-sentinel-1

192.168.239.130

redis-slave-1

redis-sentinel-2

192.168.239.128

redis-slave-2

redis-sentinel-3

三、Sentinel概念

Redis Sentinel 在不使用Redis Cluster时为 Redis 提供高可用性

Sentinel功能的完整列表:

官方哨兵搭建条件:

详细介绍和使用:请见官网 --->官网详细文档:https://redis.io/docs/management/sentinel/

四、一主二从搭建

话不多说,咱们直接开始搭建哈!

1. 创建挂载目录

三台机器上新建目录:
首先我们开启三个xshell窗口,然后同时操作三个窗口创建

在这里插入图片描述


然后再左下角选择发送到全部窗口!

cd /
mkdir mydata
cd /mydata
mkdir redis
cd redis
mkdir data
mkdir conf
cd conf

2. 在`192.168.239.131`机器上编辑文件

vim redis.conf

输入以下内容:

# 任何都可以连接redis
bind 0.0.0.0
# 配置master密码
requirepass 123456
# 宕机后成为从要连接master的密码
masterauth 123456
# 开启持久化
appendonly yes

在这里插入图片描述

3. 在`192.168.239.130`机器上编辑文件

vim redis.conf

输入以下内容:

# 配置master的ip和端口号
replicaof 192.168.239.131 6379
# 任何都可以连接redis
bind 0.0.0.0
# 成为master后的密码
requirepass 123456
# 连接master密码
masterauth 123456
# 开启持久化
appendonly yes

在这里插入图片描述

4. 在`192.168.239.128`机器上编辑文件

vim redis.conf

输入以下内容:

# 配置master的ip和端口号
replicaof 192.168.239.131 6379
# 任何都可以连接redis
bind 0.0.0.0
# 成为master后的密码
requirepass 123456
# 连接master密码
masterauth 123456
# 开启持久化
appendonly yes

5. `192.168.239.131`启动redis

docker run -p 6379:6379 --name redis-master 
-v /mydata/redis/data:/usr/local/etc/redis/data 
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf 
-d redis redis-server /usr/local/etc/redis/redis.conf

查看启动日志:

docker logs -f redis-master

在这里插入图片描述

6. `192.168.239.130`启动redis

docker run -p 6379:6379 --name redis-slave-1 
-v /mydata/redis/data:/usr/local/etc/redis/data 
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf 
-d redis redis-server /usr/local/etc/redis/redis.conf

可以看到已经连接到master节点了!

在这里插入图片描述

7. `192.168.239.128`启动redis


docker run -p 6379:6379 --name redis-slave-2 
-v /mydata/redis/data:/usr/local/etc/redis/data 
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf 
-d redis redis-server /usr/local/etc/redis/redis.conf


在这里插入图片描述

8. 进入`192.168.239.130`容器查看

我们查看master日志,可以看到两个从节点已经加入进来了!

在这里插入图片描述

我们进入容器进行在次查看:

docker exec -it redis-master /bin/bash

连接redis:

redis-cli

登录redis

auth 123456

在这里插入图片描述

查看从节点:

info

也是可以看到有两个从节点!

在这里插入图片描述

五、搭建三哨兵sentinel

1. 创建挂载目录

还是三个虚拟机一起创建

mkdir sentinel
cd sentinel
vim sentinel.conf

输入下面内容:

port 26379
sentinel monitor redis-master 192.168.239.131 6379 2
sentinel auth-pass redis-master 123456
sentinel down-after-milliseconds redis-master 6000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 6000

第二行:Redis 监控一个名为redis-master的redis集群,我们可以随意写;后面就是ip,我们宿主机的ip即可,端口为主redis的端口;2为哨兵投票的票数,当主redis宕机,三个哨兵必须两个哨兵都投票的redis才会变为主!!
第三行:配置master的密码
第四行:Sentinel判断实例进入主观下线所需的时间,毫秒单位。
第五行:限制在一次故障转移之后,每次向新的主节点同时发起复制操作节点个数,越大效率越慢。
第六行:在指定的时间内未能完成failover故障转移,则任务故障转移失败。

在这里插入图片描述

2. 运行`192.168.239.131`哨兵

docker run -p 26379:26379 --name redis-sentinel-1 
-v /mydata/redis/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf 
-d redis redis-sentinel /usr/local/etc/redis/sentinel.conf

3. 运行`192.168.239.130`哨兵

docker run -p 26379:26379 --name redis-sentinel-2 
-v /mydata/redis/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf 
-d redis redis-sentinel /usr/local/etc/redis/sentinel.conf

3. 运行`192.168.239.128`哨兵

docker run -p 26379:26379 --name redis-sentinel-3 
-v /mydata/redis/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf 
-d redis redis-sentinel /usr/local/etc/redis/sentinel.conf

4. 待解决问题

这里创建三个哨兵,查看却是有四个,不知道什么问题,换了虚拟机还是不行!有大佬懂的可以分享一下哈!!

在这里插入图片描述

六、测试主从和故障转移

1. 测试主从复制

master节点创建一个键值对:

set a b

在这里插入图片描述

从查看key是否存在:

get a

在这里插入图片描述


主从没有问题哈!

2. 测试故障转移

我们把master停掉,查看一个哨兵的日志:

docker stop redis-master
docker logs -f redis-sentinel-1 

我们看到192.168.239.130成为master!

在这里插入图片描述


重新启动原来的master:


docker restart redis-master



在这里插入图片描述

故障转移成功!!

七、整合springboot

1. 导入依赖

小编的springboot版本为:2.7.4


    org.springframework.boot
    spring-boot-starter-data-redis


    org.springframework.boot
    spring-boot-starter-web

2. yml配置

password密码和sentinel同级,不然找不到密码,验证失败

server:
  port: 8087

spring:
  redis:
    # 密码和sentinel同级,不然找不到密码,验证失败
    password: 123456
    sentinel:
      # sentinel.conf里的集群名称
      master: my-master
      # 我们只需要连哨兵即可,哨兵内部会帮我们找到redis
      nodes:
        - 192.168.239.131:26379
        - 192.168.239.130:26379
        - 192.168.239.128:26379

3. json序列化配置

/**
 * @author wangzhenjun
 * @date 2022/11/24 10:37
 */
@Configuration
public class RedisConfig {

    @Bean
    @SuppressWarnings(value = { "unchecked", "rawtypes" })
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory)
    {
        RedisTemplate template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        // 使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(serializer);

        // Hash的key也采用StringRedisSerializer的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);

        template.afterPropertiesSet();
        return template;
    }
}

4. 新建controller测试

/**
 * @author wangzhenjun
 * @date 2022/11/24 10:37
 */
@RestController
public class TestController {

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("/redis")
    public void saveRedis(){
        redisTemplate.opsForValue().set("test","看到我就成功了");
    }
}

5. 测试

http://localhost:8087/test/redis

在这里插入图片描述

6. 查看redis

在这里插入图片描述

八、总结

经过一天的搭建,终于完成了,虽然不是完美的,但是大体功能是没有问题的!但是不影响故障转移和主从复制!

唯一的遗憾:三个哨兵,查看就是四个!从第三个哨兵加入后变为4个!

如果对你有帮助,还请不要吝啬您的发财小手,你的一键三连是我写作的动力,谢谢大家哈!!



可以看下小编的微信公众号,和网站文章首发看,欢迎关注,一起交流哈!!



展开阅读全文

页面更新:2024-03-31

标签:哨兵   主从   副本   节点   集群   虚拟机   实例   故障   概念   密码   服务器   测试

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top