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分布式集群部署安装及细节,步骤详细,内容真实有效。
Centos7 分布式集群部署,安装、创建服务、配置集群、启动集群、测试
redis从3.0开始支持集群功能。redis集群采用无中心节点方式实现,无需proxy代理,客户端直接与redis集群的每个节点连接,根据同样的hash算法计算出key对应的slot,然后直接在slot对应的redisj节点上执行命令。在...
SpringBoot基于redis的分布式锁,有word使用文档,根据文档配置即可使用
Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式,下载绝对值得,里边干活多多
redis分布式缓存+spring整合及 集群、分片等配置使用例子
redis3分布式集群部署。已搭建成功
第1章 课程介绍【购买套餐更划算】本章首先会对一期成果进行回顾、然后确定本次进阶课程的演进目标以及进阶课程的内容安排。然后会介绍课程使用各种技术版本,以方便大家
上图蓝色为redis集群的节点。节点之间通过ping命令来测试连接是否正常,节点之间没有主区分,连接到任何一个节点进行操作时,都可能会转发到其他节点。节点之间会定时的互相发送ping命令,测试节点的健康状态,当...
本文将带你详细了解如何使用Java来操作Redis分布式集群,提高数据处理的能力。 Redis集群 集群定义:Redis集群是一种将数据分散保存在多个Redis实例中的技术,这让Redis能够处理更多的数据。 集群优势:分布式集群...
实验(四) Redis分布式数据库集群搭建与配置.rar
Redis3.0.2 分布式集群安装详细步骤
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存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。...
Redis分布式锁在实现跨进程、跨机器的互斥访问时,虽功能强大,但也存在一些常见问题。这些问题主要源于网络延迟、系统时钟误差以及Redis自身的特性。 一个典型问题是锁的"死锁"现象,即因进程意外终止或网络故障,...
redis安装包 1.NOSQL数据库入门 2.NoSQL精粹 3.Redis新手入门详解 4.《Redis实战》红丸出品 ...9.redis深入研究及大集群实战经验 10.Redis 的安装配置介绍 12.Redis 的安装配置 等等 helloredis 例子源码
本文详细描述了Redis Cluster 的搭建过程,每一步都详细描述,之后对一些集群常见操作命令每一个都进行了实验及效果展示,一步到位
前期考虑的方案有采用ZooKeeper分布式任务,Quartz分布式任务调度,但是由于Zookeeper需要增加额外组件,Quartz需要增加表,并且项目中现在已经有Redis这一组件存在,所以考虑采用Redis分布式锁的情况来完成分布式任务...