为何搭建集群?node
- 自动把数据划分到各个节点
- 单个节点故障时可继续工做
集群中每一个节点通常须要两个端口redis
- 10000 Redis Cluster 节点对节点的Communication channel,用于节点通讯
- 6379 普通的server client
Redis Cluster通常与Docker配合使用.Docker 提供port mapping技术,能够让一个程序实际运行的端口与暴露在外的端口不一样,也就是可以让一个端口运行多个程序。算法
Redis Cluster 的数据分片(sharding翻译过来是这个吧)app
- 算法:一个Redis Cluster有16384个key slot(槽),对于一个给定的key咱们按必定方式对16384取模
- 每一个node负责一部分的key slot. 如如今集群里有三个节点A,B,C。 给A分配0~5500的key slot,B分配5500~11000,C分配11001~16384的key slot。 一个命令若涉及多个key,那么这些key都属于一个slot
master-slave模型翻译
- 为了保证集群的available,cluster为每个master node 建立了一个slave node.如如今有三个node A,B,C,在建立它们的同时又建立了A1,B1,C1做为备份。A挂了就用A1,A1挂了那就没办法了。
Redis Cluster的一致性server
- redis提供wait命令,实现同步写,但在复杂状况下仍可能出现写丢失。
- node timeout ,这个时间事后mastrer被它的replicas替代。这个参数很重要