前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

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

作者头像
掉发的小王
发布于 2022-09-23 05:00:31
发布于 2022-09-23 05:00:31
2.3K00
代码可运行
举报
文章被收录于专栏:小王知识分享小王知识分享
运行总次数:0
代码可运行

一、前言

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

  • High availability with Redis Sentinel
  • Scaling with Redis Cluster

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

哨兵最低配是三哨兵,以奇数递增。 分片集群最低配是三主三从。 本次以一台虚拟机进行搭建,小编也是搭建了一星期,主从没啥问题,就是故障转移不行,根本原因就是docker网络的问题,redis和哨兵不在一个网段中。很多教学都是用host,但是不知道现在不能启动成功,所以还是要在一个网络中!

本次一体验为主,太多知识性的问题,大家可以去官网看一下。

redis官网

二、docker和docker compose安装

docker和docker compose安装使用【最新版】

三、启动redis主从

1. 创建一个redis-sentinel-test文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir redis-sentinel-test

2. 在里面创建两个文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd redis-sentinel-test/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir redis
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir sentinel

3. 在redis创建compose文件

必须以docker-compose.yml命名,本次测试redis就不挂载目录到宿主机了,需要的可以使用volumes挂载到宿主机!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim docker-compose.yml

4. 编辑compose文件

这里为了测试方便,就不设置密码了! protected-mode no:关闭就可以其他地方连接使用了 slave-announce-ip:使用宿主机的ip

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: "4.1"
services:
  master:
    image: redis:7.0.4
    container_name: redis-master
    command: bash -c "redis-server --protected-mode no --slave-announce-ip 192.168.84.143 --slave-announce-port 6379"
    ports:
      - 6379:6379
  slave1:
    image: redis:7.0.4
    container_name: redis-slave-1
    ports:
      - 6380:6379
    command:  bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.84.143 --slave-announce-port 6380"
  slave2:
    image: redis:7.0.4
    container_name: redis-slave-2
    ports:
      - 6381:6379
    command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.84.143 --slave-announce-port 6381"

5. 启动redis主从

compose更新了,启动由原来的-变成了空格

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

6. 重点提醒

我们启动后,docker compose会自动创建一个网络,就是以文件夹的名称+_default命名! 我们在编写sentinel的compose文件时,==要使用这个默认的网络==,不然就不在一个网段,故障转移无法切换!!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker network ls

7. 查看主从状态

进入主redis:

e77为容器id

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it e77 /bin/bash
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli

查看状态信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
info

8. 测试主从

四、启动三个哨兵

1. 切换到sentinel文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ..
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd sentinel/

2. 创建sentinel.conf文件

我们去官网找一个最低配的文件:

redis官网

因为这是两个实例,咱们只需要一个,所有只需要前四行即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected-mode no
sentinel monitor mymaster 192.168.84.143 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

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

创建sentinel1.conf文件,把上面四行粘贴进来!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim sentinel1.conf

复制两份,不需任何修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp sentinel1.conf sentinel2.conf
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp sentinel1.conf sentinel3.conf

3. 编写conpose文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: "4.2"
services:
  sentinel1:
    image: redis:7.0.4
    container_name: redis-sentinel-1
    ports:
      - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - /mydata/redis-sentinel-test/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
  sentinel2:
    image: redis:7.0.4
    container_name: redis-sentinel-2
    ports:
    - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - /mydata/redis-sentinel-test/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
  sentinel3:
    image: redis:7.0.4
    container_name: redis-sentinel-3
    ports:
      - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - /mydata/redis-sentinel-test/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
  default:
      name: redis_default
      external: true

networks:是呼应上面说的sentinel要和redis在一个网络里,这样才可以完成故障转移!

4. 查看文件树

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tree

如果没有可以安装一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum -y install tree

5. 启动哨兵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

6. 查看哨兵信息

进入哨兵容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it c8 /bin/bash

连接哨兵:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -p 26379
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
info

==一主二从三哨兵完成==

7. 故障转移测试

我们把master给停掉:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker stop e77

8. 故障转移日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose logs -f

