共计 6389 个字符,预计需要花费 16 分钟才能阅读完成。
这是 Redis 集群介绍的上篇,主要是关于 Redis 集群的搭建。后续将为大家介绍 Redis 集群的常用命令、Java 操作 Redis 集群、以及与 Spring/Spring MVC 的整合等知识。
Redis 集群搭建
要想搭建一个最简单的 Redis 集群,那么至少需要 6 个节点:3 个 Master 和 3 个 Slave。为什么需要 3 个 Master 呢?如果你了解过 Hadoop/Storm/Zookeeper 这些的话,你就会明白一般分布式要求基数个节点,这样便于选举(少数服从多数的原则)。
wKioL1i21R7wulddAAApTTxpreM283.png
这里,我将采用一种“偷懒”的方式,在一个 Linux 虚拟机上搭建 6 个节点的 Redis 集群。(因为开启 6 个 Linux 虚拟机,我的电脑完全扛不住)
实际上,思路很简单,我将在一台节点上开启 6 个 Redis 实例,并且这 6 个 Redis 各自有自己的端口。这样的话,相当于模拟出了 6 台机器了。然后在以这 6 个实例组建 Redis 集群就可以了。
第一步:为这 6 个实例创建好各自存放的目录
第二步:既然是要启动 6 个 Redis 实例,自然需要准备各自的配置文件
具体来说,需要注意下:由于在一台机器(192.168.99.121)上,因此每个实例应该有不同的端口;同时,每个实例显然会有自己的存放数据的地方;开启 AOF 模式;开启集群配置;开启后台模式;
第三步:实际上,Redis 集群的操作在后文你可以看到是通过 Ruby 脚本来完成的,因此我们需要安装 Ruby 相关的 RPM 包,以及 Redis 和 Ruby 的接口包。
第四步:让 Redis 集群工作起来!
接下来,我们要通过 Ruby 脚本来创建集群了。
[root@mydream121 bin]# ./redis-trib.rb create –replicas 1 192.168.99.121:8001 192.168.99.121:8002 192.168.99.121:8003 192.168.99.121:8004 192.168.99.121:8005 192.168.99.121:8006
首先,我们来看一下创建集群命令中 –replicas 1,这个代表什么意思呢?1 其实代表的是一个比例,就是主节点数 / 从节点数的比例。那么想一想,在创建集群的时候,哪些节点是主节点呢?哪些节点是从节点呢?答案是将按照命令中 IP:PORT 的顺序,先是 3 个主节点,然后是 3 个从节点。这一点可以通过上面的 2 张图片印证。
其次,注意到图中 slot 的概念。slot 对于 Redis 集群而言,就是一个存放数据的地方,就是一个槽。对于每一个 Master 而言,会存在一个 slot 的范围,而 Slave 则没有。在 Redis 集群中,依然是 Master 可以读、写,而 Slave 只读。数据的写入,实际上是分布的存储在 slot 中,这和以前 1.X 的主从模式是不一样的(主从模式下 Master/Slave 数据存储是完全一致的),因为 Redis 集群中 3 台 Master 的数据存储并不一样。这一点将在后续的实验中得到验证。
第五步:验证 Redis 集群搭建是否成功
到这里,Redis 集群的搭建就完毕了,See U~
下面关于 Redis 的文章您也可能喜欢,不妨参考下:
Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm
Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm
CentOS 7 下 Redis 的安装与配置 http://www.linuxidc.com/Linux/2017-02/140363.htm
Ubuntu 14.04 安装 Redis 与简单配置 http://www.linuxidc.com/Linux/2017-01/139075.htm
Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm
Redis 单机 & 集群离线安装部署 http://www.linuxidc.com/Linux/2017-03/141403.htm
CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm
Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm
Ubuntu 15.10 下 Redis 集群部署文档 http://www.linuxidc.com/Linux/2016-06/132340.htm
Redis 实战 中文 PDF http://www.linuxidc.com/Linux/2016-04/129932.htm
Redis 热迁移实战总结 http://www.linuxidc.com/Linux/2017-02/141083.htm
Redis3.0 配置文件详解 http://www.linuxidc.com/Linux/2017-03/141369.htm
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/141683p2.htm
Redis 集群操作实践
数据的分布性
从上面的操作,你可以看到,当存储某一个数据的时候,会分配一个 slot,而这个 slot 从属于某一个 Master,也就是说你需要明白,数据是分布的存储在 Redis 集群当中的。
在线水平扩容
Redis Cluster 有一个非常重要的特点就是可以在线的添加节点,实现不影响业务的水平扩容。在这里,我将会在原来 6 个 redis 节点上,再添加 2 个 redis 节点。做法和以前一致,注意修改 redis.conf,然后在启动 8007、8008 这 2 个 redis 实例。
其实,目前虽然启动了新加的 2 个 redis 实例,但是它们是不属于集群的。下面,我们来让它们加入集群中。
./redis-trib.rb add-node 192.168.99.121:8007 192.168.99.121:8006
./redis-trib.rb add-node 新节点 集群中已经存在的节点
在往集群中添加节点 A 的时候,需要提供一个在集群中已经存在的节点 B 的信息。因为知道了 B 的信息,就知道了整个集群的信息。为什么这么说呢,来,我们看一个文件,你就知道了。
要知道集群中的每一个节点都有这么一个文件,存储着集群中每一个节点的信息: 节点的角色、节点的 ID、连接状态、slot 范围、IP/PORT 信息等。仔细观察图中,你可以发现,新加入的 8007 节点,实际上被默认为 master 节点,并且没有 slot 分配!这说明,新加入的节点现在还不可以存储数据,因此我们要为新节点分配 slot 槽。
[root@mydream121 bin]# ./redis-trib.rb reshard 192.168.99.121:8001
要知道 slot 都分配在 master 上,因此其实我们要做的就是从集群的 masters 上进行重新分配。上面的命令需要指定一个 master 节点进行 reshard 分片。
图中要为新加入的节点 8007 分配 500 个 slot, 而且分配的方式是 ”all”,all 是什么意思呢?all 代表从已经存在的所有的 master 上均匀的分配一部分 slot 给 8007。当然你可以通过 ”done” 来指定某一个 master 进行分配。注意分配给 8007 是通过节点 ID 来指定的。
按照上面的操作,我将 8008 节点也加入集群中,我的想法是让 8008 成为 8007 的从节点。既然是从节点,就不需要分配 slot 槽。注意到 add-node 方式加入的节点,默认就是 master 节点,因此这里我们得利用 replicate 指定主节点。
[root@mydream121 bin]# ./redis-trib.rb add-node 192.168.99.121:8008 192.168.99.121:8001
那么到现在,我们就在线完成了对 Redis 集群的水平扩容。那么如何删除节点呢?删除节点时,数据怎么办呢?对于从节点,删除就删除了,并不要紧,关键是主节点,因为主节点上有 slot。因此,在删除主节点前,我们要对主节点的 slot 进行重新分配,完成数据的迁移。这里我就不再演示了,直接给出命令。
2 删除主节点:先 reshard + 后 del-node
删除从节点:直接 del-node
Redis 实现 Session 共享
Redis 可以被用于 Session 共享,不过现在 CAS 实现单点登录更容易些。(CAS 以后为大家介绍)
不论是 Nginx 挂了,还是其中的 Tomcat 挂掉,都不会丢失 Session 信息。在实现上,有现成的插件,比如:https://github.com/jcoleman/tomcat-redis-session-manager
Java 操作 Redis
在单机 Redis 环境:Jedis
这个没什么好说的,就是给定 IP/PORT 实例化 Jedis 操作即可。
Jedis jedis = new Jedis(“192.168.99.121”, 8001);
在多台 Redis 环境:ShardedJedis+ShardedJedisPool
这是一种切片的方式来操作 redis, 通过 hash 而均匀的分配到 pool 里的 redis 机器中。
在 Redis 集群环境:JedisCluster
与 Spring 整合
我们直接来看配置文件吧!
同上文 Java 操作 Redis 集群的代码对比下,其实 XML 就是代码的映射。只不过通过 spring 的方式,帮助我们配置生成了一个 bean:redisCluster。我们可以通过注入的方式得到 redisCluster,然后我们想干啥就可以干啥,就这么简单~
到这里,redis 集群部分整个就结束了。
Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/141683.htm
这是 Redis 集群介绍的上篇,主要是关于 Redis 集群的搭建。后续将为大家介绍 Redis 集群的常用命令、Java 操作 Redis 集群、以及与 Spring/Spring MVC 的整合等知识。
Redis 集群搭建
要想搭建一个最简单的 Redis 集群,那么至少需要 6 个节点:3 个 Master 和 3 个 Slave。为什么需要 3 个 Master 呢?如果你了解过 Hadoop/Storm/Zookeeper 这些的话,你就会明白一般分布式要求基数个节点,这样便于选举(少数服从多数的原则)。
wKioL1i21R7wulddAAApTTxpreM283.png
这里,我将采用一种“偷懒”的方式,在一个 Linux 虚拟机上搭建 6 个节点的 Redis 集群。(因为开启 6 个 Linux 虚拟机,我的电脑完全扛不住)
实际上,思路很简单,我将在一台节点上开启 6 个 Redis 实例,并且这 6 个 Redis 各自有自己的端口。这样的话,相当于模拟出了 6 台机器了。然后在以这 6 个实例组建 Redis 集群就可以了。
第一步:为这 6 个实例创建好各自存放的目录
第二步:既然是要启动 6 个 Redis 实例,自然需要准备各自的配置文件
具体来说,需要注意下:由于在一台机器(192.168.99.121)上,因此每个实例应该有不同的端口;同时,每个实例显然会有自己的存放数据的地方;开启 AOF 模式;开启集群配置;开启后台模式;
第三步:实际上,Redis 集群的操作在后文你可以看到是通过 Ruby 脚本来完成的,因此我们需要安装 Ruby 相关的 RPM 包,以及 Redis 和 Ruby 的接口包。
第四步:让 Redis 集群工作起来!
接下来,我们要通过 Ruby 脚本来创建集群了。
[root@mydream121 bin]# ./redis-trib.rb create –replicas 1 192.168.99.121:8001 192.168.99.121:8002 192.168.99.121:8003 192.168.99.121:8004 192.168.99.121:8005 192.168.99.121:8006
首先,我们来看一下创建集群命令中 –replicas 1,这个代表什么意思呢?1 其实代表的是一个比例,就是主节点数 / 从节点数的比例。那么想一想,在创建集群的时候,哪些节点是主节点呢?哪些节点是从节点呢?答案是将按照命令中 IP:PORT 的顺序,先是 3 个主节点,然后是 3 个从节点。这一点可以通过上面的 2 张图片印证。
其次,注意到图中 slot 的概念。slot 对于 Redis 集群而言,就是一个存放数据的地方,就是一个槽。对于每一个 Master 而言,会存在一个 slot 的范围,而 Slave 则没有。在 Redis 集群中,依然是 Master 可以读、写,而 Slave 只读。数据的写入,实际上是分布的存储在 slot 中,这和以前 1.X 的主从模式是不一样的(主从模式下 Master/Slave 数据存储是完全一致的),因为 Redis 集群中 3 台 Master 的数据存储并不一样。这一点将在后续的实验中得到验证。
第五步:验证 Redis 集群搭建是否成功
到这里,Redis 集群的搭建就完毕了,See U~
下面关于 Redis 的文章您也可能喜欢,不妨参考下:
Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm
Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm
CentOS 7 下 Redis 的安装与配置 http://www.linuxidc.com/Linux/2017-02/140363.htm
Ubuntu 14.04 安装 Redis 与简单配置 http://www.linuxidc.com/Linux/2017-01/139075.htm
Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm
Redis 单机 & 集群离线安装部署 http://www.linuxidc.com/Linux/2017-03/141403.htm
CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm
Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm
Ubuntu 15.10 下 Redis 集群部署文档 http://www.linuxidc.com/Linux/2016-06/132340.htm
Redis 实战 中文 PDF http://www.linuxidc.com/Linux/2016-04/129932.htm
Redis 热迁移实战总结 http://www.linuxidc.com/Linux/2017-02/141083.htm
Redis3.0 配置文件详解 http://www.linuxidc.com/Linux/2017-03/141369.htm
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/141683p2.htm