码迷,mamicode.com
首页 > 其他好文 > 详细

redis集群及搭建

时间:2020-10-18 09:48:15      阅读:14      评论:0      收藏:0      [点我收藏+]

标签:class   replicate   执行   记录   img   CRC16   span   redis   master   

1、集群

  集群中的数据存储设计

  把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

技术图片

  这些变化信息也会传递给其他主从结构

redis集群及搭建

标签:class   replicate   执行   记录   img   CRC16   span   redis   master   

原文地址:https://www.cnblogs.com/xiaoxiaolinux/p/13828646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!