什么是集群
集群就是使用网络将若干台计算机连接到一起,并且提供同一的管理方式,使其对外呈现单机的服务效果。
集群作用
- 分散单台服务器的访问压力,实现负载均衡
- 分散单台服务器的存储压力,实现可扩展性
- 降低单台服务器宕机带来的灾难性的影响
Redis集群结构设计
Redis会将所有的服务器的存储空间等分切割为16384份,切割后的每一个空间称之为一个槽
当需要存储数据时,首先将该数据通过RCR16(循环冗余校验)生成的值与16384取模,得到结果
按照key计算得到的结果,存储至对应的槽中
当有新的服务器加入或是有服务器退出时,已存在服务器将自己的槽位分享给新机器或是退出服务器将其所持有的槽位分享给剩余机器。
集群内部通讯设计
-
当搭建好集群后,所有服务器将会建立连接互相通信,记录各个库中槽的编号数据
-
当有数据进入,如果第一次访问到的计算机直接命中,则返回数据
-
如果所需存储数据不在第一次访问的计算机中,则返回所在计算机位置,通过该位置访问获取数据
-
结论:最多两次可以命中数据
集群搭建
- 配置文件
cluster-enabled yes|no //启动cluster集群,称为集群中的一个节点
cluster-config-file <filename> //启动配置文件位置
cluster-node-time <milliseconds> //超时时间,单位为毫秒数
cluster-migartion-barrier <count> //master连接slave的最小数量
- 启动集群方式
redis-trib.rb create --replicas 数字 master的ip:port ... slave的ip:port ...
//replicas用于指定内部结构,数字表示一个master对应几个slave
连接至集群方式
redis-cli -c //以集群方式启动客户端
主从下线与主从切换
当从机下线后,对应的主机发送信息标记从机下线
主机下线后,从机多次连接失败,进行故障转移,产生新的master,并标记原有master状态为fail,当原先master上线,自动转换为slave
- cluster节点操作命令
cluster nodes //查看集群节点信息
cluster replicate <master-id> //切换主节点
cluster meet ip:port //新增主节点
cluster forget <id> //忽略一个没有solt的节点
cluster failover //手动故障转移