11. Redis集群(cluster)

是什么?

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

能干嘛?

在这里插入图片描述

集群算法-分片-槽位slot

官网出处

在这里插入图片描述
在这里插入图片描述

redis集群的槽位slot

在这里插入图片描述在这里插入图片描述

redis集群的分片

在这里插入图片描述
在这里插入图片描述

他两的优势

最大优势,方便扩缩容和数据分派查找
在这里插入图片描述

slot槽位映射,一般业界有3种解决方案

在这里插入图片描述

哈希取余分区

在这里插入图片描述
在这里插入图片描述

—致性哈希算法分区

在这里插入图片描述
在这里插入图片描述

3大步骤

算法构建一致性哈希环

一致性哈希环

  • 一致性哈希算法必然有个hash函数并按照算法产生hash值,这个算法的所有可能哈希值会构成一个全量集,这个集合可以成为一个hash空间[0,2^32-1],这个是一个线性空间,但是在算法中,我们通过适当的逻辑控制将它首尾相连(0 = 2^32),这样让它逻辑上形成了一个环形空间。
  • 它也是按照使用取模的方法,前面笔记介绍的节点取模法是对节点(服务器)的数量进行取模。而一致性Hash算法是对232取模,简单来说,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-232-1(即哈希值是一个32位无符号整形),整个哈希环如下图:整个空间按顺时针方向组织,圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、……直到232-1,也就是说0点左侧的第一个点代表232-1, 0和232-1在零点中方向重合,我们把这个由232个点组成的圆环称为Hash环。
  • 在这里插入图片描述
redis服务器IP节点映射

在这里插入图片描述

在这里插入图片描述

key落到服务器的落键规则

在这里插入图片描述

在这里插入图片描述

优点

在这里插入图片描述

容错性

在这里插入图片描述

扩展性

数据量增加了,需要增加一台节点NodeX,X的位置在A和B之间,那收到影响的也就是A到X之间的数据,重新把A到X的数据录入到X上即可,

不会导致hash取余全部数据重新洗牌。
在这里插入图片描述

缺点

Hash环的数据倾斜问题

在这里插入图片描述

小总结

在这里插入图片描述

集群环境案例步骤

1.3主3从redis集群配置

在这里插入图片描述

以: vim /myredis/cluster/redisCluster6381.conf为例

bind 0.0.0.0
daemonize yes
protected-mode no
port 6381
logfile "/myredis/cluster/cluster6381.log"
pidfile /myredis/cluster6381.pid
dir /myredis/cluster
dbfilename dump6381.rdb
appendonly yes
appendfilename "appendonly6381.aof"
requirepass 111111
masterauth 111111
 
cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000

通过redis-cli命令为6台机器构建集群关系

构建主从关系命令

//注意,注意,注意自己的真实IP地址 //注意,注意,注意自己的真实IP地址
在这里插入图片描述

–cluster-replicas 1 表示为每个master创建一个slave节点
在这里插入图片描述
在这里插入图片描述

—切OK的话,3主3从搞定

在这里插入图片描述

链接进入6381作为切入点,查看并检验集群状态

链接进入6381作为切入点,查看节点状态
info replication   #当前结点信息

在这里插入图片描述

cluster nodes    #集群节点信息

在这里插入图片描述

cluster info		#集群信息

在这里插入图片描述

2.3主3从redis集群读写

在这里插入图片描述

对6381新增两个key,看看效果如何

在这里插入图片描述

为什么报错

在这里插入图片描述

在Redis中,"路由到位"(routing to master)是指客户端与Redis主节点之间的连接被正确地建立和维护的概念。
Redis是一个分布式数据库系统,其中包含一个主节点和零个或多个从节点。
主节点负责接收写操作并将数据复制到从节点,而从节点负责接收读操作并复制主节点的数据。



当客户端发送命令到Redis时,需要将命令路由到正确的主节点上。
这是由Redis客户端库或代理完成的。
客户端库或代理通常维护一个与主节点的连接池,并根据某种策略将命令发送到适当的主节点。



一种常见的策略是通过在客户端与Redis主节点之间的连接建立时进行散列(hash)操作,将命令路由到适当的主节点。
通常,这个散列操作使用命令中的关键信息(例如键名)来计算一个哈希值,并根据哈希值选择目标主节点。
这样可以确保同一键的所有操作都被路由到同一个主节点上,从而保持数据的一致性。



当路由到位时,客户端可以与正确的主节点进行通信,发送读写操作并接收相应的响应。
这确保了在Redis集群中的数据访问和操作的正确性和一致性。



需要注意的是,当Redis主节点发生故障或进行故障切换时,路由到位的概念也会涉及到自动发现和重新路由的过程,以确保客户端可以与新的主节点建立连接并进行操作。
这通常由客户端库或代理来处理,以实现高可用性和容错性。

如何解决

防止路由失效加参数-c并新增两个key
在这里插入图片描述

查看某个key该属于对应的槽位值CLUSTER KEYSLOT 键名称

在这里插入图片描述

3.主从容错切换迁移案例

在这里插入图片描述

在这里插入图片描述

随后,6381原来的主机回来了,是否会上位?

在这里插入图片描述
在这里插入图片描述

Redis集群不保证强─致性,这意味着在特定的条件下,Redis集群可能会丢掉一些被系统收到的写入请求命令。
在这里插入图片描述

在这里插入图片描述

手动故障转移or节点从属调整该如何处理

在这里插入图片描述
在这里插入图片描述

4.主从扩容案例

在这里插入图片描述

以,,vim /myredis/cluster/redisCluster6387.conf为例:

bind 0.0.0.0
daemonize yes
protected-mode no
port 6387
logfile "/myredis/cluster/cluster6387.log"
pidfile /myredis/cluster6387.pid
dir /myredis/cluster
dbfilename dump6387.rdb
appendonly yes
appendfilename "appendonly6387.aof"
requirepass 111111
masterauth 111111

cluster-enabled yes
cluster-config-file nodes-6387.conf
cluster-node-timeout 5000

将新增的6387节点(空槽号)作为master节点加入原集群

将新增的6387作为master节点加入原有集群
redis-cli -a 密码 --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli -a 111111  --cluster add-node 192.168.111.174:6387 192.168.111.175:6381

在这里插入图片描述
在这里插入图片描述

检查集群情况第1次

在这里插入图片描述
在这里插入图片描述

重新分派槽号(reshard

重新分派槽号
命令:redis-cli -a 密码 --cluster reshard IP地址:端口号
redis-cli -a 密码 --cluster reshard 192.168.111.175:6381

在这里插入图片描述
在这里插入图片描述

检查集群情况第2次

在这里插入图片描述

槽号分派说明

在这里插入图片描述

为主节点6387分配从节点6388

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

检查集群情况第3次

在这里插入图片描述

5.主从缩容案例

在这里插入图片描述

集群常用操作命令和CRC16算法分析

在这里插入图片描述

不在同一个slot槽位下的多键操作支持不好,通识占位符登场

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CRC16源码浅谈

在这里插入图片描述

集群是否完整才能对外提供服务

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值