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

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;

...
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为在阿里云搭建 Docker Redis 集群,您可以按照以下步骤进行操作: 1. 创建阿里云 ECS 实例:首先,登录阿里云控制台,创建至少3个 ECS 实例作为 Redis 集群的节点。确保这些实例之间可以通过内网IP相互通信。 2. 安装 Docker:在每个 ECS 实例上安装 Docker。您可以参考阿里云官方文档提供的方法来完成安装。 3. 创建 Docker 网络:使用以下命令在每个 ECS 实例上创建一个 Docker 网络: ```shell docker network create redisnet ``` 4. 下载 Redis 镜像:在每个 ECS 实例上执行以下命令,下载 Redis 镜像: ```shell docker pull redis ``` 5. 运行 Redis 容器:在每个 ECS 实例上执行以下命令,启动 Redis 容器,并加入到之前创建的 Docker 网络中: ```shell docker run -d --name redis1 --net redisnet redis docker run -d --name redis2 --net redisnet redis docker run -d --name redis3 --net redisnet redis ``` 这将分别在每个 ECS 实例上启动3个 Redis 容器。 6. 配置 Redis 集群:在任一 ECS 实例上执行以下命令,配置 Redis 集群: ```shell docker exec -it redis1 redis-cli --cluster create <节点1IP:端口> <节点2IP:端口> <节点3IP:端口> --cluster-replicas 1 ``` 请将 `<节点1IP:端口>`、 `<节点2IP:端口>`、 `<节点3IP:端口>` 替换为您实际的 ECS 实例的 IP 地址和 Redis 运行端口。 7. 验证 Redis 集群:您可以执行以下命令验证 Redis 集群是否正常工作: ```shell docker exec -it redis1 redis-cli cluster info ``` 如果一切正常,您应该能够看到有关 Redis 集群的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值