ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis5.0集群安装(主/从节点添加以及删除)以及Springboot整合

2021-12-01 15:32:29  阅读:261  来源: 互联网

标签:Springboot 77.100 redis 192.168 cluster Redis5.0 7001 节点


安装redis单机版 第一步:安装 C 语言需要的 GCC 环境
yum install -y gcc-c++
yum install -y wget
第二步:下载并解压缩 Redis 源码压缩包
cd /root/redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar -zxf redis-5.0.5.tar.gz
第三步:编译 Redis 源码,进入 redis-5.0.5 目录,执行编译命令
cd redis-5.0.5/src
make
第四步:安装 Redis ,需要通过 PREFIX 指定安装路径
mkdir /root/redis -p
make install PREFIX=/root/redis
第五步:复制配置文件
cp /root/redis/redis-5.0.5/redis.conf /root/redis/bin/

# 修改配置文件
port 6379
# 将`daemonize`由`no`改为`yes`
daemonize yes
# 默认绑定的是回环地址,默认不能被其他机器访问
# bind 127.0.0.1
# 是否开启保护模式,由yes该为no
protected-mode no
安装Redis集群 如果设置了密码,执行命令的时候加上 -a password就行了 第一步:创建文件夹
mkdir -p /root/redis/redis_cluster
cd /root/redis/redis_cluster
mkdir 700{1..6}
第二步:拷贝redis单机版的安装目录bin到7001:
cp -r /root/redis/bin/ 7001/
第三步:修改配置文件
vim 7001/bin/redis.conf
port 7001
cluster-enabled yes   开启集群,把注释#去掉即可
第四步:复制7001,到7002~7006,注意端口修改。
cp -r 7001/* 7002
cp -r 7001/* 7003
cp -r 7001/* 7004
cp -r 7001/* 7005
cp -r 7001/* 7006
第五步:创建start-cluster.sh,启动所有的实例
# 脚本内容如下
cd 7001/bin
./redis-server redis.conf
cd ../../7002/bin
./redis-server redis.conf
cd ../../7003/bin
./redis-server redis.conf
cd ../../7004/bin
./redis-server redis.conf
cd ../../7005/bin
./redis-server redis.conf
cd ../../7006/bin
./redis-server redis.conf

# 给脚本赋予写和执行的权限
chmod u+x start-cluster.sh
# 启动脚本
./start-cluster.sh
查看运行情况
ps -ef | grep redis
结果如下 第六步:创建Redis集群(创建时Redis里不要有数据)
cd 7001/bin/
# create:创建集群
# --cluster-replicas 1:每一台主机至少有一台从机。
./redis-cli --cluster create --cluster-replicas 1 192.168.77.100:7001 192.168.77.100:7002 192.168.77.100:7003 192.168.77.100:7004 192.168.77.100:7005 192.168.77.100:7006
结果如下: 连接集群
# -c 表示是以redis集群方式进行连接
./redis-cli -h 127.0.0.1 -p 7001 -c
查看集群信息 向Redis集群添加新的主节点和从节点
cd /root/redis/redis_cluster
mkdir 7007 7008
# 复制前须要保证最初安装的那个单机版redis(没有存放数据)
cp -r /root/redis/bin 7007/
cp -r /root/redis/bin 7008/
修改配置
vim 7007/bin/redis.conf
port 7007
cluster-enabled yes   开启集群,把注释#去掉即可
然后启动7007和7008
./redis-server redis.conf
添加主节点
cd 7001/bin/
./redis-cli --cluster add-node 192.168.77.100:7007 192.168.77.100:7001
# 192.168.77.100:7007 要向集群添加的新的主节点
# 192.168.77.100:7001 原集群中任意节点
结果如下: 查看集群节点
./redis-cli -p 7001 -c
127.0.0.1:7001> cluster nodes
结果如下:当前还没有分配槽位 给新节点分配slot槽位,ip:port 为当前集群中的某一任意节点
./redis-cli --cluster reshard 192.168.77.100:7001

# 分配多少槽位?根据情况填写:4000
# node ID?7007的ID:3d9e59debe81b17eeeeee0c82fbe50a4295941c1
# Source node #1:all
# 是否继续执行reshard plan:yes
是否继续执行reshard plan:yes 结果如下: 再次查看集群节点,7007已经分配了槽位 添加从节点
./redis-cli --cluster add-node 192.168.77.100:7008 192.168.77.100:7007
结果如下 查看集群节点
./redis-cli -p 7001 -c
127.0.0.1:7001> cluster nodes
结果如下: 连接新节点(7008)的客户端
./redis-cli -p 7008 -c
指定为192.168.77.100:7007节点的从节点
cluster replicate 3d9e59debe81b17eeeeee0c82fbe50a4295941c1
结果如下: 删除从节点
./redis-cli --cluster del-node 192.168.77.100:7008 6aae16dd69d4c7cfb0cfae03c4f0170ca1836ec4
结果如下: 删除主节点 要删除主节点,首先要把该主节点上的槽位分配到某一个主节点上,这里放到192.168.77.100:7001主节点。
./redis-cli --cluster reshard 192.168.77.100:7001
# 需要移除多少槽位,这里的槽位=所需要删除的节点的所占槽位:4000
# 分配到哪个节点,值为节点id:7001的节点id
# Source node #1:7007的节点id
# Source node #2:输入done执行生成计划
# 是否继续执行reshard plan:yes
结果如下: 最后安全删除
./redis-cli --cluster del-node 192.168.77.100:7007 3d9e59debe81b17eeeeee0c82fbe50a4295941c1
结果如下: 删除完节点后,查看redis进程,会发现7007和7008已经停了    SpringBoot整合RedisCluster  导入依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>

添加配置

server:
  port: 8888
spring:
  redis:
    cluster:
      nodes: 192.168.77.100:7001,192.168.77.100:7002,192.168.77.100:7003,192.168.77.100:7004,192.168.77.100:7005,192.168.77.100:7006,192.168.77.100:7007,192.168.77.100:7008
    password:
    jedis:
      pool:
        max-active: 20
        max-wait: -1
        max-idle: 200
        min-idle: 20
    timeout: 10000

Jedis配置

package com.lagou.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashSet;
import java.util.Set;

/**
 * @ClassName: RedisClusterConfig
 * @Description:
 * @Author: qjc
 * @Date: 2021/11/26 3:41 下午
 */
