Java之品优购部署_day01(8)

2. RedisCluster2.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 架构图如下:


Java之品优购部署_day01(8) 

客户端与 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 会根据节点数量大致均等的将哈希槽映射到不同的节点。

例如三个节点:槽分布的值如下:

SERVER1:

0-5460

SERVER2:

5461-10922

SERVER3:

10923-16383


2.1.2 容错机制-投票

(1)选举过程是集群中所有 master 参与,如果半数以上 master 节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作. 故障节点对应的从节点自动升级为主节点

(2)什么时候整个集群不可用(cluster_state:fail)?

如果集群任意 master 挂掉,且当前 master 没有 slave.集群进入 fail 状态,也可以理解成集群的 slot 映射[0-16383]不完成时进入 fail 状态.

Java之品优购部署_day01(8)

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,一种简单快捷的面向对象面向对象程序设计脚本语言,在 20 世纪 90 年代由日本人*

(Yukihiro Matsumoto)开发,遵守 GPL协议和 Ruby License。它的灵感与特性来自于 PerlSmalltalkEiffel

Ada以及 Lisp语言。由 Ruby 语言本身还发展出了 JRuby(Java 平台)、IronRuby(.NET平台)等其

他平台的 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,一种简单快捷的面向对象面向对象程序设计脚本语言,在 20 世纪 90 年代由日本人*

(Yukihiro Matsumoto)开发,遵守 GPL协议和 Ruby License。它的灵感与特性来自于 PerlSmalltalkEiffel

Ada以及 Lisp语言。由 Ruby 语言本身还发展出了 JRuby(Java 平台)、IronRuby(.NET平台)等其

他平台的 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

看到以下输出结果,表示编译成功


Java之品优购部署_day01(8) 

(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

Java之品优购部署_day01(8) 

出现此提示表示成功,按此方法安装其余 5 个 redis 实例

(6)复制配置文件        将 /redis-3.0.0/redis.conf 复制到 redis 下的 bin 目录下

[[email protected] redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-1/bin [[email protected] redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-2/bin [[email protected] redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-3/bin [[email protected] redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-4/bin [[email protected] redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-5/bin

[[email protected] redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-6/bin