容量不够,redis如何进行扩容呢?集群。
redis集群实现了对redis的水平扩容,即启动n个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数的1/N.
1、代理主机的方式,至少需要8台服务器。(紫色的矩形框代表从服务器)
2、无中心化集群
任何一个服务都可以作为集群的入口
redis cluster 配置修改 (cluster:群,聚集)
配置集群: 将每个数据库配置文件的cluster-enabled 开启(设置成yes)即可。
cluster-enabled yes //打开集群模式
cluster-config-file nodes-6379.conf//设定节点配置文件名
cluster-node-timeout 15000(毫秒) //设定节点失联时间,超过后自动主从切换。
linux命令创建6个配置文件
cp redis6379.conf redis6389.conf //复制文件
vi redis6389.conf //查看文件内容
:%s/6379/6380 //修改端口号(替换)
:wq!//保存退出
6个节点合体:(使成为一个reids集群)
在这个目录下:cd/opt/redis-6.2.1/src
使用最简单的方式,一台主机(master),一台从机(slave),正好三组。
配置好集群以后,
查看集群信息:cluster nodes
如何分配6个节点:分配原则是尽量保证每一个主数据库运行在不同的ip地址,每个主库和从库不在一个ip地址上。
Redis 集群中内置了 16384 个哈希槽
当需要在 Redis 集群中放置一个 key-value时,redis 先对 key(有效值)使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
报错:
根据user组的名字计算插槽:
mset name{user} lucy age{user} 20
查看自己插槽范围的值
cluster keyslot cust
cluster countkeysinslot 4847
cluster getkeysinslot 4847 10//返回10个4847插槽中的键
故障恢复:
如果主节点下线,从节点能自动升为主节点。主节点再恢复的话,主节点就变为从机。
如果某一段插槽的主从服务都挂掉,取决于redis.conf中的参数配置
cluster-requrie-full-coverage 为yes,那么整个集群都挂掉
cluster-requrie-full-coverage 为no,那么该插槽数据全都不能使用,也无法存储
cluster nodes //查看当前服务的节点信息