Redis 的集群
Redis 的复制特性,以及 Redis Sentinel 和 twemproxy 这两个程
序,其中:复制特性可以创建指定服务器的复制品,这些复制品可以用于扩展系统处理读请求的能力Redis Sentinel 可以在复制特性的基础上,通过监视主从服务器并在主服务器故障时执行自动故 障转移来保证系统的可用性twemproxy 使用分片策略来将数据 库划分到多个不同的服 务器,以此来扩展系统储存的数据量, 并通过将命令请求分散给不同的服务器来处理,以此来扩展系统处理命令请求的能力以上这些特性或程序都是独立的,如果我 们需要一个完整地包含复制、高可用和分片特性的 Redis服务器群那么就需要用到Redis的集群(cluster)特性。集群(Redis的分布式数据库实现)
Redis 集群是一个由多个 Redis 服务器组成的分布式网络服务器群,集群中的各个服务器被称为节 点(node),这些节点会相互连接并进行通信
分布式的 Redis 集群没有中心节点,所以用户不必担心某个节点会成为整个集群的性能瓶颈。复制
Redis 集群的每个节点都有两种角色可选,一个是主节点(master node),另一个是从节点(slave node):其中主节点用于储存数据,而从节点则是某个主节点的复制品
当用户需要处理更多读请求的时候,添加从节点可以扩展系统的读性能。因为 Redis 集群重用了单机Redis 复制特性的代码,所以集群的复制行为和我们之前介绍的单机复制特性的行为十完全一样的节点故障检测和自动故障转移
Redis 集群的主节点内置了类似 Redis Sentinel 的节点故障检测和自动故障转移功能,当集群中的某
个主节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移。集群进行故障转移的方法和 Redis Sentinel 进行故障转移的方法基本一样,不同的是,在集群里面,
故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用 Redis Sentinel分片
集群将整个数据库分为 16384 个槽(slot),所有键都属于这 16384 个槽的其中一个,计算键 key 属于哪个槽的公式为 slot_number = crc16(key) % 16384 ,其中 crc16 为 16位的循环冗余校验 和函数。
集群中的每个主节点都可以处理 0 个至 16384 个槽,当 16384 个槽都有某个节点在负责处理时, 集群进入上线状态,并开始处理客户端发送的数据命令请求。
比如说,如果我们有三个主节点 7000 、 7001 和 7002 ,那么我们可以:
- 将槽 0 至 5460 指派给节点 7000 负责处理;
- 将槽 5461 至 10922 指派给节点 7001 负责处理;
- 将槽 10923 至 16383 指派给节点 7002 负责处理;
这样就可以将 16384 个槽平均地指派给三个节点负责处理。转向
对于一个被指派了槽的主节点来说,这个主节点只会处理属于指派给自己的槽的命令请求。
如果一个节点接收到了和自己处理的槽无关的命令请求,那么节点会向客户端返回一个转向错误 (redirection error),告诉客户端,哪个节点才是负责处理这条命令的,之后客户端需要根据错误中包含 的地址和端口号重新向正确的 节点发送命令请求。集群搭建
集群搭建步骤
搭建一个 Redis 集群需要执行以下步骤:
1. 创建多个节点。
2. 为每个节点指派槽,并将多个 节点连接起来,组成一个集群。
3. 当集群数据库的 16384 个槽都有节点在处理时,集群进入上线状态。
接下来,就让我们来搭建一个包含六个节点的 Redis 集群,其中三个节点为主节点,而另外三个节点 为从节点,每个主 节点都有一个从 节点。
注意,在极端情况下,如果将 16384 个槽都指派给一个主节点,那么只有一个主 节点也可以让集群进 入上线状态,但是要让集群的故障转移特性生效,最起码要有三个主节点;而要让故障转移真正有意义, 最少要为三个主节点分别设置一个从节点,这也是我们使用六个节点作为例子的原因。
创建节点
集群中的节点就是运行在集群模式下的 Redis 服务器,为了构建一个集群,我 们需要一一创建集群中
的每个节点。
为了让 Redis 服务器以集群模式运行,我们需要在启动服务器时,打开服务器的集群模式选项:
cluster-enabled yes
另外,如果有多个 节点运行在同一台机器里面,那么我 们还需要为每个节点指定不同的端口号: port 7000
我们可以将这两个配置值写入到 redis.conf 文件里面,然后执行以下命令来启动一个节点: $ redis-server redis.conf节点创建示例
为了在同一台机器上构建一个包含六个节点的集群,其中三个主节点分别运行在机器的 7000 、 7001 和 7002 端口,而三个从节点则分别运行在机器的 7003 、 7004 和 7005 端口,我们可以先 创建一个 rediscluster 文件夹,然后分别创建 7000 至 7005 这六个文件夹,每个文件夹都包含一个 redis.conf 文件,它的内容为:
port <number> cluster-enabled yes
然后只要分 别执行:
~/rediscluster/7000$ redis-server redis.conf ...
~/rediscluster/7005$ redis-server redis.conf
就可以创建出六个节点了(节点启动时默认为主节点,之后要将其中三个 节点转为从节点)。创建集群
在创建出六个节点之后,我们需要让这六个节点互相连接以构成一个集群,然后为三个主节点指派槽,并为这三
个主节点分别设置一个从节点。
创建集群的操作可以通过使用位于 Redis 安装文件夹内的 redis-trib.rb 程序来完成,这是一个使用 Ruby 编 写的 Redis 集群管理程序,它具有创建集群、检查集群的上线情况和槽指派情况、对集群进行重新分片、向集群 添加新节点或者从集群中移除节点等功能。
不带任何参数地执行 redis-trib.rb 可以看到它的各项用法redis-trib.rb 的 create 方法
为了创建一个包含三个主节点和三个从节点的集群,我们需要执行以下命令:
$ ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1: 7003 127.0.0.1:7004 127.0.0.1:7005
其中,create 方法表示我们要创建一个集群,而之后的 --replicas 1 则表示让 redis-trib.rb 为集群中 的每个主节点设置一个从节点,再之后输入的是各个节点的 IP 地址和端口号。
在输入该命令之后, redis-trib 会为各个节点指派槽以及角色,并询问用户是否接受这种节点配置redis-trib.rb 首先尝试连接给定的六个节 点,检查它们是否存在。
在确定这些节点都是可连接之后,redis- trib.rb 再将 7000 、 7001 和 7002 设 置为主节点,而 7003 、 7004 和 7005 则分别被设置为三个主节点的从节点。
对于三个主节点,redis-trib.rb 会分别为 它们指派 5461 、 5462 和 5461 个槽 (默认情况下使用平均分配)。
如果觉得这个配置没问题的话,就可以键 入 yes 并按下回车进行监测
Performing Cluster Check(using node 127.0.0.1:7000)
之后, redis-trib.rb 会对集群进行测试,检查是否每个节点都按照原先展示的配置 设置好了。 如果整个集群数据库的 16384 个槽都有节点在处理,那么集群就会进入上线状态,之后用户就可以
开始向集群发送命令请求了。访问集群
适用集群客户端向集群发送命令请求
集群客户端
因为集群功能比起单机功能要复杂得多,所以不同语言的 Redis 客户端通常需要为集群添加特别的
支持,或者 专门开发一个集群客 户端。
目前主要的 Redis 集群客户端(或者说,支持集群功能的 Redis 客户端)有以下这些:
- redis-rb-cluster:antirez 使用 Ruby 编写的 Redis 集群客户端,集群客户端的官方实现。
- predis:Redis 的 PHP 客户端,支持集群功能。
- jedis:Redis 的 JAVA 客户端,支持集群功能。
- StackExchange.Redis:Redis 的 C# 客户端,支持集群功能。
- 内置的 redis-cli :在启动时给定 -c 参数即可进入集群模式,支持部分集群功能。 我们这里使用集群模式的 redis-cli 来进行,需要更完整功能的话,大家可
以选择上面列举的其他客户端。

