1.Redis分布式缓存的实现模式
Redis一开始并不支持分布式的,从Redis3.0后才开始支持Redis分布式缓存。可以从三种不同的方式来搭建Redis分布式缓存系统。
1)客户端分片
这种方案将分片工作放在业务程序端,程序代码根据预先设置的路由规则,直接对多个Redis实例进行分布式访问。它的好处是实现方法和代码都自己可控,可随时调整,不足之处是这实际上是一种静态分片技术。Redis实例的增减,都得手工调整分片程序。
2)代理分片
这种方案,将分片工作交给专门的代理程序来做。代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给 业务程序。这种机制下,一般会选用第三方代理程序(而不是自己研发),因为后端有多个Redis实例,所以这类程序又称为分布式中间件。目前有一些框架专门来做代理分片的,如国内的Codis。
3)Redis Cluster(Redis 3.0 以上的版本才支持)
在这种机制下,没有中心节点(和代理模式的重要不同之处)。 Redis Cluster将所有Key映射到16384个Slot中,集群中每个Redis实例负责一部分,业务程序通过集成的Redis Cluster客户端进行操作。客户端可以向任一实例发出请求,如果所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。
2.Redis分布式缓存基础
1.TCP Ports
每个Redis节点使用两个端口,一个提供对外服务端口,默认6379,另一个用于集群间同步数据通知,端口号是在对外服务端口上加10000,即默认为16379. 每一个节点都需要知道其他节点的情况,这里就包括其他节点负责处理哪些键值对。这也就是客户端向任一实例发出请求,如果所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。
2.数据分片(Sharding)
所有key 分布在16384个hash slot上,数据分组及迁移都是以hash slot为单位。使用CRC16算法计算一个key应该落在哪个hash slot上。
Redis集群采用的是hash slot分片来完成的。例如:
Node A contains hash slots from 0 to 5500.
Node B contains hash slots from 5501 to 11000.
Node C contains hash slots from 11001 to 16384.
3.主从模式(Master-Salve)
Redis cluster的拓扑结构,由3个以上Master节点形成数据分片集群,覆盖所有16384个hash slots, 数据只能在Master节点间以slot为单位迁移。
每个Master可以有多个replica节点(即slave), 以防灾备,当master宕机时,集群会通过选举晋升这个master的一个slave节点变为master, 继续提供服务。master宕机可能会丢失写的数据。因为master在接收请求处理完后会立即返回客户端,master如果在同步到slave之前就down了,就会lose write.(机制决定,不可避免)。
4.Redis Cluster失效
在下面的两种情况下,Redis Cluster就失败,即不对外提供服务了。
1)如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态。
2)如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态。
5.Redis Cluster 数据迁移
Redis支持在线进行数据迁移。Redis默认的slave节点是不支持写操作的,我们需要修改它的配置
#slave-read-only yes
slave-read-only no
创建一个新的Redis的实例,执行命令salveof redis节点IP地址,即开始进行数据同步了。通过查询命令info来查询同步是否完成,完成之后,就可以将其提升为Master节点了。
6.客户端框架
从官方网站上看,Redis目前有很多客户端框架,在Java中,目前用得比较多的是Spring Data Redis和Jedis。
3.安装步骤
1)安装依赖包
yum -y install gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel gcc-c++ automake autoconf
上面的包必须在之前就安装好,否则安装ruby,rubygem时就会报错(即安装ruby,rubygem时依赖上面的包)。
下载ruby, rubygem的源码包并安装它们。
tar -xvzf ruby-2.2.1.tar.gz
cd ruby-2.2.1
./configure -prefix=/usr/local/ruby
make
make install
cp ruby /usr/local/bin
tar -xvzf rubygems-2.4.6.tgz
cd rubygems-2.4.6
ruby setup.rb
cp bin/gem /usr/local/bin
下载redis-3.2.1.gem(这个是用于创建redis集群时用到),然后执行下面的命令:
gem install -l ./redis-3.2.1.gem (在官网上打不开链接,可以到百度上去搜索下载的地方)
至此,所有的基础环境就安装好,下面就是安装Redis源码包了。
2)安装Redis-3.0.4
下载redis的源码包: wget http://download.redis.io/releases/redis-3.0.4.tar.gz
解压源码包: tar xzvf redis-3.0.4.tar.gz
编译: make
安装:make install (root权限下安装)
安装完后,对redis.conf进行配置(redis.conf就是在解压redis包下可以找到)
按照官网的示例来配置(http://www.redis.io/topics/cluster-tutorial)
port 7000 //每个Redis实例的商品必须是唯一的
cluster-enabled yes //支持集群
cluster-config-file nodes.conf //nodes.conf这个文件不用我们去编辑
cluster-node-timeout 5000
appendonly yes
3)创建多个Redis实例
上面的步骤只是创建了一个Redis实例,我们需要创建Redis多个实例,即是集群。
#这里仅在一个VM中建立多个实例。
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
上面安装的目录是在7000下,后面的工作就是将7000目录下的redis实例复制到7001,7002,7003,7004,7005目录下。唯一要改的就是redis.conf中的port,分别改成7001,7002,7003,7004,7005。
进入到7000~7005目录下,启动Redis实例:redis-server ./redis.conf
通过查看redis实例进程,可以发现它们都启动了。
现在真正来创建Redis集群了,通过下面的的命令来完成:
./redis-trib.rb create --replicas 1 172.30.2.74:7000 172.30.2.74:7001 172.30.2.74:7002 172.30.2.74:7003 172.30.2.74:7004 172.30.2.74:7005
其中:--replicas 1 表示每个实例都有一个Salve节点,在这里,是3个Master节点,3个Salve节点。
Redis分布式集群创建好了,下面进行测试。这里通过redis-cli 客户端命令进行测试。
可以连接任何一个Redis节点,如果想存放一个数据,如果此时它存储的地方并不是当前节点上,它会自动引导到对应的redis节点上存储,此时会发送一个重定向的命令。
分享到:
相关推荐
Redis分布式集群配置文档 Redis是一种基于内存的NoSQL数据库,它支持数据持久化、事务、LUA脚本、管道、发布/订阅、消息队列等功能。为了提高Redis的可靠性和可扩展性,需要对其进行分布式集群配置。本文档将详细...
"Redis分布式集群部署安装及细节" 一、Redis集群介绍 Redis集群是一种分布式的NoSQL数据库解决方案,它可以将多个Redis节点组合成一个集群,以提高数据存储和检索的性能和可用性。Redis集群支持自动发现节点、...
在本文中,我们将详细讨论如何在CentOS 7环境下配置一个由三台主机组成的Redis分布式集群,每台主机上都有一个主节点和一个从节点,总计六个节点。这个过程涵盖了安装Redis、创建服务、配置集群、启动集群以及测试...
【Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式】 这门课程是针对Java开发者设计的,旨在提升他们的企业级项目架构能力,特别是聚焦于Tomcat集群和Redis分布式缓存的应用。课程内容丰富,适合希望晋升...
redis从3.0开始支持集群功能。redis集群采用无中心节点方式实现,无需proxy代理,客户端直接与redis集群的每个节点连接,根据同样的hash算法计算出key对应的slot,然后直接在slot对应的redisj节点上执行命令。在...
本教程将深入探讨如何在SpringBoot应用中实现基于Redis的分布式锁。 首先,Redis之所以常被用作分布式锁的实现,是因为其具有以下优点: 1. **高可用性**:Redis支持主从复制,可以确保在单点故障时仍有服务可用。...
### Redis 3 分布式集群部署详解 #### 一、Redis 概述 Redis (Remote Dictionary Server) 是一款开源的高性能键值对数据库。它以其卓越的性能和灵活性,在多种应用场景中发挥着重要作用,比如缓存、消息队列等。...
本文将深入探讨Redis分布式缓存的原理、应用及其优势。 分布式缓存是解决大型互联网应用高并发访问和大数据量存储问题的关键技术之一。Redis凭借其内存存储特性、丰富的数据结构以及高效的命令操作,成为了业界首选...
实验结果表明,Redis分布式缓存的吞吐率与集群规模有较好的线性关系,所提出的方法能够较好地解决Hadoop任务对共享数据的访问问题。 下面是相关的知识点: 1. 分布式缓存技术:分布式缓存技术是指将数据缓存在多个...
Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式,下载绝对值得,里边干活多多
redis分布式缓存+spring整合及 集群、分片等配置使用例子
综上所述,这个压缩包提供的Redis分布式锁工具包为Java开发者提供了一种简单、高效的方法来解决分布式环境下的锁问题,特别适合于处理高并发的快应用和企业级应用。通过集成到Spring工程中,开发人员可以利用Redis的...
本文将详细介绍如何使用`redis-3.0.0.tar.gz`和`redis-3.0.0.gem`这两个文件来搭建Redis分布式集群。 首先,我们需要了解Redis集群的基本概念。Redis集群采用无中心结构,每个节点都是平等的,可以存储部分数据,...
在实际应用中,还可以通过集群模式进一步提高 Redis 的可用性和性能,或者利用持久化机制(如 RDB 和 AOF)来保障数据安全。 在使用 Redis 作为分布式缓存时,开发者通常会结合编程语言的客户端库进行交互,例如...
Redis Cluster 是一个分布式数据存储解决方案,它允许将数据分散存储在多个节点上,以实现高可用性和可扩展性。在Redis Cluster中,每个节点都存储一部分数据,并且可以通过内部的槽映射机制来管理和处理客户端的...
### Redis 3.0.2 分布式集群安装手册 #### 一、Redis Cluster 介绍 Redis Cluster 是 Redis 3.0 引入的一项新功能,它提供了原生的集群能力,使得 Redis 能够更好地支持高并发环境下的数据存储需求。通过 Redis ...
在本实验中,我们将深入探讨如何搭建和配置Redis分布式数据库集群。Redis,全名Remote Dictionary Server,是一款开源的、高性能的键值存储系统,广泛应用于缓存、消息队列、数据库等多个场景。分布式数据库集群是...
redis-3.0.0.tar.gz、redis-3.0.0.gem 、工具类、测试代码搭建Redis集群所需要的文件,redshift-1.12.tar.gz,redis图形化界面,window版redis,secureCRT注册机,HttpClient 4.3教程.pdf。
Redis 分布式锁是分布式系统中解决并发问题的重要工具,尤其在高并发的微服务架构中,它扮演着至关重要的角色。本资料包主要探讨了如何利用 Redis 实现分布式锁和信号量,以确保系统的一致性和数据完整性。 首先,...