集群

简介

Redis 集群实现了对Redis的水平扩容,即启动 N 个 redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N 。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

集群搭建

这次因为电脑性能渣渣,开不了那么多台虚拟机,就在一台服务器上模拟了。

集群的搭建最少需要6个节点

我们既然要搭建集群,那么master节点至少要3个,slave节点也是3个,为什么呢?
这是因为一个redis集群如果要对外提供可用的服务,那么集群中必须要有过半的master节点正常工作!!!
基于这个特性,如果想搭建一个能够允许 n 个master节点挂掉的集群,那么就要搭建2n+1个master节点的集群。

所以综上,易得至少需要6个节点才能搭建一个redis集群。

redis集群搭建流程

  1. 配置基本信息
    我这里弄了6个配置文件,分别是redis6370.conf(6379端口)、redis6371.conf(6371端口)、redis6380.conf(6380端口)、redis6381.conf(6381端口)、redis6390.conf(6390端口)、redis6391.conf(6391端口),拿redis6370.conf举例,里面的配置如下:
include /www/wwwroot/Redis学习/redis.confport 6370pidfile "/var/run/redis_6370.pid"dbfilename "dump6370.rdb"dir "/www/wwwroot/Redis学习/集群/6370"logfile "/www/wwwroot/Redis学习/集群/log/redis_err_6370.log"# 打开集群模式
cluster-enabled yes# 设定节点配置文件名
cluster-config-file nodes-6370.conf# 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换。
cluster-node-timeout 15000

注意:使用的是阿里云服务器的同学还需要开放服务器和阿里云安全组中对应的端口。

  1. 启动上述6个节点的redis服务
  2. 将六个节点合成一个集群
    所有节点启动好后,我们去你安装redis的目录底下,找到src目录。
    在src目录底下,输入以下命令创建集群
redis-cli --cluster create --cluster-replicas 1 118.31.109.17:6370 118.31.109.17:6380 118.31.109.17:6390 118.31.109.17:6371 118.31.109.17:6381 118.31.109.17:6391 -a 123456

注意:这里用的必须是你本机的ip地址。
说明:
前面三个是master代表的是,后面三个是slave;
“-a”后面是你设置的redis的密码,有密码的情况下得加,不然会报以下错误:

输入之后如下图:

有一个要你确认的步骤,输入yes确认。

注意:到了这里你可能会遇到一种情况,显示Waiting for the cluster to join并一直等待,如下图:

原因:
redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000
如:redis端口为6379,则集群总线端口为16379
故所有服务器的点需要开通redis的客户端连接端口和集群总线端口。如果有安全组,也要放开这两个端口

搭建集群成功,会显示关于集群里面服务器的信息,如下图:

这里我们把 All 16384 slots covered 这一行记一下,我们后面还会讲到。

集群的使用

集群登录

我们之前是使用redis-cli -p port的方式登录的,在集群中使用这种方式登录,可能直接进入读主机,存储数据时,会出现MOVED重定向操作。所以,应该以集群方式登录。

所以我们采用集群的方式登录,如下:

redis-cli -c -p port

说明:–c 参数实现自动重定向
这样设置数据时会自动切换到相应的写主机。

查看集群信息

我们可以通过cluster nodes命令查看集群的信息,如下图:

redis cluster 如何分配这六个节点?
一个集群至少要有三个主节点。
而我们之前搭建集群的命令中选项 --cluster-replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
所以这也说明了搭建集群还是最少得要有6个节点。

分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。

什么是slots

我们上面在搭建完集群之后记录了一行内容,All 16384 slots covered,现在来说说它是什么意思。

一个 Redis 集群包含 16384 个插槽(hash slot),数据库中的每个键都属于这 16384 个插槽的其中一个,
集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16(循环冗余校检) 校验和 。

集群中的每个节点负责处理一部分插槽。
举个例子, 如果一个集群可以有主节点, 其中:
节点 A 负责处理 0 号至 5460 号插槽。
节点 B 负责处理 5461 号至 10922 号插槽。
节点 C 负责处理 10923 号至 16383 号插槽。
如下图:

