Centos7搭建Redis 3.X 集群

客户端分片不会共享数据,容易造成数据丢失,使用 Redis 集群构建分布式缓存时很好的选择。
1、搭建集群
建立 redis 集群,至少需要 3 个 mastar 实例,使用一个服务器使用 7000~7005 6个端口来模拟有 6 个 redis 实例,后将这 6 个实例组成三主三从的集群。使用的 Redis 版本是 3.2.6.

  1. 将下载好的 redis-3.2.6.tar.gz 复制到 192.168.56.104.
# scp redis-3.2.6.tar.gz [email protected]:/opt/
  1. 解压安装
# cd /opt/
# tar -zxf redis-3.2.6.tar.gz
# cd redis-3.2.6/
# make && make install
  1. 创建目录,复制配置文件
# cd /opt/
# mkdir redis-cluster
# cd redis-cluster
# mkdir 7000 7001 7002 7003 7004 7005
# cp /opt/redis-3.2.6/redis.conf 7000
# cd 7000
# vim redis.conf
  1. 分别修改7000~7005目录下的 redis.conf 配置
# bind 192.168.56.104
# port 7000~
# daemonized yes
# cluster-enabled yes
# cluster-config-file nodes.conf
# cluster-node-timeout 15000
# appendonly yes

5、启动6个实例

# cd /opt/cluster-test/7000
# redis-server redis.conf
  1. 分别进入各个目录下启动 redis-server
  2. 安装 redis-3.2.2.gem
# 安装 redis-3.2.2.gem 是为了能够使用 redis-trib 命令
# yum install ruby rubygems -y
# cd /opt/
# gem install redis-3.2.2.gem
  1. 创建集群
#该步骤使用 redis.trib.rb 命令来创建集群,其中“--replicas 1”指定一个master有一个 slave,之后是6个实例,这就是三主三从。
# cd /opt/redis-3.2.6/src/
# ./redis-trib.rb create --replicas 1 192.168.56.104:7000 192.168.56.104:7001 192.168.56.104:7002 192.168.56.104:7003 192.168.56.104:7004 
192.168.56.104:7005

开启集群成功

[OK] All nodes agress about slots configuration

9、spring boot集成 JedisCluster
在 pox.xml 中引入一下依赖



    redis.clients
    jedis



    org.apache.commons
    commons-lang3




    com.alibaba
    fastjson

  1. application.properties Redis 配置
redis.shard.servers=192.168.56.102:7000,192.168.56.103:7001,192.168.56.102:7003,192.168.56.103:7004,192.168.56.102:7005,
redis.shard.timeout=5000
redis.shard.maxTotal=32
  1. JedisCluster 配置类
package com.microservice.dbandcache.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

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

@Configuration
public class JedisClusterConfig {
    @Autowired
    private Environment env;
    
    @Bean
    public JedisCluster jedisCluster() {
        String[] serverArray = env.getProperty("redis.cluster.servers").split(",");
        Set nodes = new HashSet<>();
        for (String ipPort : serverArray) {
            String[] ipPortPair = ipPort.split(":");
            nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));
        }
        return new JedisCluster(nodes, Integer.valueOf(env.getProperty("redis.cluster.commandTimeOut")));
    }
}

业务代码 将原来的 jedis换成 jedisCluster 注入。

你可能感兴趣的:(Redis)