A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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 会根据节点数量大致均等的将哈希槽映射到不同的节点。
例如三个节点:槽分布的值如下:

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 状态.
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

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



(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






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马