您现在的位置是:首页 > 正文

springboot连接阿里云服务器redis集群搭建详细介绍 | 避坑 | 绝对成功(全网最详细搭建最简洁)

2024-02-01 04:24:43阅读 2

springboot连接阿里云redis集群详细介绍(全网首发)

经过我一整天的排查与努力,终于解决了springboot与阿里云redis集群连接的各种问题,这里将详细的介绍如何连接!!

为了操作方便,诸位可以将redis中的应用程序以软链接的方式添加到舒服的位置,这样以后就不用切换目录啦,或者添加为环境变量

1.redis配置文件

redis安装完毕后,会有默认的配置文件,我们需要cp该配置文件。

找到redis的安装目录/redis-7.0.0/redis.conf

  1. 复制redis.conf文件
cp /opt/redis-7.0.0/redis.conf /homr/aguo/redis/conf/

注意:这里需设置redis.conf的一些初始化属性,修改如下

daemonize yes #开启后台启动
# bind=127.0.0.1 注释掉ip绑定的限制
protected-mode no #关闭保护模式

cluster-announce-ip <公网ip>

requirepass <密码>

大坑:在阿里云当中,需要设置cluster-announce-ip <公网ip>

即广播IP,否则springboot连接redis集群时候,上面值默认阿里云的内网IP,这样会导致无法连接。

  1. 自定义redis6379.conf文件

    这里以6379端口为例,其他的端口号,复制该文件 替换掉端口号即可、集群主结点最少3个,所以文件最少要3个(即没有从结点),有需要的可以复制多三分出来,作为3个从结点

    第一句表示引入redis.conf的基本属性

include /home/aguo/redis/conf/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
# 打开集群模式
cluster-enabled yes 
# 设置节点配置文件名称,需要更改
cluster-config-file nodes-6379.conf 
# 设置节点失联事件,超过该时间(ms),集群自动进行主从切换
cluster-node-timeout 15000 
  1. 然后我们copy两份,或者六份(3主3从时)
cp ./redis_6379.conf ./redis_6380.conf
cp ./redis_6379.conf ./redis_6381.conf
  1. vi打开复制出来的配置文件中,修改与文件名对应的端口号,即所有的6379均修改为6380

    :%s/6379/6380 这里可以快速查找并替换!冒号别漏了。

  2. 最后得到以下配置文件(如果3主3从则是7个文件)
    (redis_6382.conf忽略,我不小心弄多余的)
    image-20220518161019272

2. 构建集群系统

这一步就比较难,看着来操作,注意坑

1.启动所有的redis服务

redis-server ./conf/redis_6379.conf
redis-server ./conf/redis_6380.conf
redis-server ./conf/redis_6381.conf
...(如果有从机也要全部启动)
  1. 创建集群(这里非常多坑)
  • 需要开启所有结点防火墙端口,是所有主从结点都要开!

    否则会出现命令阻塞:

    [root@aguozi ~]# redis-cli  --cluster create ....
    
    [回车后卡住,没有任何反应]
    
  • 需要开启总线端口的防火墙,即端口号+10000,【所有】主从结点都要开启!!

    【官方解释】The cluster port is the port that the cluster bus will listen for inbound connections on. When set to the default value, 0, it will be bound to the command port + 10000. Setting this value requires you to specify the cluster bus port when executing cluster meet.

    集群端口是集群总线将侦听入站连接的端口。 当设置为默认值0时,它将绑定到命令端口+ 10000。 设置此值需要在执行集群满足时指定集群总线端口。

    否则出现[waiting for the cluster to join]:

    image-20220518165444754

  • 命令中的参数IP一定要是公网IP

    否则Java会报错连接失败,连接不存在!

  • Using a password with ‘-a’ or ‘-u’ option on the command line interface may 密码安全警告

    在执行的命令后面追加 --no-auth-warning 表示禁止密码安全的警告

  • 报错:[ERR] Node 127.0.0.1:6381 is not empty… 结点不为空

    表示该结点已经存在,也就说该结点已经被其他集群配置过了,或者说无法作为新的结点接入集群中

    办法:

    ​ kill掉该结点

    ​ 删除该结点的所有.aof、rdb本地存储文件,

    ​ 删除nodes-6381.conf配置文件

    ​ (一般可以解决问题,还不行)

    ​ redis-cli –p <对应端口> 然后flushdb

    执行命令(自己去掉换行):

    redis-cli 
    --cluster create #集群参数--创建
    --cluster-replicas 1 #一个主节点对应1个从结点
    120.1.1.1:6379 #这里一定要是公网ip
    120.1.1.1:6380
    120.1.1.1:6381 
    ... ... # 所有的主从结点都要写到这里来!
    -a <密码>
    
    --no-auth-warning #取消密码在命令行输入的警告
    

