介绍
集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
解决的问题:
业务发展过程中遇到的峰值瓶颈
- 如: redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒
- 如: 内存单机容量达到256G,当前业务需求内存容量1T
集群作用:
- 分散单台服务器的访问压力,实现负载均衡
- 分散单台服务器的存储压力,实现可扩展性
- 降低单台服务器宕机带来的业务灾难
Redis集群结构设计原理
数据存储设计:
- 将所有的存储空间计划切割成16384份(也叫槽),每台主机保存一部分,每份代表的是一个存储空间,不是一个key的保存空间
- 通过CRC16算法设计,计算出key的值,再将计算的值取模, 算出应该保存的位置, 将key按照计算出的结果放到对应的存储空间
当我们增加节点(redis机器)时,原有的每台redis都会拿出一部分槽,分给这个新的节点,我们增加减少节点实际上就是对槽进行分配
集群内部通讯设计:
每个节点之间都是互联的,都互相知道每个存储空间的槽是多少
当客户端访问数据时,集群收到key,将key进行计算后去节点中查找对应的槽,
- 如果 一次命中,直接返回
- 如果一次未命中,告知具体位置(最多两次找到)
Cluster集群结构搭建
配置
- 添加节点
cluster-enabled yes|no
- cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
cluster-config-file <filename>
- 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
cluster-node-timeout <milliseconds>
- master连接的slave最小数量
cluster-migration-barrier <count>
案例:
在这里我准备启动6个节点
将每个节点服务启动,查看一下启动的redis服务
- Cluster构建集群
这里用的是ruby脚本
./redis-trib.rb create --replicas <num> <ip port ...>
集群配置完成后,redis客户端启动有变化
master客户端: redis-cli -c
slave客户端: redis-cli -c -p <prot>
存值
取值
Cluster节点操作命令
查看集群节点信息
cluster nodes
进入一个从节点 redis,切换其主节点
cluster replicate <master-id>
发现一个新节点,新增主节点
cluster meet ip:port
忽略一个没有solt的节点
cluster forget <id>
手动故障转移
cluster failover