集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgyN9deS-1656679467436)(C:/Users/86158/AppData/Roaming/Typora/typora-user-images/image-20220701195734260.png)]](https://1000bd.com/contentImg/2022/07/01/224032916.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fkj7gDkj-1656679467437)(C:/Users/86158/AppData/Roaming/Typora/typora-user-images/image-20220701195820347.png)]](https://1000bd.com/contentImg/2022/07/01/224033194.png)
1.分散单台服务器的访问压力,实现负载均衡
2.分散单台服务器的存储压力,实现可扩展性
3.降低单台服务器宕机带来的业务灾难
%16384是取模运算
如果又添加了一个服务器,或者有一个服务器突然宕机了,怎么办?
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhZAyE1t-1656679467438)(C:/Users/86158/AppData/Roaming/Typora/typora-user-images/image-20220701195945626.png)]](https://1000bd.com/contentImg/2022/07/01/224033415.png)
37所在的小方框叫作”槽“
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u7mgz9Pk-1656679467438)(C:/Users/86158/AppData/Roaming/Typora/typora-user-images/image-20220701200237166.png)]](https://1000bd.com/contentImg/2022/07/01/224033693.png)
如果现在又添加了一个服务器,或者有一个服务器突然宕机了,怎么办?
如下举例是3个服务器,又添加了一个服务器,变成了4个,则其他三个服务器每人掏出来一部分key给新来的服务器,进行优化。
所谓的增添节点与去节点其实是改变槽所存储的位置
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INs7krGq-1656679467438)(C:/Users/86158/AppData/Roaming/Typora/typora-user-images/image-20220701201006967.png)]](https://1000bd.com/contentImg/2022/07/01/224033964.png)
1.加入现在有客户端进行访问数据库,进行key的查找,key被经过两个算法计算以后,得到key对应的存储槽的位置,假如计算的结果是A里面的35号槽,如果一次命中的话就直接返回,没有命中的话,35号槽会根据这个key进行查找,告诉客户端是在B那个槽里面,客户端会再去B里面的槽进行查找(注意:不是A去查找,是客户端再去查找,避免客户端自己多次去别的地方自己一个个挨着找)
2.最多两次即可命中
注意:各个数据库里面的槽的编号不一定是连续的,是散的
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JkqhRdyG-1656679467439)(C:/Users/86158/AppData/Roaming/Typora/typora-user-images/image-20220701201427295.png)]](https://1000bd.com/contentImg/2022/07/01/224034172.png)
1.原生安装(单条命令)
1)配置服务器(3主3从)
2)建立通信(Meet)
3)分槽(Slot)
4)搭建主从(master-slave)
2.工具安装(批处理)
1.cluster-enabled yes|no
把该服务器添加为节点
2.cluster-config-file
cluster配置文件名,该文件属于自动生成。
如果我们给指定名字的话,会自动生成该指定名字的cluster-config-file ;
如果我们给未指定名字的话,会自动生成一个默认名字的cluster-config-file ;
举例:cluster-config-file nodes-6379.conf
仅用于快速查找文件并查询文件内容。
(注:我们尽量给指定名字,因为在大量节点的情况下默认生成的cluster-config-file文件名字都一样,容易混淆)
3.cluster-node-timeout
节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
4.cluster-migration-barrier
master连接的slave最小数量
1.查看集群节点信息
cluster nodes
2.进入一个从节点 redis,切换其主节点
cluster replicate <master-id>
3.发现一个新节点,新增主节点
cluster meet ip:port
4.忽略一个没有solt的节点
cluster forget <id>
5.手动故障转移
cluster failover
redis-trib相当于一个脚本,把cluster的一些命令进行优化,实际中用cluster自带的命令或者redis-trib命令都可以
1.添加节点
redis-trib.rb add-node
2.删除节点
redis-trib.rb del-node
3.重新分片
redis-trib.rb reshard