Redis-5.0141 集群-16

1.问题

容量不够,redis怎么扩容?

并发写操作,redis如何分摊?

2.什么是Redis集群?

    集群指的是把应用进行复制多个相同的应用一起工作来提高作业能力,多个应用做的是相同的事情。

    Redis 集群(包括很多小集群)实现了对 Redis 的水*扩容,即启动 N 个 redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N,即一个小集群存储 1/N 的数据,每个小集群里面维护好自己的 1/N 的数据。

    Redis集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

该模式的 redis 集群特点是:分治、分片。

    Redis 集群优点

1. 实现扩容

2. 分摊压力

3. 无中心配置相对简单

    Redis 集群不足

1. 多键操作是不被支持的

2. 多键的 Redis 事务是不被支持的,lua 脚本不被支持。

3. 由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至 redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。


3.无中心化集群配置。

1.复制需要的配置文件

2.打开集群模式

3.设定节点配置文件名

4.设定节点失联时间,超过该时间(毫秒),集成自动进行主从切换。


4.集群启动

1.将6个节点合成一个集群

一个集群中,至少有3个主节点

打开命令行,输入 redis-cli --cluster create --cluster-replicas 1 ip:port ……
--cluster create :创建集群
–cluster-replicas 1 :表示指定为集群中的每个主节点的辅助副本节点。

2.确认主从分配

每个集群会有16384个插槽,每个插槽都能存储一个键值对,从0到16383。

集群会给每一个主服务器分配*乎*均的数量。

3.连接集群

redis-cli -c -p port

-c 表示连接集群,因为是无中心化集群,所以集群中任一一个节点都能访问其他节点


4.集群操作

    cluster nodes ,命令可以查看集群信息

    set操作,会先计算key在插槽中的位置,如果不在当前redis操作的插槽范围内,集群自动转到能操作该插槽的redis中,由其进行操作。

    mset操作,集群不允许一次性插入多个键值对,想要实现mset的操作,必须通过“组”才能设置。

    cluster keyslot [key] ,用于获取指定key的插槽值

    cluster countkeysinslot [slotId] ,用于获取指定插槽值中的key数量(但是每个redis只能查看属于自己管理范围内的插槽的值)

    cluster getkeysinslot [slotId] [count] ,用于获取指定插槽值中指定数量的key名称


5.故障恢复

    当某个主机挂掉后,通过打印信息可以看到挂掉的主机有一个fail标签,随后集群会在从机中选一个作为主机,当挂掉的redis重新开启后,就会变成从机。

    如果所有某一段插槽的主从节点都宕掉,redis 服务是否还能继续?

    如果某一段插槽的主从都挂掉,而 cluster-require-full-coverage 为 yes ,那么整个集群都挂掉。

    如果某一段插槽的主从都挂掉,而 cluster-require-full-coverage 为 no ,那么,该插槽数据全都不能使用,也无法存储。


5.slot

5.1 什么是slot?

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


5.2 在集群中录入值

   在 redis-cli 每次录入、查询键值,redis 都会计算出该 key 应该送往的插槽,如果不是该客户端对应服务器的插槽,redis 会报错,并告知应前往的 redis 实例地址和端口。

    redis-cli 客户端提供了 –c 参数实现自动重定向。如 redis-cli -c –p 6379 登入后,再录入、查询键值对可以自动重定向。不在一个 slot 下的键值,是不能使用 mget,mset 等多键操作。

6.Jedis操作集群

posted @   别停  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示