目录
介绍
为什么要集群?
配置集群
首先要删除备份文件rdb/aof
配置redis配置文件,在里面加上集群(cluster)的配置信息
合成集群
那么问题来了,在哪合成集群呢?
启动命令
集群的方式连接redis服务(任何一个入口都能连接到)
命令:
redis cluster如何分配六个节点
什么是slots(插槽值)
例子
在集群中设置多个key
根据key计算它的插槽值:cluster keyslot 键名
根据插槽值得到key:cluster countkeysinslot 插槽值
返回count个slot槽中的键
故障修复
当主从都挂掉时
总结:Redis集群好处与不足
介绍
1、redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
为什么要集群?
1、我们知道,单个redis是不稳定的,当服务宕机了,就没有可以用的服务了,所以说单个redis能力是有限的
2、可以进行读写分离,主服务器写,从服务器读,还可以利用薪火相传,当主服务器宕机了,从服务器顶上去;
配置集群
首先要删除备份文件rdb/aof
配置redis配置文件,在里面加上集群(cluster)的配置信息
将其余的redis服务器配置文件进行修改
发现一个小bug,6379,6380,6381端口的集群模式没有开启成功
小白这里怀疑应该是之前这三端口没用重启,所以我们将它们杀死,然后将服务启动即可
重新启动这三个端口的服务
看看节点(nodes)是不是都在
合成集群
那么问题来了,在哪合成集群呢?
在opt目录下redis-版本下的src文件夹中,有一个rb环境,集群的合体依赖于这个环境
1、replicas:表示以什么样的方式配置集群:1是最简单的方式配置集群,我们这里一台主机一台从机刚好三组;
启动命令
启动成功
集群的方式连接redis服务(任何一个入口都能连接到)
命令:
redis-cli -c -p 端口:启动集群
cluster nodes:查看集群信息
redis cluster如何分配六个节点
每个主服务器都尽量不要在相同的ip地址上,从服务器也是;
因为当你注服务器挂了,你的从服务器可以顶上去(利用哨兵模式);
什么是slots(插槽值)
介绍:当你在集群中进行对某key操作的时候,会计算key的插槽,然后会根据你操作对应的插槽值放到对应的服务器中;
每个服务器都对应的一个节点node,不同节点负责不同范围的插槽
作用:分担压力,将key分担在不同的服务器上(这应该就是集群的核心了)
例子:
例子
当插槽值是其他服务器范围(根据key来计算)
在集群中设置多个key
利用组名进行计算插槽值:mset 键名{组名} 键值 键名{组名} 键值
这里6381服务器——>6380服务器
这个密码认证真的烦;
根据key计算它的插槽值:cluster keyslot 键名
根据插槽值得到key:cluster countkeysinslot 插槽值
只能得到自己服务器范围的key
返回count个slot槽中的键
命令:cluster getkeysinslot 槽 数量
故障修复
当6379宕机时,主服务器会另起高人,比如下面6389
当6379又重新启动时,就会成为6389的小弟了,变成从服务器(也就是哨兵模式啦)
当主从都挂掉时
根据配置来决定,在对应的conf配置文件中,参数:cluster-require-full-converage:yes/no
yes:整个集群都挂掉
no:该段插槽数据全部不能用,但是其他的还是可以的
集群的Jedis开发
总结:Redis集群好处与不足
好处:
1、实现扩容;
2、分担压力,根据键对应插槽放在不同的服务器下;
3、无中心化配置,任何一个节点都能切换到其他节点,比如说:在6379下执行命令,发现操作时6380的,那么我们会立马切换到6380端口执行命令;
不足:
多键操作操作不支持,需要用mset 键名{组名}键值 的操作来执行,还多弄了一个组
多建的redis事务是不支持的,lua脚本不支持;
像之前的秒杀,如果用户这个key和库存key不在同一个服务器下,怎么秒杀呢?