上海 网站制作公司,摄影网页制作,嘉兴建站服务,手机做的兼职网站设计目录 一 redis cluster 相关定义
1#xff0c; redis cluster 是什么
2#xff0c;redis 集群的组成
3#xff0c;集群的作用
4#xff0c;集群架构图
二 Redis集群的数据分片
1#xff0c;哈希槽是什么
2#xff0c;哈希槽如何排布
3#xff0c;Redis集…目录 一 redis cluster 相关定义
1 redis cluster 是什么
2redis 集群的组成
3集群的作用
4集群架构图
二 Redis集群的数据分片
1哈希槽是什么
2哈希槽如何排布
3Redis集群的主从复制模型
4哈希槽架构图
三 实验模拟redis 集群
1实验环境
2清理实验环境
3, 模拟6个redis
4 修改6个 节点的配置文件
5分别启动所有的redis
6启动redis 集群
7 查看集群
8 测试集群
9重点理解集群 redis 在集群模式下 redis-cli -p 6001 -c 新增键 不会报错 但是 redis-cli -p 6001 新增键会报错
四 总结
1redis 主从复制
2, 哨兵
3redis cluster 一 redis cluster 相关定义
1 redis cluster 是什么
redis 集群是 redis 群集三种模式之一。
redis群集有三种模式分别是主从同步/复制、哨兵模式、Cluster本文会讲解一下三种模式的工作方式以及如何搭建cluster群集
●主从复制主从复制是高可用Redis的基础哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份以及对于读操作的负载均衡和简单的故障恢复。 缺陷故障恢复无法自动化写操作无法负载均衡存储能力受到单机的限制。
●哨兵在主从复制的基础上哨兵实现了自动化的故障恢复。 缺陷写操作无法负载均衡存储能力受到单机的限制哨兵无法对从节点进行自动故障转移在读写分离场景下从节点故障会导致读服务不可用需要对从节点做额外的监控、切换操作。
●集群通过集群Redis解决了写操作无法负载均衡以及存储能力受到单机限制的问题实现了较为完善的高可用方案。
2redis 集群的组成
集群由多个节点(Node)组成Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点只有主节点负责读写请求和集群信息的维护从节点只进行主节点数据和状态信息的复制。 3集群的作用
1数据分区数据分区(或称数据分片)是集群最核心的功能。集群将数据分散到多个节点一方面突破了Redis单机内存大小的限制存储容量大大增加另一方面每个主节点都可以对外提供读服务和写服务大大提高了集群的响应能力。 Redis单机内存大小受限问题在介绍持久化和主从复制时都有提及例如如果单机内存太大bgsave和bgrewriteaof的fork操作可能导致主进程阻塞主从环境下主机切换时可能导致从节点长时间无法提供服务全量复制阶段主节点的复制缓冲区可能溢出。
2高可用集群支持主从复制和主节点的自动故障转移与哨兵类似当任一节点发生故障时集群仍然可以对外提供服务。
4集群架构图 二 Redis集群的数据分片
1哈希槽是什么
Redis集群引入了哈希槽的概念 Redis集群有16384个哈希槽编号0-16383 集群的每个节点负责一部分哈希槽 每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽通过这个值去找到对应的插槽所对应的节点然后直接自动跳转到这个对应的节点上进行存取操作
2哈希槽如何排布
#以3个节点组成的集群为例 节点A包含0到5460号哈希槽 节点B包含5461到10922号哈希槽 节点C包含10923到16383号哈希槽
3Redis集群的主从复制模型
集群中具有A、B、C三个节点如果节点B失败了整个集群就会因缺少5461-10922这个范围的槽而不可以用。 为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成在节点B失败后集群选举B1位为的主节点继续服务。当B和B1都失败后集群将不可用。
4哈希槽架构图 三 实验模拟redis 集群
1实验环境
redis的集群一般需要6个节点3主3从。方便起见这里所有节点在同一台服务器上模拟 以端口号进行区分3个主节点端口号6001/6002/6003对应的从节点端口号6004/6005/6006。
2清理实验环境
关闭防火墙 和redis 3, 模拟6个redis
首先在 /etc/redis/redis-cluster/ 创建6个对应的文件夹 将redis 的配置文件 和启动文件分别拷贝到这6个文件夹
此处为for循环 拷贝redis 启动文件 4 修改6个 节点的配置文件
代码如下
#开启群集功能
#其他5个文件夹的配置文件以此类推修改注意6个端口都要不一样。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1 #69行注释掉bind 项默认监听所有网卡
protected-mode no #88行修改关闭保护模式
port 6001 #92行修改redis监听端口
daemonize yes #136行开启守护进程以独立进程启动
cluster-enabled yes #832行取消注释开启群集功能
cluster-config-file nodes-6001.conf #840行取消注释群集名称文件设置
cluster-node-timeout 15000 #846行取消注释群集超时时间设置
appendonly yes #700行修改开启AOF持久化tips为了方便可以改好6001的配置文件再贴到其他5个下面
再改92行 和 840行 5分别启动所有的redis 查看是否启动 6启动redis 集群
代码如下;
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1解释
#六个实例分为三组每组一主一从前面的做主节点后面的做从节点。下面交互的时候 需要输入 yes 才可以创建。 --replicas 1 表示每个主节点有1个从节点。 7 查看集群
cluster slots 首先查看主从 及哈希槽
可以得知 6001主 从为 6005 6002主 从为6006 6003主 从为 6004 8 测试集群
如下图 输入-c 你可以理解为对这个集群的操作
会根据算法 将这个ceshi 键放到6003 机器上 查看6003 的 从 6004 可以看到该键 其他主机看不到 9重点理解集群 redis 在集群模式下 redis-cli -p 6001 -c 新增键 不会报错 但是 redis-cli -p 6001 新增键会报错 如图所示 不加-c 会报错 因为 在Redis集群模式下分别使用以下两种方式执行新增键的操作 使用 redis-cli -p 6001 -c -p 6001 指定连接到集群中监听6001端口的某个节点。-c 参数表示客户端应以集群模式工作能够理解并自动处理Redis集群返回的“MOVED”重定向响应。当您尝试新增一个键时如果该键应归属于当前连接节点或者redis-cli能够根据“MOVED”响应成功找到并重定向到正确的节点执行命令那么操作不会报错。这是因为redis-cli在这种模式下具备处理集群内部键迁移和分布的能力。 使用 redis-cli -p 6001 同样使用 -p 6001 指定连接到集群中监听6001端口的节点但没有提供 -c 参数。在这种情况下redis-cli 认为它正在与单个独立的Redis实例交互而不是一个集群。当您尝试新增一个键时如果该键实际应由集群中的其他节点处理即不属于当前连接节点负责的槽位Redis集群会返回一个“MOVED”错误指示您应该将命令发送到正确的节点。由于缺少 -c 参数redis-cli 无法自动处理这个重定向响应而是将“MOVED”错误直接显示给您导致操作报错。
总结来说使用 redis-cli -p 6001 -c 连接Redis集群并新增键通常不会报错因为它能够应对键可能分布在不同节点的情况自动处理重定向。而使用 redis-cli -p 6001无 -c 参数连接时由于客户端不具备集群模式的支持遇到需要重定向的情况会直接报告错误无法完成新增键的操作。因此在与Redis集群交互时尤其是在进行写入操作时务必使用 -c 参数以确保命令能够正确执行。 四 总结
1redis 主从复制
redis主从复制是一种同步机制 主服务器数据的修改会实时同步到从服务器上实现数据备份和读写分离
2, 哨兵
1)监控
2)通知
3自动故障转移
4配置提供服务(客户端做为验证)
redis 哨兵是一个用于管理多个redis 服务器的系统它提供监控 通知自动故障转移和配置服务来实现redis高可用性。
3redis cluster
1)数据分片
2故障转移
3高性能
4高可用
redis集群是一个提供 高性能 高可用 数据分片 故障转移 特性的
分布式数据库模式