redis集群
-
什么是redis集群?
-
集群解决的问题:
-
集群实现步骤
-
集群的使用
1.集群的连接
- 使用普通方式连接
- 存储数据时可能出现MOVED重定向到另外的主机的错误
- 出现此错误的原因:
集群的时候对每一个key对进行了分区,即每一个key对应着唯一的插槽(slot) - 什么是slot?
一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
- 使用集群方式连接
- 存储数据时,若此数据不在该主机负责的插槽中,则自动重定向到负责此数据的主机上且存储此数据
- 即使连接的不是主机,集群会自动切换主机存储。主机写,从机读。
- 无中心化主从集群。无论从哪台主机写的数据,其他主机上都能读到数据。
- 在连接后,可通过命令cluster nodes查看集群配置
息
2.在集群中录入值
-
mset k1 v1 k2 v2 k3 v3
可能会出现不在同一个slot的key不能同时设置- 即不在一个slot下的键值,是不能使用mget,mset等多键操作。
- 解决方法
在每一个key后面加{描述信息}即可
即mset k1{s1} v1 k2{s1} v2 k3{s3} v3
- 即不在一个slot下的键值,是不能使用mget,mset等多键操作。
-
查询集群中的值
cluster keyslot key名或组名
–查看插槽的对应的值cluster countkeysinslot key名或组名
–查看插槽的key的数量cluster getkeysinslot key名或组名
–获取插槽含有的key
- 使用普通方式连接
-
集群的故障恢复
- 集群故障后主节点与子节点的关系:
- 若主节点发生故障,过一段时间子节点会自动成为主节点,取决于你的配置信息(cluster-timeout),恢复后,主节点会变成子节点的从机
- 若主节点发生故障,过一段时间子节点会自动成为主节点,取决于你的配置信息(cluster-timeout),恢复后,主节点会变成子节点的从机
- 如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?
- 取决于redis.conf中的参数
cluster-require-full-coverage
- 如果某一段插槽的主从都挂掉,而
cluster-require-full-coverage
为yes ,那么 ,整个集群都挂掉 - 如果某一段插槽的主从都挂掉,而
cluster-require-full-coverage
为no ,那么,该插槽数据全都不能使用,也无法存储。
- 取决于redis.conf中的参数
- 集群故障后主节点与子节点的关系:
-
集群的主子节点分配策略
- 主节点和主节点不应该在同一个机器服务
- 主节点和子节点不应该在同一个机器服务。
- 原因:若主节点和主节点在同一个机器服务,那这个机器发生故障,即全部数据库故障,redis服务停止。同理,若主节点和子节点在同一个机器服务,那主节点发生故障,则子节点也发生故障,若不在同一台机器,则子节点在主节点发生故障后可以成为主节点。