连接节点并执行命令
redis-cli -p 7000 -c
127.0.0.1:7000> SET date 2014-10-10 # 键 date 所在的槽位于节点 7000 ,节点直接执行命令 OK
127.0.0.1:7000> SET msg "hello world" # 键 msg 所在的槽位于节点 7001
-> Redirected to slot [6257] located at 127.0.0.1:7001 # 客户端从 7000 转向至 7001 OK
127.0.0.1:7001> SADD fruits “apple” “banana” “cherry” # 键 fruits 所在的槽位于 节点 7002 -> Redirected to slot [14943] located at 127.0.0.1:7002 # 客户端从 7001 转向至 7002 (integer) 2
127.0.0.1:7002> # 转向是自动完成的,无需任何用 户操作

二十一Redis集群相关推荐

  1. Redis集群的基本配置

    目录 一.Redis集群集群概述 二.部署Redis集群 1.基本原理 2.配置管理主机 3.创建集群 4.访问集群 5.添加服务器 6.移除服务器 一.Redis集群集群概述 所谓集群,就是通过添加 ...

  2. 大数据 互联网架构阶段 Redis(三)redis集群

    Redis(三) redis集群 一. redis哨兵模式的缺点 问题一 : 横向扩展不方便 , 一旦扩展 , 无论代码结构多么简单, 都需要修改 问题二 : 散列分布式算法是hash一致性 , 无论 ...

  3. redis 端口_「建议收藏」手把手教你搭建redis集群

    前言 在生产中单机的redis服务不能保证程序的高可用,所以有时需要我们来搭建一个redis集群,保证某一台redis服务挂了的时候,我们的服务还可以保证正常运行. 单机redis的搭建,可以参考我的 ...

  4. Linux_基于Docker搭建Redis集群

    时间:2017年07月11日星期二 说明:基于Ubuntu16.04-64bit,开始本教程前,请确保您的Linux系统已安装Docker. 步骤一:Redis镜像安装 1.下载Redis镜像 镜像中 ...

  5. Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?

    问题一:Redis集群为什么至少需要三个master节点? 因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新ma ...

  6. redis集群之主从复制+哨兵模式

    文章目录 一.redis集群之主从复制 1.1.集群介绍 1.2.搭建过程 1.3.验证 二.redis集群之哨兵模式 2.1.部署过程 1.搭建主从复制集群 2.设置哨兵模式的配置文件 3.启动哨兵 ...

  7. Redis基础—九、Redis订阅发布、Redis集群

    Redis基础-九.Redis订阅发布.Redis集群 一.Redis订阅发布 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息 ...

  8. Redis 集群搭建原理

    一.设计的主要特性和基本原理 1.集群目标 Redis 集群是 Redis 的分布式实现,在设计中按重要性顺序具有以下目标: 高性能和线性可扩展性,多达 1000 个节点.没有代理,使用异步复制,并且 ...

  9. Redis 集群搭建

    一.redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc # 把下载好的redis-5.0.2.tar.gz放在/us ...

