RedisCluster 搭建与使用

一、部署环境

系统&软件版本
VMware Workstation15 Pro
CentOS-Minimal7.6.1810
redis6.0.6
Xshell7
Xftp7

软件列表

  • redis-6.0.6.tar.gz

集群角色

  • 192.168.32.102:7001(主)
  • 192.168.32.102:7002(主)
  • 192.168.32.102:7003(主)
  • 192.168.32.102:7004(从)
  • 192.168.32.102:7005(从)
  • 192.168.32.102:7006(从)
  • 192.168.32.102:7007(待加入主)
  • 192.168.32.102:7008(待加入从)

二、可能用到的命令

# vim 操作 
# 查询
/关键词
# 下个查询结果
n
# 上一个查询结果
shift+n
# 取消查询结果高亮
:noh
# 全文替换
:%s/替换前/替换后/g

三、搭建步骤

redis-6.0.6.tar.gz 软件包拷贝至 /home/software 目录下

1、安装 Redis

# 当前目录 /home/software
# 解压文件
tar -zxvf redis-6.0.6.tar.gz
# 安装编译环境
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
source /etc/profile
# 编译软件并安装
cd redis-6.0.6
make 
make install PREFIX=/usr/local/redis-6.0.6
cp /home/software/redis-6.0.6/redis.conf /usr/local/redis-6.0.6/

2、编辑配置文件

vim redis.conf
# 配置内容如下
#bind 127.0.0.1  #取消端口绑定
protected-mode no  #关闭保护模式
port 7001  #端口
daemonize yes  #后台进程模式
cluster-enabled yes  #开启集群模式

3、准备 Redis Cluster

