Ubuntu 22最新dockers部署redis哨兵模式,并整合spring boot的详细记录(含spring boot项目包)

dockers部署redis哨兵模式,并整合spring boot

  • 环境说明
  • 相关学习博客
  • 一、在docker中安装redis
    • 1、下载dockers镜像包和redis配置文件(主从一样)
    • 2、编辑配置文件(主从一样)
    • 3、启动redis(主从一样)
    • 4、进入容器测试(主从一样)
  • 二、配置主从复制
    • 1、在从机上设置master的IP的端口,并切换主机
    • 2、查询两台服务器的主从配置
    • 3、主从测试
  • 三、配置哨兵模式(主从一样)
    • 1、可有可无的工具
    • 2、配置sentinel.conf
    • 3、启动哨兵模式
    • 4、查看启动情况
  • 四、整合到spring boot中
    • 1、创建一个新的spring boot项目
    • 2、添加依赖
    • 3、添加application.yaml的配置
    • 4、创建redis的配置类
    • 5、自定义RedisTemplate
    • 6、未解决的问题redisson

环境说明

系统:Ubuntu 22
容器:docker
redis服务器:
master:192.168.81.128
slave:192.168.81.129

相关学习博客

docker的详细学习教程

redis的详细学习教程

一、在docker中安装redis

1、下载dockers镜像包和redis配置文件(主从一样)

# 下载最新的redis镜像包
docker pull redis
# 查询镜像
docker images
REPOSITORY       TAG       IMAGE ID       CREATED       SIZE
redis            latest    7fc37b47acde   12 days ago   116MB
delron/fastdfs   latest    8487e86fc6ee   5 years ago   464MB
# 创建docker挂载目录
mkdir -p /usr/local/redis
cd /usr/local/redis/
# 下载redis配置文件
wget -c http://download.redis.io/redis-stable/redis.conf

2、编辑配置文件(主从一样)

vim redis.conf
bind 0.0.0.0
port 6379
daemonize yes
logfile "/data/logs/redis.log"
masterauth yourPassword
requirepass yourPassword
appendonly yes
cluster-enabled yes

3、启动redis(主从一样)

docker run -p 6379:6379 -p 26379:26379  --privileged=true --name redis -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d --restart=always redis

4、进入容器测试(主从一样)

# 进入容器
$ docker exec -it redis  bash
# 使用客户端命令进入reids并输入密码
root@93e142d4b040:/data# redis-cli -a "yourPassword"
# 设置一个key为test,value为redis的键值对做简单的测试
127.0.0.1:6379> set test redis
OK
# 取值
127.0.0.1:6379> get test
"redis"
127.0.0.1:6379> info

二、配置主从复制

1、在从机上设置master的IP的端口,并切换主机

# 设置主机
127.0.0.1:6379> SLAVEOF  192.168.81.128 6379
# 切换master(当自动切换无效时,可以使用此命令手动切换)
127.0.0.1:6379> replicaof  192.168.81.128 6379

配置文件的密码可能会不生效,则需要手动配置
127.0.0.1:6379> config set masterauth yourPassword
127.0.0.1:6379> config set requirepass yourPassword

2、查询两台服务器的主从配置

Master

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.81.128,port=6379,state=online,offset=3327799,lag=0
master_failover_state:no-failover
master_replid:0e2af2cc670451aa4ec703c336f3014a35a67016
master_replid2:2dbd8f657c563221b2bfd8d45aead1f25e7e9922
master_repl_offset:3327799
second_repl_offset:2395307
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2265043
repl_backlog_histlen:1062757

Slave

127.0.0.1:6379> info  replication
# Replication
role:slave
master_host:192.168.81.129
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:3362051
slave_repl_offset:3362051
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:0e2af2cc670451aa4ec703c336f3014a35a67016
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3362051
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2408022
repl_backlog_histlen:954030
127.0.0.1:6379>

3、主从测试

自行在master上设置一个值,然后看从机上

三、配置哨兵模式(主从一样)

1、可有可无的工具

# 推荐在容器里面安装一下两个依赖
# 方便编辑文件
apt-get install -y vim
# ps用于查询进程
apt-get install procps

2、配置sentinel.conf

root@4266ebe78410:/# vim sentinel.conf

port 26379
daemonize yes
sentinel monitor mymaster 192.168.81.128 6379 2
sentinel auth-pass mymaster yourPassword

3、启动哨兵模式

redis-sentinel sentinel.conf
# 使用ps查询进程
root@4266ebe78410:/# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
redis          1       0  1 09:31 ?        00:01:20 redis-server *:6379
root          21       0  0 09:31 pts/0    00:00:00 bash
root          74       1  0 10:45 ?        00:00:32 redis-sentinel *:26379 [sentinel]
root          84       0  0 11:28 pts/1    00:00:00 bash
root          96      84 99 11:41 pts/1    00:00:00 ps -ef

4、查看启动情况

