目录

介绍

为什么要集群?

配置集群 

 首先要删除备份文件rdb/aof

配置redis配置文件,在里面加上集群(cluster)的配置信息

 合成集群

 那么问题来了,在哪合成集群呢?

 启动命令

 集群的方式连接redis服务(任何一个入口都能连接到)

 命令:

redis cluster如何分配六个节点

什么是slots(插槽值)

 例子

 在集群中设置多个key

根据key计算它的插槽值:cluster keyslot 键名

 根据插槽值得到key:cluster countkeysinslot 插槽值

 返回count个slot槽中的键

故障修复

当主从都挂掉时

 总结:Redis集群好处与不足


介绍

redis集群优缺点 - 简书 (jianshu.com)

1、redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;

为什么要集群?

1、我们知道,单个redis是不稳定的,当服务宕机了,就没有可以用的服务了,所以说单个redis能力是有限的

2、可以进行读写分离,主服务器写,从服务器读,还可以利用薪火相传,当主服务器宕机了,从服务器顶上去;

配置集群 

redis集群教程 redis集群操作_数据库

 首先要删除备份文件rdb/aof

redis集群教程 redis集群操作_redis集群教程_02

redis集群教程 redis集群操作_redis_03

配置redis配置文件,在里面加上集群(cluster)的配置信息

redis集群教程 redis集群操作_数据库_04

将其余的redis服务器配置文件进行修改 

redis集群教程 redis集群操作_数据库_05

redis集群教程 redis集群操作_redis集群教程_06

 发现一个小bug,6379,6380,6381端口的集群模式没有开启成功

小白这里怀疑应该是之前这三端口没用重启,所以我们将它们杀死,然后将服务启动即可

redis集群教程 redis集群操作_redis_07

 重新启动这三个端口的服务

redis集群教程 redis集群操作_数据库_08

 看看节点(nodes)是不是都在

redis集群教程 redis集群操作_redis_09

 合成集群

redis集群教程 redis集群操作_redis_10

 那么问题来了,在哪合成集群呢?

opt目录下redis-版本下的src文件夹中,有一个rb环境集群的合体依赖于这个环境

1、replicas:表示以什么样的方式配置集群:1是最简单的方式配置集群,我们这里一台主机一台从机刚好三组;

redis集群教程 redis集群操作_redis集群教程_11

redis集群教程 redis集群操作_java_12

 启动命令

redis集群教程 redis集群操作_数据库_13

 启动成功

redis集群教程 redis集群操作_java_14

redis集群教程 redis集群操作_redis集群教程_15

 集群的方式连接redis服务(任何一个入口都能连接到)

 命令:

redis集群教程 redis集群操作_服务器_16

redis-cli -c -p 端口:启动集群

cluster nodes:查看集群信息

redis集群教程 redis集群操作_redis_17

redis cluster如何分配六个节点

redis集群教程 redis集群操作_redis集群教程_18

 每个主服务器都尽量不要在相同的ip地址上,从服务器也是;

因为当你注服务器挂了,你的从服务器可以顶上去(利用哨兵模式);

什么是slots(插槽值)

 介绍:当你在集群中进行对某key操作的时候,会计算key的插槽,然后会根据你操作对应的插槽值放到对应的服务器中;

每个服务器都对应的一个节点node,不同节点负责不同范围的插槽

作用:分担压力,将key分担在不同的服务器上(这应该就是集群的核心了)

例子:

redis集群教程 redis集群操作_redis_19

redis集群教程 redis集群操作_数据库_20

例子

redis集群教程 redis集群操作_服务器_21

 当插槽值是其他服务器范围(根据key来计算)

redis集群教程 redis集群操作_数据库_22

 在集群中设置多个key

利用组名进行计算插槽值:mset 键名{组名} 键值 键名{组名} 键值 

这里6381服务器——>6380服务器

redis集群教程 redis集群操作_java_23

 这个密码认证真的烦;

根据key计算它的插槽值:cluster keyslot 键名

redis集群教程 redis集群操作_服务器_24

 根据插槽值得到key:cluster countkeysinslot 插槽值

只能得到自己服务器范围的key

redis集群教程 redis集群操作_redis集群教程_25

 返回count个slot槽中的键

命令:cluster getkeysinslot 槽 数量

redis集群教程 redis集群操作_数据库_26

故障修复

当6379宕机时,主服务器会另起高人,比如下面6389 

redis集群教程 redis集群操作_redis_27

当6379又重新启动时,就会成为6389的小弟了,变成从服务器(也就是哨兵模式啦

当主从都挂掉时

根据配置来决定,在对应的conf配置文件中,参数:cluster-require-full-converage:yes/no

yes:整个集群都挂掉

no:该段插槽数据全部不能用,但是其他的还是可以的


集群的Jedis开发

redis集群教程 redis集群操作_java_28


 总结:Redis集群好处与不足

好处:

1、实现扩容;

2、分担压力,根据键对应插槽放在不同的服务器下;

3、无中心化配置,任何一个节点都能切换到其他节点,比如说:在6379下执行命令,发现操作时6380的,那么我们会立马切换到6380端口执行命令;

不足:

多键操作操作不支持,需要用mset 键名{组名}键值 的操作来执行,还多弄了一个组

多建的redis事务是不支持的,lua脚本不支持;

像之前的秒杀,如果用户这个key和库存key不在同一个服务器下,怎么秒杀呢?