redis cluster集群实现高可用
redis的主从和哨兵两种集群方案,redis从3.0版本开始引入了redis-cluster(集群)。
redis5.0.3
jedis2.9
整个集群有16384个slot
什么是哈希槽
Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。
这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。
使用哈希槽的好处就在于可以方便的添加或移除节点。
集群:是一个提供多个Redis(分布式)节点间共享数据的程序集
集群部署:Redis 集群的键空间被分割为 16384 hash个槽(slot), 集群的最大节点数量也是 16384 个
关系:cluster>node>slot>key
数据迁移
数据迁移可以理解为slot(槽)和key的迁移,这个功能很重要,极大地方便了集群做线性扩展,以及实现平滑的扩容或缩容。
集群的节点内置了复制和高可用特性。
特点:
1、节点自动发现
2、slave->master 选举,集群容错
3、Hot resharding:在线分片
4、基于配置(nodes-port.conf)的集群管理
5、客户端与redis节点直连、不需要中间proxy层.
6、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(1)在server1上创建 6个Redis节点
首先在 server1 机器上 /home/redis/目录下;
创建名为6001、6002、6003、6004、6005、6006的目录
进入6001目录,编写redis.conf:
bind 192.168.191.128
protected-mode no
port 6001
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
分别启动redis-server
(2)在server1上创建redis集群
../src/redis-cli --cluster create 192.168.1.128:6001 192.168.1.128:6002 192.168.1.128:6003 192.168.1.128:6004 192.168.1.128:6005 192.168.1.128:6006 --cluster-replicas 1
../src/redis-cli -c -p 6001
cluster info
info Replication
cluster nodes
cluster slots
3个master,3个slave
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
//redis cluster集群, jedis连接redis集群
public class RedisConfig {
public static void main(String[] args) {
Set<HostAndPort> hosts=new HashSet<HostAndPort>();
hosts.add(new HostAndPort("192.168.1.128",6001));
hosts.add(new HostAndPort("192.168.1.128",6002));
hosts.add(new HostAndPort("192.168.1.128",6003));
hosts.add(new HostAndPort("192.168.1.128",6004));
hosts.add(new HostAndPort("192.168.1.128",6005));
hosts.add(new HostAndPort("192.168.1.128",6006));
GenericObjectPoolConfig config=new JedisPoolConfig();
// 最大空闲连接数, 默认8个
config.setMaxIdle(10);
// 最大连接数, 默认8个
config.setMaxTotal(50);
//最小空闲连接数, 默认0
config.setMinIdle(1);
// 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
config.setMaxWaitMillis(2000); // 设置2秒
//对拿到的connection进行validateObject校验
config.setTestOnBorrow(true);
JedisCluster cluster=new JedisCluster(hosts,config);
Map sm=cluster.getClusterNodes();
Set<String> k=sm.keySet();
Iterator<String> ik=k.iterator();
while(ik.hasNext()) {
System.out.println(ik.next());
}
//使用jedisCluster操作redis
cluster.set("test_redis", "my first redis**");
String str = cluster.get("test_redis");
System.out.println(str);
//关闭连接池
//cluster.close();
}
}
分享到:
相关推荐
Redis Cluster 与 Redis Sentinel 都可以实现高可用性,但是 Redis Cluster 可以减少冗余,提高内存利用率。同时,Redis Cluster 也可以实现动态扩容或缩容。 Redis Cluster 是一种高可用、高性能的集群解决方案,...
Redis Cluster 是 Redis 3.0 开始推出的无中心结构集群模式,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接,官方向要求至少 6 个节点才可以保证高可用,即 3 主 3 从。扩展性强、更好做到高可用...
本文将详细介绍RedisCluster集群的架构及原理,并探讨如何通过Spring Data Redis模块实现对Redis Cluster的访问。 ### 1. RedisCluster集群概述 Redis Cluster是Redis官方提供的分布式解决方案,它将数据分片到多...
Redis Cluster 是 Redis 的一个高可用解决方案,通过将多个 Redis 节点组合成集群,提高 Redis 的可用性和性能。 环境准备 在开始部署 Redis Cluster 之前,需要准备 3 台服务器,每台服务器上需要安装 Redis ...
本示例“rediscluster集群demo”旨在展示如何设置和操作一个简单的Redis Cluster实例,确保在本地环境中的正确运行。 首先,Redis Cluster采用无中心架构,每个节点都是对等的,并且负责一部分数据。它通过槽(slot...
总结,Redis Cluster提供了一种强大的分布式缓存解决方案,通过数据分片和主从复制实现高可用和可扩展性。在Java开发中,合理地使用Redis Cluster可以提升应用的性能和稳定性。需要注意的是,理解和掌握其工作原理...
Redis Cluster是Redis的分布式解决方案,它允许用户在多个节点间分散数据,以实现高可用性和水平扩展。在Java中操作Redis Cluster,我们需要了解以下几个关键知识点: 1. **Redis Cluster架构**: Redis Cluster...
Redis Cluster集群是Redis的一个高可用性解决方案,它可以在多个Redis节点之间分配数据和状态,提供高性能和高可用性的数据存储服务。下面是Redis Cluster集群的主要知识点: 1. Redis Cluster架构 Redis Cluster...
为了确保服务的稳定性和可靠性,Redis提供了多种高可用解决方案,其中最常见的是Redis Cluster集群模式以及自定义的手工搭建的缓存框架。下面将对这两个方面进行详细探讨。 ### Redis Cluster集群 Redis Cluster是...
Redis Cluster是Redis官方提供的分布式解决方案,它允许用户在多个节点之间分发数据,提供高可用性和可扩展性。本文将详细解析如何搭建Redis Cluster集群,包括集群的基本概念、配置、节点间通信以及常见问题处理。 ...
Redis Cluster 是Redis提供的分布式解决方案,它可以将数据分散存储在多个节点上,实现数据的自动分片,提供高可用性和水平扩展性。然而,对于想要在JFinal项目中利用Redis Cluster特性的开发者来说,这需要额外的...
描述中提到,JFinal原生只支持Redis的主从集群模式,但不包括Redis的Cluster集群模式。Cluster模式是Redis的一种分布式解决方案,可以将数据分散在多个节点上,提供高可用性和可扩展性。为了解决这个问题,有开发者...
RedisCluster是Redis官方提供的分布式集群解决方案,它通过数据分片技术实现了高可用性和可扩展性。RedisCluster将数据分散在多个节点上,每个节点存储一部分数据,并通过槽(slot)来管理和分配数据。这种方式允许...
"docker 实现redis集群搭建" ...使用 Docker 实现 Redis 集群搭建可以提供高可用性、高扩展性和高性能的 Redis 集群解决方案。使用 Docker 容器化技术,可以轻松地搭建和管理 Redis 集群,提高开发效率和系统稳定性。
Redis Sentinel和Redis Cluster是两种常见的Redis集群解决方案,用于提高Redis数据库的可用性和可扩展性。在本篇文章中,我们将深入探讨这两个系统的工作原理、配置步骤以及它们各自的特点。 首先,让我们了解一下...
Redis Cluster是Redis官方提供的分布式解决方案,它通过将数据分片(sharding)到多个节点来实现高可用性和可扩展性。本资料包包含了对Redis Cluster的运维实践和核心原理的深入剖析,旨在帮助读者理解并掌握如何...
php操作Redis Cluster集群的实例教程涵盖了多个知识点,包括Redis Cluster集群的基本概念、PHP与Redis交互的不同方法以及如何使用Predis库与Redis Cluster集群进行通信。以下是详细介绍: 1. Redis Cluster概述: ...
Redis Cluster 是一种高可用性的分布式存储解决方案,它可以自动检测节点故障并进行故障转移,确保集群的可用性。下面将详细介绍 Redis Cluster 集群故障转移机制的工作原理。 集群故障转移机制 Redis Cluster ...
Redis Cluster是Redis官方提供的分布式集群解决方案,它支持数据的分片(sharding)以及自动故障转移,从而在大型系统中实现高性能、高可用性。在本文中,我们将深入探讨Redis Cluster的基本概念、配置要点以及如何...
Redis Cluster 通过引入一系列的技术创新,如 Master-slave 架构、异步复制、客户端智能路由以及 hashtags 机制等,实现了高性能、可扩展且具有一定数据安全性的分布式存储解决方案。虽然在某些情况下可能存在数据...