redis-cli -a "yourPassword" -p 26379
127.0.0.1:26379> info sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.22.1.68:6379,slaves=2,sentinels=4

总结

未解决的问题:(如果找到原因欢迎在评论区沟通)

  • redis.conf中配置的密码,没有生效,每次重启需要手动配置密码,然后再启动哨兵

四、整合到spring boot中

1、创建一个新的spring boot项目

在这里插入图片描述

  • 如果遇到可选择的Java版式过高,可将idea默认“服务器URL”改为:https://start.aliyun.com/

2、添加依赖

        <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>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.13.6</version>
        </dependency>

3、添加application.yaml的配置

server:
  port: 8088

spring:
  redis:
    # 数据库(默认为0号库)
    database: 2
    # 密码(默认空),操作redis需要使用的密码
    password: cdjs@redis
    # 端口号
    #    port: 6379
    #连接超时时间(毫秒)
    timeout: 10000ms
    sentinel:
      master: mymaster
      nodes:
        - 192.168.81.128:26379
        - 192.168.81.129:26379
      # 操作sentinel时需要提供的密码
      password: cdjs@redis
    # 使用lettuce配置
    lettuce:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 200
        # 连接池中的最大空闲连接
        max-idle: 20
        # 连接池中的最小空闲连接
        min-idle: 5
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms

4、创建redis的配置类

package com.cdjs.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


@Configuration
public class RedisConfig {

    @Bean
    RedissonClient redissonSentinel() {
        Config config = new Config();
        config.useSentinelServers()
                .setMasterName("mymaster")
                .addSentinelAddress("redis://192.168.81.128:26379")
                .addSentinelAddress("redis://192.168.81.129:26379")
                .setMasterConnectionPoolSize(250)
                .setSlaveConnectionPoolSize(250)
                .setCheckSentinelsList(false)
                .setPassword("cdjs@redis")
                .setMasterConnectionMinimumIdleSize(10)
                .setSlaveConnectionMinimumIdleSize(10);
        return Redisson.create(config);
    }


    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        // 创建RedisTemplate对象
        RedisTemplate<String,Object> template = new RedisTemplate();

        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);

        // 创建Json序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();


        // 设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());

        // 设置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        // 设置Hash采用String的方式序列化Value
        template.setHashValueSerializer(stringRedisSerializer);
        return template;
    }
}
  • RedissonClient redissonSentinel() redisson是分布式锁配置,不需要的可以不配

5、自定义RedisTemplate

见笔记

6、未解决的问题redisson

redisson是分布式配置。
启动spring boot时报错:Can’t execute SENTINEL commands on /192.168.81.128:26379
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/555996.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4-Java方法详解

目录 Java方法详解 1、什么是方法 2、方法的定义及调用 3、方法重载 4、命令行传参 5、可变参数 6、递归 例题&#xff1a;代码实现一个计算机 Java方法详解 1、什么是方法 2、方法的定义及调用 形参&#xff1a;用来定义作用的 实参&#xff1a;实际调用传递给他的参数…

【Qt 学习笔记】Qt常用控件 | 显示类控件Progress Bar的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Progress Bar的使用及说明 文章编号&#xff…

【创建型模式】抽象工厂模式

一、抽象工厂模式概述 抽象工厂模式定义&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 模式动机&#xff1a; 1.当系统提供的工厂生产的具体产品并不是一个简单的对象&#xff0c;而是多个位于不同产品等级结构、属于不同类型的…

Simba:Mamba 增强了 U-ShiftGCN,用于视频中的骨骼动作识别

Simba&#xff1a;Mamba 增强了 U-ShiftGCN&#xff0c;用于视频中的骨骼动作识别 摘要IntroductionRelated WorksMethodologyDown-sampling ShiftGCN Encoder Experiments & ResultsDatasets Simba: Mamba augmented U-ShiftGCN for Skeletal Action Recognition in Video…

通过vue完成表格数据的渲染展示和vue的生命周期及小结

案例 通过vue完成表格数据的渲染展示 把视图区展示的数据 死数据替换掉 从vue的数据模型中读取 展示在视图区 vue中的数据 模型是js中的自定义类型 形成的数组 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&l…

NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解

NL2SQL进阶系列(1)&#xff1a;DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解 NL2SQL基础系列(1)&#xff1a;业界顶尖排行榜、权威测评数据集及LLM大模型&#xff08;Spider vs BIRD&#xff09;全面对比优劣分析[Text2SQL、Text2DSL] NL2SQL基础系列(2)&#xff1a;主流…

2024华中杯C题平面曲线重建思路

华中杯数学建模思路 光纤传感技术是伴随着光纤及光通信技术发展起来的一种新型传感器技 术。它是以光波为传感信号、光纤为传输载体来感知外界环境中的信号&#xff0c;其基本原理是当外界环境参数发生变化时&#xff0c;会引起光纤传感器中光波参量&#xff08;如波长、相位、…

IP-guard WebServer 权限绕过漏洞复现(QVD-2024-14103)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