输入yes,即可。如果卡住,重新确认下总线端口防火墙有没设置好。

3.Springboot连接

  1. 依赖如下

    <!--redis启动器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!--用来配置lettuce的redis连接池-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    
  2. 配置redis

    有两种方式,一种是配置类,一种是application.yaml.根据自己需要配置

​ 配置类(不用继承任何超类)

@Bean
public RedisClusterConfiguration redisClusterConfig(){
    RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
    redisClusterConfiguration.clusterNode("120.76.1.15",6379)
        .clusterNode("120.76.1.15",6380)
        .clusterNode("120.76.1.15",6381);
    redisClusterConfiguration.setMaxRedirects(3);
    redisClusterConfiguration.setPassword("redis密码");
    return redisClusterConfiguration;
}

application.yaml

spring: 
  redis:
   #因为是集群 所以不用设置host、port等单机参数
    lettuce:
      pool: #使用连接池
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    cluster:
      nodes:
          - 120.76.1.15:6379
          - 120.76.1.15:6380
          - 120.76.1.15:6381
      max-redirects: 3
    password: <redis密码>
  1. 测试
@Autowired
private RedisTemplate redisTemplate;

...

网站文章

  • 如何快速定位到报错日志中的关键信息,一招学会,赶快GET吧

    如何快速定位到报错日志中的关键信息,一招学会,赶快GET吧

    一般的服务器日志一个可能大的有几十上百m,小的也得几百k,里面内容是比较多的,如拿到日志没思路去看的话,下面一些办法可以让你快速定位到日志中的异常错误信息 下面的这块日志可以作为练习参考 步骤1:定位...

    2024-02-01 04:24:36
  • 母函数及其应用

    母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目。 使用母函数解决问题的方法称为母函数方法。 1.母函数的原理 对于序列C0、C1、C2、…、Cn,构造函数G(x)...

    2024-02-01 04:24:01
  • c语言中int的取值范围是怎么算出来的,int的取值范围怎么算

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。int的意思是基本整型,计算取值范围:1、当字节数为2时,取值范围为-32768到32767。2、当字节数为4时,取值范围为负的2的...

    2024-02-01 04:23:54
  • 计算机共享访问权限 xp,上面就是xp访问win7共享要密码的解决方法

    计算机共享访问权限 xp,上面就是xp访问win7共享要密码的解决方法

    系统之家WinXP系统访问win7共享要密码的解决方法。不知道大家有没有发现,有时候我们用xp访问win7共享要密码!这个问题有点大啊,有些朋友为了保险起见,特地将密码设置得很复杂,每次访问都要输入的...

    2024-02-01 04:23:25
  • MYSQL json数组创建多值索引

    MYSQL json数组创建多值索引

    MYSQL json数组创建多值索引有感 ##函数索引 ##多值索引

    2024-02-01 04:23:18
  • VMware日志收集方法总结

    VMware日志收集方法总结

    https://www.kclouder.cn/vmware-log-collection/ VM VMware的产品线很多,非常庞大,每种产品都有Diagnostic Information的收集方...

    2024-02-01 04:23:10
  • 安兔兔上html5是什么意思,除了安兔兔跑分,还有这6种办法能证明手机强弱

    安兔兔上html5是什么意思,除了安兔兔跑分,还有这6种办法能证明手机强弱

    现在说起手机跑分,已经稀松平常,但早在五年前,很多手机用户根本不知道如何测试手机性能。“跑分”这个词汇只会出现在媒体的评测文章里。后来,雷布斯捧着小米1代杀到了手机行业,第一句话就是“跑个分呗”,于是...

    2024-02-01 04:22:40
  • 实验15:20211127 Java大数据1+X 中级实操考试(id:2660)

    实验15:20211127 Java大数据1+X 中级实操考试(id:2660)

    【5 分】步骤 1:项目准备【5 分】步骤 2:完成实体类 Student【10 分】步骤 3:完成实体类 Course【10 分】步骤 4:完成实体类 Score【10 分】步骤 5:完成 Stud...

    2024-02-01 04:22:34
  • pytorch里的nn.Embedding是什么东西?

    pytorch里的nn.Embedding是什么东西?

    2024-02-01 04:22:18
  • [NepCTF2022] 复现

    [NepCTF2022] 复现

    www.zip源码泄露,啥也不懂没注意正确的入口在哪里,一直把注意力放在web.php上面。附件下载后是个osz后缀,当时用010看是压缩包文件头,就改后缀了。当时写的过程,确实9.12.2的版本也是...

    2024-02-01 04:22:11