标签:class replicate 执行 记录 img CRC16 span redis master
集群中的数据存储设计
把redis所有的存储空间一共分为16384份,一共有16384个槽(可以理解为房间号),如果有四台存储结点,那么每台存储结点会有16384/4=4096个槽。第一台槽编号为0~4095,第二台槽编号为4096~8191,第三台编号为8192~12288,第四台编号为12289~16384
当新添加一个redis结点,原有的结点会分出去一部分槽给新的结点;例如现在有五个存储结点,每个结点上3276个槽,其他四个结点会分出一部分编号给第五个结点。
问题:一个新的key是怎么在集群中存储的呢?
当有一个key需要存储时,这个key会经过CRC16算法得到一个值,再把这个给值与16384取模,最终得到的值就是该key所对应的槽编号。
已经部署好集群,内部会有一个网络,各个结点会有一个记录表,记录对方的槽编号,比如有个客户端要存储key对应的槽为“37”,客户端会向A号结点查找编号为37的槽,如果命中直接插入,如果没有命中,A会查询记录表,查找37在哪个结点上,然后返回,客户端会重新向正确的结点访问。
以上是理论,下面是实战。
搭建集群,预备搭建一个三主三从的集群
第一步,编写配置文件
#添加节点 cluster-enabled yes|no #cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容 cluster-config-file <filename> #节点服务响应超时时间,用于判定该节点是否下线或切换为从节点 cluster-node-timeout <milliseconds>
第二步,准备依赖环境
#下载ruby sudo apt-get install ruby #安装redis的依赖 sudo gem install redis
第三步,在redis 的src目录下执行
#设置6379 6380 6381 master ./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
#反馈信息 M: 548f8bf34779ef033ae125d68e7b7d6344836b6a 127.0.0.1:6379 #分配了编号0-5460槽 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 6321d6c6948c5d591f9967bd4be6f7c840254198 127.0.0.1:6380 slots:5461-10922 (5462 slots) master 1 additional replica(s) #slave没有槽编号 S: 263212517bf06f13632cfbdded07187eca1c7457 127.0.0.1:6382 slots: (0 slots) slave replicates 548f8bf34779ef033ae125d68e7b7d6344836b6a M: c6bb805481b0487ce23d84c8321685c05d7d3a26 127.0.0.1:6381 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 7135c153f53d86e8ffa255847d1680b27b312028 127.0.0.1:6383 slots: (0 slots) slave replicates 6321d6c6948c5d591f9967bd4be6f7c840254198 S: c2e74da978d20efd07de3e7948a603c660992891 127.0.0.1:6384 slots: (0 slots) slave replicates c6bb805481b0487ce23d84c8321685c05d7d3a26
在集群中设置和获取数据
当集群中有一个slave下线
例如先让6382(slave)下线,观察6379(master)
然后再让6382上线,5379信息
我们让6379(master)下线,发现与6379连接的(6382)slave在十秒之后成为了新的master
然后再让6379(原master)上线,发现6379成为了slave
这些变化信息也会传递给其他主从结构
标签:class replicate 执行 记录 img CRC16 span redis master
原文地址:https://www.cnblogs.com/xiaoxiaolinux/p/13828646.html