全球排名前十的搜索引擎,你猜百度排名在第几位?bing稳居二位!

通常情况下&#xff0c;营销人员在争夺其在线业务的流量时会非常关注Google&#xff0c;无论是通过他们的网站&#xff0c;博客文章还是其他形式的内容。考虑到谷歌无疑是最受欢迎的搜索引擎&#xff0c;拥有超过85%的搜索市场份额&#xff0c;这是有道理的。 但这种受欢迎程度…

【Qt】Qt Hello World 程序

文章目录 1、Qt Hello World 程序1.1 使用按钮实现1.1.1 使用可视化方式实现 1.1.2 纯代码方式实现 label创建堆&#xff08;内存泄漏&#xff09;或者栈问题Qt基础类&#xff08;Qstring、Qvector、Qlist&#xff09;乱码问题零散知识 1、Qt Hello World 程序 1.1 使用按钮实…

【代码随想录】【动态规划】day48:打家劫舍

打家劫舍1 def rob(self, nums):""":type nums: List[int]:rtype: int"""# 分为两个情况&#xff0c;偷还是不偷&#xff0c;# dp[i]为考虑到第i个房间时的最大值if len(nums) 0: # 如果没有房屋&#xff0c;返回0return 0if len(nums) 1: #…

QoS流量整形

流量整形是一种带宽技术形式&#xff0c;它延迟某些类型的网络数据包的流动&#xff0c;以确保更高优先级应用程序的网络性能&#xff0c;它主要涉及调整数据传输速率&#xff0c;以确保网络资源以最佳容量得到利用。流量整形的目的是防止网络拥塞并提高网络的整体性能&#xf…

穿越物联网的迷雾:深入理解MQTT协议

目录标题 1、MQTT简介核心特性 2、MQTT的工作原理通信过程 3、MQTT的消息质量&#xff08;QoS&#xff09;4、安全机制5、实践应用环境准备示例项目发布者客户端订阅者客户端 6、最佳实践7、结论8、参考资料 在物联网&#xff08;IoT&#xff09;的海洋中&#xff0c;数据像水流…

【深度学习】Attention、Self-Attention、Multi-Head Attention

一、Attention 在CV领域&#xff0c;注意力机制通常分为通道注意力和空间注意力或者两者结合。 一张图像经backbone得到的特征通常包括多个通道&#xff0c;每个通道是一个像素矩阵&#xff0c;每个通道对任务的贡献不尽相同&#xff0c;单个通道的特征图中每个像素对任务的贡…

Ansible在macOS上的安装部署

一、安装 Ansible&#xff08;使用 Homebrew&#xff09; 安装 Homebrew&#xff08;如果尚未安装&#xff09;&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"使用 Homebrew 安装 Ansible&#x…

Hive进阶(1)----HDFS写入数据流程(赋图助君理解)

HDFS写入数据流程 1.理论流程描述 HDFS&#xff08;Hadoop分布式文件系统&#xff09;的数据写入流程是一个复杂但高效的过程&#xff0c;可以分为以下8个步骤&#xff1a; 1、client(客户端)发起文件上传请求&#xff1b; 2、通过发送RPC请求与NameNode建立通讯。NameNode…

从100美元到1亿美元,探究传奇交易员GCR的交易心得及其持仓

有史以来最“伟大”的交易员GCR终于回归。2022年&#xff0c;GCR的资金从100美元涨至1亿美元&#xff0c;通过做空LUNA成为有史以来最赚钱的交易员。 GCR又名Giant Cassock Revival&#xff0c;或许是从FTX和Luna崩盘事件中获利最多的人&#xff0c;其净资产达到1亿美元后便“…

lv_micropython for ESP32/S2/S3/C3

由于官方的lv_micropython编译ESP32S3/S2/C3会报错&#xff0c;因为这些芯片的esp-idf底层重写了接口&#xff0c;参照网友提供的方法修改lv_bindings/driver/esp32里的文件&#xff0c;解决编译错误。 问题列举&#xff1a;Issues lvgl/lv_binding_micropython GitHub 一…

视觉信息保真度VIF算法详细介绍

来源 算法核心思想来源该篇论文A VISUAL INFORMATION FIDELITY APPROACH TO VIDEO QUALITY ASSESSMENT;是2005年的一篇高引用文章; 是一种全参考的视频图像评价算法;在奈飞开源的视频质量评价工具vmaf中将其作为一个判断维度,具体关于vmaf介绍可以参考视频质量评价工具vmaf…

安全开发实战(2)---域名反查IP

目录 安全开发专栏 前言 域名与ip的关系 域名反查ip的作用 1.2.1 One 1.2.2 Two 1.2.3 批量监测 ​总结 安全开发专栏 安全开发实战http://t.csdnimg.cn/25N7H 这步是比较关键的一步,一般进行cdn监测后,获取到真实ip地址后,或是域名时,然后进行域名反查IP地址,进行进…