redis集群简介
redis是一个键值对,NOSQL,高性能存储系统,性能高,是分布式缓存的最佳人选,特别是node环境下,由于node的内存限制,是的node在内存方面寸土寸金,使用redis做缓存,是高性能高并发,node服务器最佳组合。
redis是使用内存进行存储的,所以就注定了他不适合非常大的持久性数据,这样的数据还是交给mongodb,elasticSearch,mysql来存储。使用redis一定要注意内存的浪费,redis是单线程的一定要注意redis对cpu的使用率,如果过高就会造成卡顿。redis的过期键数据回收机制有两种,惰性回收和定时回收。
redis哨兵是redis分布式的关键。下来看一下redis主从复制问题,在主从复制模式下主节点将数据同步到从节点,一旦主节点出问题从节点顶上去,这样以来一个关键的问题是主节点的读和写的能力就决定了整个系统的能力。如果这个过程有人工干预必然造成数据不完整和丢失,这就要求我们构建高可用的redis集群。
一个高可用的redis主从复制模式,对于小型的公司这样足够了。它包括若干个哨兵节点和若干个数据节点,每个哨兵节点会对数据节点和其余的哨兵节点进行监控,当发现节点不可用时,会对节点进行标识,如果被标识的节点是主节点,他就会和其他哨兵节点进行协商,当大多数哨兵节点都认为主节点不可用,他们会自动选出一个哨兵节点完成鼓掌转义工作,整个过程自动化,从而使系统高可用。
一个分布是数据库首先要解决的问题是,把这个数据集合按照分区映射到多个节点的问题,一般有三种选择:1,节点取余分区。2,哈希表分区。3,虚拟槽分区。redis采用的是虚拟槽分区。它是所有的键值根据哈希函数映射到0-16383的整数槽内,一个节点负责维护一部分槽位和数据,并且节点之间不断交换信息,一段时间后一个节点就知道整个集群的完整信息,但是这种信息交换是有成本的。理论上来讲,可以向集群的任意一个节点发送数据请求,如果该节点没有,它会自动向有的节点转发。如果你是运维工程师,里面设计的问题很多很复杂,这里不再赘述。