在集群中插入值

在集群中插入值跟我们平常一台主机插入值有稍微一点不同。
在集群中每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址和端口。

在集群中插入值这个过程就是计算你key的插槽,然后匹配到相应的redis节点中去获取value.
如下图:

上图中我们插入一个新值key1,然后经过计算之后得出的插槽值为9189,根据每台主机分配到的插槽范围,将这个值放到对应插槽范围的主机中去,如:9189就属于6380端口底下的主机所在的插槽,所以这个插入值就被分配到6380端口所在的主机中去了

那如果我们插入多个key和value呢?
答案:不在一个slot下的键值,是不能使用mget,mset等多键操作,如下图:

但是我们可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去,如下图:

redis集群的好处与不足

好处

  • 实现扩容
  • 分摊压力
  • 无中心配置相对简单

不足

  • 多键操作是不被支持的
  • 多键的Redis事务是不被支持的。lua脚本不被支持

Redis初学17:集群相关推荐

  1. docker搭建redis高可用集群

    目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...

  2. Redis开发及集群

    Redis开发 中文网站:http://www.redis.net.cn/ 1.     Redis 简介 REmote DIctionaryServer(Redis) 是一个由Salvatore S ...

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

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

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

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

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

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

  6. redis 3.0 集群__数据迁移和伸缩容

    添加节点 1,启动2个新的redis-sever, 参照 ( redis 3.0 集群____安装 ),端口号为 7007 和 7008 2,使用命令 redis-trib.rb add-node 命 ...

  7. CentOS7下安装Redis伪集群(基于Redis官方Cluster集群模式版本redis-5.0.10)

    文章目录 Redis简介 什么是redis redis的优点 Redis集群都有哪些模式 主从复制(Master-Slave Replication) 哨兵模式(Sentinel) Redis官方 C ...

  8. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    转载自  Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...

  9. 超详细的 Redis Cluster 官方集群搭建指南

    转载自  超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集 ...

  10. redis 持久化 + 主从复制+ 集群

    2019独角兽企业重金招聘Python工程师标准>>> 一. Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载 ...

最新文章

  1. python面试常见问题-Python面试常见的8个问题及答案总结
  2. windows常用命令行整理
  3. VTK:PolyData之ImplicitPolyDataDistance
  4. Bumblebee微服务网关之请求统一验证
  5. 数据结构与算法(二):比较有名的排序和所有算法
  6. C语言去除字符串空格
  7. Agile Web Application Development with Yii 1.1 and PHP5
  8. 麦克纳姆轮全向移动机器人斜向直线运动分析
  9. (一)关于NLP的概念和处理过程
  10. LayaAir destroy 销毁与 removeChild 移除节点
  11. Q学习(Q learning) 强化学习的简单例子 Matlab实现 可视化
  12. 华为篇-嵌入式公司待遇盘点-第二期
  13. Inside-OutsideNet
  14. 史上最长的介绍BI(商业智能)的干货
  15. 在quartus II15.0中调用Modelsim进行时序仿真时出现Rerun the EDA Netlist Writer的原因
  16. Vue3+Element-Plus 登录成功后主页退出功能实现 十八
  17. html图片旋转3种方式—— CSS3 transform
  18. 内部基因决定拼购品质,苏宁拼购或将成为行业发展新标杆
  19. [笔记分享] [RTC] Alarm内核驱动分析
  20. Network Driver Interface Specification 即网络驱动接口规范

热门文章

  1. big endian little endian
  2. ceph-deploy rpm包的制作
  3. 联想拯救者Y9000-ubuntu-U盘启动失败解决方法
  4. 2019牛客全国多校训练三 题解
  5. 【BZOJ 4016】[FJOI2014]最短路径树问题
  6. GitLab CI流水线配置文件.gitlab-ci.yml详解(三)
  7. Java中的ClassLoader和SPI机制
  8. Linux下的ATT语法(即GNU as 汇编语法)入门
  9. 如何使得按确定和取消按纽转到两个不同的页面!
  10. Attribute在.net编程中的应用