一.Redis集群理论基础

redis-cluster架构

1)redis-cluster架构的结构:

Redis集群使用redis-cluster架构,redis-cluster架构的原理是,部署多个Redis数据库,每个Redis数据库都是一个架构中的结点,每个结点和其他所有结点相连,即若使用n个Redis数据库搭建一个redis-cluster架构的Redis集群,那么这个集群中的每个数据库都要和连接集群中的其余n-1个数据库连接。
redis-cluster架构的Redis集群所需的结点(Redis数据库)的最小数量为3个。
redis-cluster架构示意图如下所示:

Redis集群中各个结点相互连接,应用客户端只需要与集群中的一个数据库连接即可使用整个集群

2)redis-cluster架构的查错机制

redis-cluster架构通过投票机制进行错误排查,投票机制:集群中的所有结点相互连接,每个结点都会检测与其他结点的连接情况,如果连接出现问题,所有的结点一起产生一个错误报告,和其他结点都不能连接的结点就是出错结点,确认出错结点后,集群会停止运行

3)redis-cluster架构其他细节:

  1. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
  2. 节点的fail是通过集群中超过半数的节点检测失效时才生效
  3. 客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
  4. redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster
    负责维护连接:node<—->slot<—–>value

3)redis-cluster架构给结点分配存储数据的方式:

Redis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对哈希槽的槽数16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据结点数量大致均等的将哈希槽映射到不同的节点

例如下图所示,由3个结点组成的Redis集群,存储数据的分工方式为:结点1存储哈希值在0-5000内的数据,结点2存储哈希值在5001-10000内的数据,结点3存储哈希值在10001-16383内的数据

存储key为Hello1的数据时,通过crc16算法算出Hello1的哈希值为1500,则这条数据存储在结点1上,存储数据Hello3,哈希值为7500,存储到结点2上。以此类推,将数据一个个读取并分配到这3个结点上

二.Redis集群的搭建

Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。因此,一个Redis集群至少需要6台服务器。由于没有足够的服务器,所以这里我选择搭建一个伪分布式集群,即使用一台虚拟机运行6个Redis实例,通过修改Redis的端口号为7001-7006区分不同的结点。

2.1 准备Redis集群需要的环境

搭建Redis集群需要用到rudy语言编写的脚本,所以要先准备rudy的运行环境

1)准备rudy的运行环境

安装ruby,使用yum,执行以下命令:

yum install ruby      //ruby语言解释器,功能类似jdk
yum install rubygems  //ruby的包管理器

2)安装rudy脚本运行需要使用的第三方库redis-3.0.0.gem

redis-3.0.0.gem是ruby语言操作Redis数据库时需要使用到的库文件,可以从这里下载:Redis集群搭建,上传到虚拟机后,执行安装命令:

gem install redis-3.0.0.gem

2.2 Redis集群搭建

1)准备Redis应用

搭建一个Redis集群理论上最少需要3个Redis程序,实际使用的过程中,一般会给每个Redis配置一台备份机,所以规模最小的Redis集群应该用有6个Redis程序。

搭建方法:将Redis应用程序做部分修改后复制6份到redis-cluster目录下,组件集群,Redis安装参考博客: Redis-01-NoSQL简介及Redis数据库安装

如上图所示,bin目录即一个Redis应用目录,需要做部分修改使Redis应用符合搭建集群的条件:

  1. 删除dump.rdb文件
  2. 将文件中cluster-enabled yes前的注释去掉

去掉cluster-enabled yes 的注释“#”

复制修改好的Redis程序,共复制6分,执行命令:

cp redis/bin redis-cluster/redis_01
cp redis/bin redis-cluster/redis_02
cp redis/bin redis-cluster/redis_03
cp redis/bin redis-cluster/redis_04
cp redis/bin redis-cluster/redis_05
cp redis/bin redis-cluster/redis_06

6个Redis程序准备好后还需要将其端口调整一下,修改Redis根目录下的redis.conf文件,将端口分别修改为7001-7006

2)启动Redis集群

启动集群需要逐个启动每个Redis数据库,连续执行多条命令,非常麻烦,这里介绍一个简单的方法,将启动所有6台Redis数据库的命令写到一个脚本文件中,并给予该脚本可执行权限,这样每次需要开启集群时只需要执行该脚本文件即可,不必再输入多条命令。

第一步:创建脚本文件

执行命令如下命令创建脚本文件:

vim start-all.sh

第二步:复制命令到文件中

将如下内容复制到刚创建的文件中,这些是开启6台Redis需要运行的命令

cd redis_01
./redis-server redis.conf
cd ..
cd redis_02
./redis-server redis.conf
cd ..
cd redis_03
./redis-server redis.conf
cd ..
cd redis_04
./redis-server redis.conf
cd ..
cd redis_05
./redis-server redis.conf
cd ..
cd redis_06
./redis-server redis.conf
cd ..

第三步:给予脚本文件可执行权限

刚创建的文件虽然是.sh可执行文件,但是没有用户给其执行权限他还是不能执行的,运行如下命令给予该文件可执行权

chmod u+x start-all.sh 

即chmod u+x 加上文件名

使用相同的方法创建关闭集群的脚本文件shutdownall.sh,内容如下:

redis01/redis-cli -p 7001 shutdown
redis01/redis-cli -p 7002 shutdown
redis01/redis-cli -p 7003 shutdown
redis01/redis-cli -p 7004 shutdown
redis01/redis-cli -p 7005 shutdown
redis01/redis-cli -p 7006 shutdown

3)将ruby脚本文件复制到集群文件根目录

redis源码包src目录下有一个名称为redis-trib.rb的脚本文件,将其复制到redis-cluster目录下,执行命令:

cd redis-3.0.0
cp src/redis-trib.rb ../redis-cluster

4)使用ruby脚本搭建Redis集群

运行命令执行Ruby脚本搭建集群,我的虚拟机IP地址为192.168.25.153,搭建时按照自己虚拟机的IP进行更改(我的ip是192.168.25.153)

./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006

三.Redis集群的使用

使用redis-cli连接Redis数据库,连接Redis集群时,只用连接集群中的一个数据库即可使用整个集群

连接一个Redis数据库:
执行命令:

./redis-cli -p 6379

连接一个Redis数据库集群:
执行命令:

./redis-cli -p 7001 -c

与连接一个数据库的不同点是在命令后部加了一个-c指令,-c指令代表连接的是Redis集群

Redis-03-Redis集群的搭建相关推荐

  1. 2W 字详解 Redis 6.0 集群环境搭建实践

    原文链接:https://www.cnblogs.com/hueyxu/p/13884800.html 本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环 ...

  2. Docker下Redis Cluster分片集群的搭建、基本操作、集群扩容和集群故障转移(非关系型数据库技术课程 第九周)

    文章目录 Docker 下Redis Cluster 分片集群搭建 1. Cluster 分片集群 1.1 Cluster 集群的结构和作用 1.2 Cluster 分片集群 的作用 1.3哈希槽(h ...

  3. Redis单机和集群环境搭建

    一.安装单机版redis 1.可以自己去官网下载,当然也可以用课程提供的压缩包 # yum install gcc # wget http://downloads.sourceforge.net/tc ...

  4. Redis Cluster 伪集群的搭建

    简介 为何要搭建Redis集群?Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB ...

  5. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  6. Redis集群架构搭建和原理

    Redis集群架构教程 Redis常见的架构有主从.哨兵.高可用集群,接下来的文章分四章分别介绍linux安装redis.主从架构搭建.哨兵模式搭建.集群架构搭建 第一章 Redis的安装 我的cen ...

  7. Redis HA篇 +集群搭建

    说明:本文为面向Redis集群搭建的指导手册 标签:Redis集群.Redis高可用.Redis分布式.Redis 4.0.2 注意:文中删去了不需要的多余部分,让初学者一目了然一学就会 温馨提示:如 ...

  8. Redis高可用集群Redis Cluster搭建

    前言: Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用 ( HA ),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data ...

  9. 超详细的 Redis Cluster 官方集群搭建指南,适用于 redis 5.x, 6.x

    今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 旧版本使用 redis-trib.rb ruby 脚本安装集群,5.0版本redis-cli 已经自带 ...

  10. docker redis集群搭建_Redis集群模式搭建

    前言 本文主要介绍如何搭建redis集群环境 原理简介 - Redis 集群是一个提供在多个Redis间节点间共享数据的程序集,集群节点共同构建了一个去中心化的网络,集群中的每个节点拥有平等的身份,节 ...

最新文章

  1. 干货丨数据科学、机器学习、人工智能,究竟有什么区别?
  2. 自动化运维Python系列(六)之面向对象
  3. 二十六、深入Python中的time和datetime模块
  4. java获取数据库数据保存到本地txt文件中
  5. 推荐开源代码2004/12/17
  6. mvc模式 mysql做网页_SpringMVC + Hibernate + MySQL 的简易网页搭建(Control实现篇)
  7. 光子 量子 DNA计算机的发展情况,CPU的发展与量子计算机.pdf
  8. 任正非:美国迟早会爱上华为
  9. npm安装为什么要安装gyp各种报错呢
  10. 晚间看图片就高亮,这体验太差
  11. 广度优先遍历(Breadth First Search)
  12. Java题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
  13. 电脑版的微信客户端也能刷朋友圈啦
  14. PHP集成环境Visual-AMP
  15. 怎么用计算机里的坦克大战,坦克大战怎么使用重坦_坦克大战重坦篇_7k7k坦克大战...
  16. Python小白的数学建模课-21.关键路径法
  17. docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
  18. 数据库的锁机制理解和运用
  19. 强制隐藏windows任务栏(使用快捷键才弹出)(hide the taskbar in win10)
  20. 静态站点 免费_七个站点,您可以随意使用免费照片

热门文章

  1. mpandroidchart 设置x轴数据_跟小白学Python数据分析——绘制条形图
  2. mysql5.6 table cache_MySQL 5.6下table_open_cache参数优化合理配置详解
  3. css两张图片怎么合在一起_PhotoShop怎么把两张图片合成一张?怎么用ps把两张图片合成一张?...
  4. php定量,javascript - js 无序数组 任意个数 相加之和为定量m?
  5. OpenRefine使用教程
  6. python_numpy_中的matrix与array的区别
  7. 框架Thinkphp5 简单的实现行为 钩子 Hook
  8. Spring Cloud之Zuul网关集群
  9. Vue学习笔记之Vue学习前的准备工作
  10. C++对象池技术剖析