`

redis cluster集群实现高可用

阅读更多
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高可用集群Redis Cluster搭建

    Redis高可用集群Redis Cluster搭建

    redis高可用笔记,包括RedisCluster集群方式和完全纯手写Redis缓存框架

    redis高可用笔记

    docker+redis-cluster集群

    使用虚拟化技术docker+nosql数据库的redis数据库集群实现高可用方案

    redis cluster集群部署文档(Linux)

    一个比较全的redis cluster的部署文档,介绍在linux环境中下载、安装redis,配置各个节点,并最终形成集群,本人已用该文档在多套环境中进行部署,真实可用

    Redis 3.x 分布式集群搭建.pdf

    redis从3.0开始支持集群功能。redis集群采用无中心节点方式实现,无需proxy代理,客户端...一旦有主节点发生故障的时候,Redis Cluster可以选举出对应的从结点成为新的主节点,继续对外服务,从而保证服务的高可用性.

    Redis官方Cluster搭建配置步骤详解

    Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。 Redis集群并 不支持处理多个keys... 本文,是我自己写的Redis Cluster集群搭建和配置详细步骤,包含了常用的Redis配置文件,和节点的管理等,以供大家参考.

    rediscluster高可用.zip

    rediscluster高可用集群搭建手册,从0 到1 完美的实现 redis集群搭建 redis5种数据类型

    18. 【实战】重新搭建一套读写分离+高可用+多master的redis cluster集群

    redis cluster: 自动实现master+slave复制和读写分离,master+slave高可用和主备切换,支持多个master的hash slot,支持数据分布式存储 下面搭建过程基于master + 多slave,实际上生产环境中redis cluster读写都是...

    Redis Cluster集群数据分片机制原理

    Redis Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。 ...

    rediscluster配置文件.zip

    6389为6379的从节点,6390为6380的从节点,6391为6381的从节点。三主三从,下载完了修改bind dir masterauth cluster

    2019年 Redis从入门到高可用 分布式实战教程

    Redis从入门到高可用 分布式实战教程,共140多节课程、 掌握redis主从、哨兵、集群 ,参数调优 目录: 9-9 原生安装-1.准备节点.mp4 9-8 原生安装.mp4 9-7 基本架构.mp4 9-6 虚拟槽哈希分布.mp4 9-5 一致性...

    Redis三主三从集群(Cluster)搭建

    Redis三主三从集群(Cluster)搭建,简洁明了,按步聚操作即可。 Redis-Cluster采用无...一旦有主节点发生故障的时候,Redis Cluster可以选举出对应的从节点成为新的主节点,继续对外服务,从而保证服务的高可用性。

    Redis安装 集群 哨兵

    本资源整理了Redis的集群安装,是一份最详细的安装手册,内部包含了详细的安装步骤,以及可能出现的问题解决方法,比如:ClassNotFoundException: redis.clients.jedis.Jedis,以及...的原因及解决方法。...

    Redis cluster集群的介绍

    前者主要是为了高可用或是读写分离,后者为了更好的存储数据,负载均衡。 redis集群提供了以下两个好处 1、将数据自动切分(split)到多个节点 2、当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。 一...

    redis安装集群部署

    Redis 是我们目前大规模使用的缓存中间件,由于它强大...单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使用Redis集群。本文参考了Rdis的官方文档和使用Redis官方提供的Redis Cluster工具搭建Rdis集群。

    redis集群所需要的 json_pure

    redis集群所需要的 json_pure,centos7亲测可用,redis部署见详细博文

    "优雅的SSM框架"进行完善(页面分离+nginx负载均衡+tomcat集群)

    Redis Cluster集群高可用方案 Druid(数据源配置 sql防注入 sql性能监控) 前后端分离(Html替代Jsp) Nginx静态加载、负载均衡 基于keepalived的nginx高可用方案 Tomcat集群(Redis共享Session) Sping Shiro权限...

    ubuntu 14.04 ambari平台集成redis集群

    ubuntu 14.04 ambari平台集成redis集群 亲测可用~ 内部附件部署文档和拆安源代码 ambari版本 2.5.2 HDP版本 2.6.2.0 redis版本4.4.0

    Redis 集群搭建手册

    Redis 是我们目前大规模使用的缓存中间件,由于它强大...单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使用Redis集群。本文参考了Rdis的官方文档和使用Redis官方提供的Redis Cluster工具搭建Rdis集群。

    redis集群模式例子,三主三从,非常简单

    高性能、高可用,有效解决了Redis分布式需求 缺点 不支持原子操作:在Redis集群中,不同节点之间的数据访问会出现延迟,因此不支持原子操作,可能会导致数据的不一致性。 需要配置复杂:Redis集群需要配置投票数...

Global site tag (gtag.js) - Google Analytics