# 准备 Redis Cluster 
cd /usr/local/
mkdir redis-cluster
cd redis-cluster
mkdir redis7001 redis7002 redis7003 redis7004 redis7005 redis7006
# 将 redis 分别复制到 redis7001~7006 中
cp -R /usr/local/redis-6.0.6/* redis7001
cp -R /usr/local/redis-6.0.6/* redis7002
cp -R /usr/local/redis-6.0.6/* redis7003
cp -R /usr/local/redis-6.0.6/* redis7004
cp -R /usr/local/redis-6.0.6/* redis7005
cp -R /usr/local/redis-6.0.6/* redis7006
# 分别修改各配置文件中的端口
vim redis7002/bin/redis.conf
vim redis7003/bin/redis.conf
vim redis7004/bin/redis.conf
vim redis7005/bin/redis.conf
vim redis7006/bin/redis.conf

4、创建启动脚本

vim startAll.sh
# 内容如下
cd redis7001/bin
./redis-server ./redis.conf
cd ../..
cd redis7002/bin
./redis-server ./redis.conf
cd ../..
cd redis7003/bin
./redis-server ./redis.conf
cd ../..
cd redis7004/bin
./redis-server ./redis.conf
cd ../..
cd redis7005/bin
./redis-server ./redis.conf
cd ../..
cd redis7006/bin
./redis-server ./redis.conf
cd ../..
# 修复脚本权限
chmod u+x shartAll.sh
# 执行脚本,启动所有redis
./startAll.sh

在这里插入图片描述

5、 创建集群

注意:创建时 Redis 里不能有数据

cd redis7001/bin
./redis-cli --cluster create 192.168.32.102:7001 192.168.32.102:7002 192.168.32.102:7003 192.168.32.102:7004 192.168.32.102:7005 192.168.32.102:7006 --cluster-replicas 1

在这里插入图片描述

# 集群测试
# 连接集群(-c 表示是以redis集群方式进行连接)
./redis-cli -h 127.0.0.1 -p 7001 -c
# 查看集群状态
cluster info
# 查看集群中的节点
cluster nodes

在这里插入图片描述

四、集群扩容

1、添加主节点

# 进入 redis 集群安装目录
cd /usr/local/redis-cluster/
# 创建新的主从节点目录
mkdir redis7007 redis7008
# 将 redis 程序拷贝至对应目录(记得修改配置文件中的端口)
cp -R /usr/local/redis-6.0.6/* redis7007
cp -R /usr/local/redis-6.0.6/* redis7008
# 启动 7007和7008 节点
cd redis7007/bin/
./redis-server ./redis.conf
cd ../../redis7008/bin/
./redis-server ./redis.conf
# 向集群中添加主节点
./redis-cli --cluster add-node 192.168.32.102:7007 192.168.32.102:7001

在这里插入图片描述

# 查看集群节点
./redis-cli -h 192.168.32.102 -p 7007 -c
cluster nodes

在这里插入图片描述

# 给7007节点分配 slot
./redis-cli --cluster reshard 192.168.32.102:7007
# 过程中需要填写的内容如下:
# 第一步:配置 slot 数量
How many slots do you want to move (from 1 to 16384)? 4000  #给新节点分配 4000 个 slot
# 第二步:配置接收 slot 的节点ID
What is the receiving node ID? ec9a3272bc2b8b9b6146635e167e8796aa5bc8b3  #上图红框中第一段内容
# 第三步:配置 slot 来源
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.

输入:all (表示:从所有主节点中取出部分节点至新节点)

# 第四部:移动 slot 到新节点
Do you want to proceed with the proposed reshard plan(yes or no)? yes

在这里插入图片描述

2、添加从节点

7007 节点添加从节点 7008

./redis-cli --cluster add-node 192.168.32.102:7008 192.168.32.102:7007 --cluster-slave --cluster-master-id ec9a3272bc2b8b9b6146635e167e8796aa5bc8b3

在这里插入图片描述

# 查看集群节点信息
./redis-cli -h 192.168.32.102 -p 7007 -c
cluster nodes

在这里插入图片描述

五、集群缩容

./redis-cli --cluster del-node 节点IP:端口 节点ID

1、删除从节点

./redis-cli --cluster del-node 192.168.32.102:7008 c2d028260599c4a3b6a83c84b3329dd0b35f1e7a

在这里插入图片描述

2、删除主节点

./redis-cli --cluster del-node 192.168.32.102:7007 ec9a3272bc2b8b9b6146635e167e8796aa5bc8b3

在这里插入图片描述

注意:删除已经占有 slot 的主结点时会失败(从节点可以直接删除),如上图所示。

六、SpringBoot 连接 Redis Cluster

1、代码

pom.xm

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.idol</groupId>
    <artifactId>springboot-redis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

</project>

application.properties

spring.redis.cluster.nodes=192.168.32.102:7001,192.168.32.102:7002,192.168.32.102:7003,192.168.32.102:7004,192.168.32.102:7005,192.168.32.102:7006,192.168.32.102:7007,192.168.32.102:7008

RedisConfig.java

package com.idol.config;

import org.springframework.beans.factory.annotation.Autowired;
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.StringRedisSerializer;

/**
 * @author SupremeSir
 * @description
 * @className RedisConfig
 * @date 2021/4/4 20:59
 **/
@Configuration
public class RedisConfig {
    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

2、问题

问题描述

博主将 Redis Cluster 部署在虚拟机中,然后通过本机的 Spring Boot 项目去连接集群时总是连接失败,并报如下错误:

nested exception is io.lettuce.core.redisexception: io.lettuce.core.redisconnectionexception: unable to connect to 127.0.0.1

core.cluster.redisclusterclient : connection refused: no further information: /127.0.0.1:7001

问题分析

出现这样问题的原因有以下几点:

  1. 本机与 Redis Cluster 网络不通。
  2. 没有将 redis.conf 文件中的 bind 配置进行注释。
  3. Redis Cluster 节点配置有误。

问题解决

问题 1:需结合自身情况解决。

问题 2 :将 redis.conf 文件中的 bind 注释掉即可。

问题 3

# 进入 redis-cluster 文件夹
cd /usr/local/redis-cluster
# 连接 redis-cluster
./redis7001/bin/redis-cli -h 192.168.32.102 -p 7001 -c
# 查看集群节点信息(如果节点地址为 127.0.0.1 则需要对节点 IP 进行修改)
cluster nodes

在这里插入图片描述

如出现的信息如上图所示,则需要修改 node.conf 文件

# 结束所有 redis 进程后开始对 node.conf 文件进行修改(将所有的 127.0.0.1 改为 192.168.32.102)
vim redis7001/bin/nodes.conf  #需要对集群中所有redis 实例的 node.conf 进行修改

源码

源码下载(免费)

----------------------------------------- 努力不会让你最好,但会更好! -----------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值