《Redis集群整理!》要点:
本文介绍了Redis集群整理!,希望对您有用。如果有疑问,可以联系我们。
一.Redis集群
从实用性的角度,Redis集群提供以下功能:
1.自动把数据切分到多个redis节点中
2.当一部分节点挂了或弗成达,集群依然能继续工作
3.分区
Redis集群不是使用一致性哈希,而是使用哈希槽.整个redis集群有16384个哈希槽,决定一个key应该分配到那个槽的算法是:计算该key的CRC16结果再模 16384 .这样的分布方式方便节点的添加和删除.好比,需要新增一个节点D,只需要把A、B、C中的部分哈希槽数据移到D节点.同样,如果希望在集群中删除A节点,只需要把A节点的哈希槽的数据移到B和C节点,当A节点的数据全部被移走后,A节点就可以完全从集群中删除.因为把哈希槽从一个节点移到另一个节点是不需要停机的,所以,增加或删除节点,或更改节点上的哈希槽,也是不需要停机的.
4.哈希标签
如果key含有大括号”{}”,则只有大括号中的字符串会参与哈希,好比”this{foo}”和”another{foo}”这2个key会分配到同一个哈希槽,所以可以在一个命令中同时操作他们. 哈希标签
Redis集群不克不及保证强一致性.一些已经向客户端确认写成功的操作,会在某些不确定的情况下丢失.
redis集群中的每个节点都需要建立2个tcp连接,监听这2个端口:一个端口称之为“客户端端口”,用于接受客户端指令,与客户端交互,好比6379;另一个端口称之为“集群总线端口”,是在客户端端口号上加10000,好比16379,用于节点之间通过二进制协议通讯.各节点通过集群总线检测宕机节点、更新配置、故障转移验证等.客户端只能使用客户端端口,不能使用集群总线端口.
Redis集群混合使用了查询路由和客户端分区.
分区分歧实现方式
分区可以由一个软件栈的分歧部分完成.
· 客户端分区:客户端直接选择正确节点读写指定键.很多Redis客户实现了这种分区方式.
· 代理辅助分区:是指我们的客户端通过Redis协议把哀求发送给代理,而不是直接发送给真正的Redis实例服务器.这个代理会确保我们的哀求根据配置分区策略发送到正确的Redis实例上,并返回给客户端.Redis和Memcached的代理都是用Twemproxy (译者注:这是twitter开源的一个代理框架)来实现代理服务分区的.
· 查询路由:是指你可以把一个哀求发送给一个随机的实例,这时实例会把该查询转发给正确的节点.通过客户端重定向(客户端的哀求不用直接从一个实例转发到另一个实例,而是被重定向到正确的节点),Redis集群实现了一种混合查询路由.
5.集群配置
集群在redis.conf中的参数.
·
· cluster-enabled <yes/no>: 如果配置”yes”则开启集群功能,此redis实例作为集群的一个节点,不然,它是一个普通的单一的redis实例.
· cluster-config-file <filename>: 注意:虽然此配置的名字叫“集群配置文件”,但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态.通常是在收到哀求之后这个文件就会被更新.
· cluster-node-timeout<milliseconds>: 这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障.如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点.注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何哀求.
· cluster-slave-validity-factor <factor>: 如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点.如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移.假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点.注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到本来的主节点重新回归到集群,集群才恢复运作.
· cluster-migration-barrier <count>:主节点必要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移.更详细介绍可以看本教程后面关于副本迁移到部分.
· cluster-require-full-coverage <yes/no>:在部分key所在的节点弗成用时,如果此参数设置为”yes”(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作.
6.本身动手配置集群(3主3从)
后续会继续介绍,请存眷!
维易PHP培训学院每天发布《Redis集群整理!》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/9264.html