9. 查看哨兵状态

此时主节点已自动切换为6381端口。

10. 重启6379服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker restart e77

我们发现刚刚新加入的6379会以从节点加入到主节点中!!

五、整合SpringBoot

1. 导入依赖

小编的springboot版本为:2.3.7.RELEASE

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. yml配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server:
  port: 8084
spring:
  redis:
    sentinel:
      # sentinel.conf里的集群名称
      master: mymaster
      # 我们只需要连哨兵即可,哨兵内部会帮我们找到redis
      nodes:
        - 192.168.84.143:26379
        - 192.168.84.143:26380
        - 192.168.84.143:26381

3. json序列化配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author wangzhenjun
 * @date 2022/8/18 16:37
 */
@Configuration
public class RedisConfig {

    @Bean
    @SuppressWarnings(value = { "unchecked", "rawtypes" })
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
    {
        RedisTemplate<Object, Object> 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测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author wangzhenjun
 * @date 2022/8/18 17:48
 */
@RestController
public class TestController {

    @Autowired
    private RedisTemplate redisTemplate;

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

5. 项目结构

6. 测试

7. 查看redis是否有值

六、总结

小编经过一个星期的搭建终于完成了 ,最大的问题就是网络问题,最后终于解决了!!看了很多视频和教学,有的太模糊,小编特地花一天时间整体一个无坑版,希望能够帮到后来人!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
新手友好!手把手教你用云服务器搭建个人网站(附CentOS7.9配置详解)
在数字化时代,无论是个人博客、作品集展示,还是小微企业官网,拥有自己的服务器意味着更高的自由度、更强的可控性和更好的性能表现。本文将带你从服务器选购到网站部署,再到安全维护,手把手教你搭建一个稳定高效的线上平台。
用户10425169
2025/06/25
1260
新手友好!手把手教你用云服务器搭建个人网站(附CentOS7.9配置详解)
开源建站工具推荐:强大易用的CMS系统
本文推荐了几个优秀的开源传统 CMS 系统。首先,它们都是功能强大且易于使用的内容管理系统,适用于个人和企业建站。其次,它们都具有灵活性和可扩展性,可以根据用户需求进行定制和扩展。此外,它们还提供了友好的用户界面和简洁直观的管理后台,使用户能够轻松创建、编辑和发布内容。最后,在技术支持方面,这些项目拥有庞大而活跃的社区,并且积极参与产品迭代更新及问题修复。
小柒
2023/09/02
1.9K0
开源建站工具推荐:强大易用的CMS系统
2020最受欢迎的企业网站CMS建站系统排行榜
对于大多数站长来说,企业网站CMS可能再熟悉不过了。但对于新手站长来讲,可能还不太了解什么是企业网站CMS,或企业网站CMS是做什么的。而我们经常可以在网上看见有人问:哪个CMS系统最好用?企业建站用哪个CMS系统?等类似问题。今天,我们一起来看看,2020年站长使用最多、最值得使用的开源免费企业网站CMS建站系统。
亲爱的小孩
2020/06/03
8K0
2020最受欢迎的企业网站CMS建站系统排行榜
市面上的在线电影网站是如何搭建的?电影资源从哪里来的?
随着互联网技术的发展,在线观影已经成为一种主流娱乐方式。很多人好奇:这些提供海量电影资源的网站是怎么搭建起来的?它们的内容又是从哪里来的?本文将带你深入了解一个典型在线电影网站的技术架构与资源获取方式,重点以 苹果CMS(AppleCMS) 为例进行讲解,并结合 Linux 系统环境和伪静态配置等技术细节。
用户2695996
2025/06/09
1240
市面上的在线电影网站是如何搭建的?电影资源从哪里来的?
手把手教你搭建苹果cms v10版本的在线电影网站
用户2695996
2025/06/04
1830
手把手教你搭建苹果cms v10版本的在线电影网站
CMS (内容管理系统)介绍
做为一个IT人,我们都有想过有自己的一个网站,或博客,或论坛。然而,虽有技术,可是时间还有精力都很有限,要用自己的力量去写,还是是一个很大的工程。花的成本太高。 这里告诉大家,其实网上有很多写好的开源程序,而且还有更新,大家可以直接拿来使用,你只需要关心你的业务,不需要在代码上下如此之大的功夫。 如论坛, 这里主要给大家推荐PHP的开源论坛,当然,其它语言也有相关的产品。 php语言的论坛,主要有:
用户9914333
2022/07/21
5K0
CMS (内容管理系统)介绍
网站建设之常用CMS系统的SEO优化功能分析
大家好!我是小熊优化的SEOER,在seo优化这个行业已经从业7年多了,优化过不少的个人和企业网站,根据多年的经验也总结出了不少的优化经验,现在大部分的网站,尤其是单位性质的网站基本都是采用CMS系统来做的,今天,在这里我就分享一下这几年来我接触过的几个CMS系统的优化方面的特点,希望对大家有所帮助。
用户4831957
2020/01/03
1.3K0
我用Python实现了一个小说网站雏形
前段时间做了一个爬取妹子套图的小功能,小伙伴们似乎很有兴趣,为了还特意组建了一个Python兴趣学习小组,来一起学习。十个python九个爬,在大家的印象中好像Python只能做爬虫。然而并非如此,Python 也可以做Web开发,接下来给大家展示一下如何做一个小说站点。
小柒2012
2018/12/14
9020
CMS是什么?
CMS是Content Management System的缩写,意位“内容管理系统”。内容管理系统是一种位于Web前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”还包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到互联网中的信息。
PM吃瓜
2019/08/12
5.1K0
CMS 是什么?企业应该如何选择适合自己的 CMS?
CMS 作为企业一个非常重要的信息化工具,在我所服务的中大型企业中是一个一定要用的系统,而中小企业对 CMS 并不了解,也不怎么使用。这也间接导致人们对 CMS 的理解产生较大误差,有的人觉得 Excel 就可以管理,有的人以为 ERP 就可以完全包含 CMS 工作,有的人甚至觉得 CMS 是一个鸡肋系统,日常工作中完全不需要。我可以很负责的告诉大家,无论你是职场新人,还是高端人士,CMS 一定是未来 10 年企业数字化转型中最重要的板块之一,CMS 所带来的数字化工作流程,数字化内容运营思想,以及高效工作都是企业提升市场竞争力的重要利器。
KATSU
2024/01/02
8130
CMS 是什么?企业应该如何选择适合自己的 CMS?
CMS-需求分析
CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同,比如:一个在线教育网 站,有些公司认为CMS系统是对所有的课程资源进行管理,而在早期网站刚开始盛行时很多公司的业务是网站制 作,当时对CMS的定位是创建网站,即对网站的页面、图片等静态资源进行管理。
cwl_java
2020/01/14
2.5K0
CMS-需求分析
企业网站建设中CMS系统的作用及现状
CMS系统是Content Management System的缩写,意思为“网站内容管理系统”, 用来管理网站后台,对网站前台、小程序或App的内容进行管理和维护。
用户4831957
2021/04/15
1.1K0
干货丨什么是CMS ,CMS 有哪些功能呢?
随着知识付费与专业内容的生活占比加大,内容构造者在撰写与梳理内容时,渴求通过更为高效便捷的方式,完成对内容的管理,更系统的对文字系统建立组织逻辑,自此CMS应运而生。
齿轮易创说互联网
2018/09/14
8.2K0
干货丨什么是CMS ,CMS 有哪些功能呢?
CMS介绍、优点、特性以及CMS模板开发示例
在阅读这篇文章前,推荐一篇“好”文章:MySQL 数据库引擎解析:特性、应用场景与选择策略原创
奇迹_fly
2024/11/28
4970
小涴熊漫画CMS:一款不错的开源免费的漫画连载系统,带采集API
说明:最近想搞个漫画站玩玩,就找了个不错的系统小涴熊漫画CMS,开源免费,基于ThinkPHP 5.1及Redis缓存,自带火车头api方便我们采集发布,功能就不多说了,可以看下面的截图,差不多漫画系统都差不多。作者更新也积极,貌似还计划加入会员系统等其他功能,这里就发一下。
子润先生
2021/05/29
2.3K0
小程序开通cms可视化网页后台【小程序专题9】
我们之前用云开发时,想做个数据管理后台,只能用小程序开发工具自带的操作后台,然后直接在数据库里操作数据。这样对程序员没有什么,可是我们的程序开发出来也要给不懂程序的人使用的。如何让这些人也可以很好的管理我们云开发的数据库呢。这个时候我们就要用vue或者传统web开发实现一个网页管理后台,通过这个直接管理云开发了。但是开发这样一个网页后台,无疑会增加我们的工作量。所以我们今天借助云开发官方推出的CMS功能,来快速的搭建一个云开发的网页管理后台。,首先看一下CMS的优点。
徐建国
2021/12/13
2.8K0
小程序开通cms可视化网页后台【小程序专题9】
常用的免费CMS建站系统推荐
小编从事网站制作这个行业也有不少年头了,从最开始的网站制作只能找网络公司代为制作,到现在的几乎都采用cms建站系统来制作,国内cms建站系统很多,其中有一些很优秀的免费cms建站系统被广大用户所使用,下面小编就给大家介绍一下国内用的比较多的一些免费cms建站系统,希望对大家有所帮助。
用户4831957
2019/05/26
8.3K0
云开发CMS内容管理系统,5分钟搞定小程序管理后台
小程序·云开发的云调用能力,让用户可以免鉴权快速调用微信的开放能力,极大节约了开发成本。现在,大家期待已久的云开发 CMS 内容管理系统,终于上线啦!顺便提示,接下来还可以二次开发哦!
腾讯云开发TCB
2020/06/03
5K0
云开发CMS内容管理系统,5分钟搞定小程序管理后台
小涴熊漫画CMS:一款不错的开源免费的漫画连载系统,带采集API
说明:最近想搞个漫画站玩玩,就找了个不错的系统小涴熊漫画CMS,开源免费,基于ThinkPHP 5.1及Redis缓存,自带火车头api方便我们采集发布,功能就不多说了,可以看下面的截图,差不多漫画系统都差不多。作者更新也积极,貌似还计划加入会员系统等其他功能,这里就发一下。
小狐狸说事
2022/11/16
2.3K0
小涴熊漫画CMS:一款不错的开源免费的漫画连载系统,带采集API
用宝塔搭建勾股CMS博客系统
勾股CMS,让WEB开发更简单!Gougu 基于ThinkPHP6 + Layui + MySql的轻量级极速后台开发框架,干净不臃肿、操作简单、开箱即用; 通用型的后台权限管理机制,容易功能定制和二次开发,帮助开发者简单高效降低二次开发成本 完全免费开源,系统易于功能扩展,代码维护,非常容易定制和二次开发。
西里国际站
2023/04/18
1.4K0
用宝塔搭建勾股CMS博客系统
推荐阅读
相关推荐
新手友好!手把手教你用云服务器搭建个人网站(附CentOS7.9配置详解)
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 一、前言
  • 二、docker和docker compose安装
  • 三、启动redis主从
    • 1. 创建一个redis-sentinel-test文件夹
    • 2. 在里面创建两个文件夹
    • 3. 在redis创建compose文件
    • 4. 编辑compose文件
    • 5. 启动redis主从
    • 6. 重点提醒
    • 7. 查看主从状态
    • 8. 测试主从
  • 四、启动三个哨兵
    • 1. 切换到sentinel文件夹
    • 2. 创建sentinel.conf文件
    • 3. 编写conpose文件
    • 4. 查看文件树
    • 5. 启动哨兵
    • 6. 查看哨兵信息
    • 7. 故障转移测试
    • 8. 故障转移日志
    • 9. 查看哨兵状态
    • 10. 重启6379服务
  • 五、整合SpringBoot
    • 1. 导入依赖
    • 2. yml配置
    • 3. json序列化配置
    • 4. 新建controller测试
    • 5. 项目结构
    • 6. 测试
    • 7. 查看redis是否有值
  • 六、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档