最新文章

  1. 关于一个js传值的错误
  2. “4K云字库”基本框架图
  3. linux服务器同时运行两个或多个tomcat
  4. MYSQL二级表的管理_MySQL库和表的管理
  5. SecurityContextPersistenceFilter和SecurityContextHolder的作用
  6. Django 【认证系统】auth
  7. 妙趣横生的算法--二叉树
  8. Nginx初学者指南
  9. 惠普战99安装deepin20.2.4并驱动NVIDIA显卡
  10. SELinux audit2allow命令使用
  11. adb 切换默认桌面,OPPO默认桌面替换教程
  12. SiamRPN代码分析:training
  13. 应用市场首发,APP推广如何应对
  14. [CISCN]2020
  15. 荣耀8x手机换电池实战
  16. c盘太小想扩容,合并硬盘分区的方法,硬盘合并分区的步骤
  17. SSRF在有无回显方面的利用及其思考与总结
  18. 华为云IOT平台设备获取api调用笔记
  19. 名帖296 傅山 行书《行书帖选》
  20. 所有Android 开发者都要知道的开发常识

热门文章

  1. 尤肖虎等:基于AI的5G技术:4大研究方向、4个典型范例
  2. 《山海经——海外经》
  3. 浅谈996工作制:蜜糖还是“毒药”?
  4. mysql如何创建临时表
  5. #pragama once 的作用
  6. 铝合金材质防震硬盘 华硕PU403UA品质优享
  7. 第六篇 Analyzer(1)基本使用
  8. photoshop中给矩形做圆角的方法
  9. mac qq 缓存清理 。
  10. plm系统连接服务器失败,金蝶PLM常见问题集(doc 51页)