@Configuration
public class RedisClusterConfig {

    @Value("${spring.redis.cluster.nodes}")
    private String clusterNodes;

    @Value("${spring.redis.timeout}")
    private int timeout;

    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;

    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;

    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxActive;

    @Value("${spring.redis.jedis.pool.max-wait}")
    private long maxWait;

    @Bean
    public JedisCluster getJedisCluster() {
        return new JedisCluster(getNodes(), timeout, poolConfig());
    }

    private JedisPoolConfig poolConfig() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(maxIdle);
        config.setMinIdle(minIdle);
        config.setMaxTotal(maxActive);
        config.setMaxWaitMillis(maxWait);
        return config;
    }

    private Set<HostAndPort> getNodes() {
        String[] cNodes = clusterNodes.split(",");
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();
        // 分割出集群节点
        String[] hp;
        for (String node : cNodes) {
            hp = node.split(":");
            nodes.add(new HostAndPort(hp[0], Integer.parseInt(hp[1])));
        }
        return nodes;
    }
}

测试

package com.lagou;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import redis.clients.jedis.JedisCluster;

/**
 * @ClassName: RedisClusterWorkApplicationTest
 * @Description:
 * @Author: qjc
 * @Date: 2021/11/26 3:44 下午
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RedisClusterWorkApplication.class)
public class RedisClusterWorkApplicationTest {

    @Autowired
    private JedisCluster jedisCluster;

    @Test
    public void testRedisCluster() {
        String result = jedisCluster.set("name", "zhangfei");
        System.out.println("插入结果:" + result);
        String name = jedisCluster.get("name");
        System.out.println("查询结果:" + name);
    }

}

标签:Springboot,77.100,redis,192.168,cluster,Redis5.0,7001,节点
来源: https://www.cnblogs.com/java-spring/p/15620279.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有