七大核心具体价值
节点启动时会读取node.conf文件,把里面的信息加载到myself和cluster两个变量中。Slot信息会被转换成bitmap保存在myself变量中。并且slot信息还会逆向的转换成slot到节点的映射保存在cluster变量中。 hash slot map变更或者node table变更,就是修改内存中的myself变量和cluater变量,并且每次变更都会把这两个变量序列化转化后保存到node.conf中。 15、查看configuration Redis Cluster提供了两个命令来查看configuration:
第一个是CLUSTER SLOT命令,用来展示hash slot维度的信息,CLUSTER SLOT命令的展示如下: 把所有的key迁移完一般需要一些时间,也就是说在开始迁移后和完成迁移前,在这个窗口期内,key的实际的分布,与hash slot map里记录的是不一致的,client按照hash slot map访问key,会出现错误。 Redis Cluster通过ASK redirection来解决这个问题。按照client端的hash slot map,slot1的key一定会发给节点A,节点A收到这个请求后,如果发现这个key已经迁移到节点B了,那么就会给client回复ASK redirection,client收到ASK redirection后,会向节点b先发送一个ASKING命令,之后在发送对这个key的请求。 14、Configuration的实际存储 Hash slot map和node table都是逻辑上的结构,他们在Redis Cluster中的实际存储结构稍有不同(详情看结尾参考资料1、2、3、4)。 在节点的内存中,用两个变量来存储这两个信息:
所有Configuration的更改都会被保存到磁盘中,具体来讲是保存到一个名字叫node.conf的文件中,这个文件是Redis Cluster负责写入的,不需要人工配置。 node.conf按照节点维度进行保存。每一行对应一个节点,每行分别包含这些信息:id,ip:port,flag,slaveof,ping timestamp, pong timespamp,configEpoch,link status,slots。 所有的节点结束后,会在文件的最后保存curruntEpoch和lastVoteEpoch两个变量。其中flag字段是枚举类型,会指明这个节点是不是自己,节点类型是master还是slave。 如果是slave节点,则会在slaveof字段记录其master节点的id。如果是master节点,则在最后多一个slots字段,记录着这个节点负责着哪些slot。Flags字段还记录着其他非常重 要的状态,本文就不继续展开了。 同样,ping timestamp、pong timestmap、link staus三个字段本文也不继续展开了。
具体的node.conf文件类似下面的例子: (编辑:济宁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |