2. RedisCluster 2.1 Redis-Cluster简介2.1.1 什么是 Redis-Cluster 为何要搭建 Redis 集群。Redis 是在内存中保存数据的,而我们的电脑一般内存都不大, 这也就意味着 Redis 不适合存储大数据,适合存储大数据的是 Hadoop 生态系统的 Hbase 或者是 MogoDB。Redis 更适合处理高并发,一台设备的存储能力是很有限的,但是多台设备协同合作,就可以让内存增大很多倍,这就需要用到集群。
Redis 集群搭建的方式有多种,例如使用客户端分片、Twemproxy、Codis 等,但从redis 3.0 之后版本支持 redis-cluster 集群,它是 Redis 官方提出的解决方案, Redis-Cluster 采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其 redis-cluster 架构图如下:
客户端与 redis 节点直连,不需要中间 proxy 层.客户端不需要连接集群所有节点连接集群中任何一个可用节点即可。
所有的 redis 节点彼此互联(PING-PONG 机制),内部使用二进制协议优化传输速度和带 宽. 2.1.1 分布存储机制-槽(1) redis-cluster 把所有的物理节点映射到[0-16383]slot 上,cluster 负责维护
node<->slot<->value
(2) Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。 例如三个节点:槽分布的值如下:
2.1.2 容错机制-投票(1)选举过程是集群中所有 master 参与,如果半数以上 master 节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作. 故障节点对应的从节点自动升级为主节点 (2)什么时候整个集群不可用(cluster_state:fail)?
如果集群任意 master 挂掉,且当前 master 没有 slave.集群进入 fail 状态,也可以理解成集群的 slot 映射[0-16383]不完成时进入 fail 状态. 4.2 搭建 Redis-Cluster4.2.1 搭建要求需要 6 台 redis 服务器。搭建伪集群。需 要 6 个 redis 实 例 。 需要运行在不同的端口 7001-7006
4.2.2 准备工作(1)安装 gcc 【此步省略】 Redis 是 c 语言开发的。安装 redis 需要 c 语言的编译环境。如果没有 gcc 需要在线安装。
yum install gcc-c++ (2)使用 yum 命令安装 ruby (我们需要使用 ruby 脚本来实现集群搭建)【此步省略】
yum install ruby yum install rubygems | | | 他平台的 Ruby 语言替代品。Ruby 的作者于 1993 年 2 月 24 日开始编写 Ruby,直至 1995 年 12 月才正 | 式公开发布于 f(j 新闻组)。因为 Perl 发音与 6 月诞生石 pear(l 珍珠)相同,因此 Ruby 以 7 月诞生石 ruby |
file:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AB.tmp.pngfile:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AC.tmp.pngfile:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AD.tmp.png
| | | 他平台的 Ruby 语言替代品。Ruby 的作者于 1993 年 2 月 24 日开始编写 Ruby,直至 1995 年 12 月才正 | 式公开发布于 f(j 新闻组)。因为 Perl 发音与 6 月诞生石 pear(l 珍珠)相同,因此 Ruby 以 7 月诞生石 ruby |
file:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AE.tmp.pngfile:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71BF.tmp.png(3)将 redis 源码包上传到 linux 系统 ,解压 redis 源码包
(4)编译 redis 源码 ,进入 redis 源码文件夹 make
看到以下输出结果,表示编译成功
(5)创建目录/usr/local/redis-cluster 目录 安装 6 个 redis 实例,分别安装在以下目录
/usr/local/redis-cluster/redis-1
/usr/local/redis-cluster/redis-2
/usr/local/redis-cluster/redis-3
/usr/local/redis-cluster/redis-4
/usr/local/redis-cluster/redis-5
/usr/local/redis-cluster/redis-6
以第一个 redis 实例为例,命令如下 make install PREFIX=/usr/local/redis-cluster/redis-1
出现此提示表示成功,按此方法安装其余 5 个 redis 实例 (6)复制配置文件 将 /redis-3.0.0/redis.conf 复制到 redis 下的 bin 目录下 [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-1/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-2/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-3/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-4/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-5/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-6/bin
|