redis 集群环境搭建和工作原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis 集群环境搭建和工作原理相关的知识,希望对你有一定的参考价值。


如果大家有前面安装,或者主从等相关内容查看相关阅读,这里是基于以上内容都会的情况下直接搭建的集群环境

redis集群相关介绍

redis

  • redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本;
  • redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
  • redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
  • 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
  • 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
  • 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
  • 综上所述,每个Redis集群理论上最多可以有16384个节点。

redis


redis

redis 集群前准备工作

redis


这里我创建了一个clusterconf文件夹目的是把集群的相关配置都放在这个下面

redis


复制一份原来的redis-6379.conf文件到这个文件夹下内容添加红框内容,含义分别是:

redis


redis

175  sed "s/6379/6380/g" redis-6379.conf redis-6380.conf 
176 sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf
177 sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf
178 sed "s/6379/6382/g" redis-6379.conf > redis-6382.conf
179 sed "s/6379/6383/g" redis-6379.conf > redis-6384.conf
180 sed "s/6379/6384/g" redis-6379.conf > redis-6384.conf
181 sed "s/6379/6385/g" redis-6379.conf > redis-6385.conf

1复制为6(一会3主3从) ,使用这个命令复制出来的文件内容都已经修改好了,不用一个一个的去修改了,dir是配置的data我把data下面全部删除,方便后面我们观察效果,

redis


如果没有安装ruby的情况下安装ruby

yum install ruby

我们现在开启6个窗口,启动cluster下面的6个rides

redis


这里就是正常启动rides没有任何区别我这里是用的窗口启动方便观察日志,生产环境不会这么做的,启动也不会一个一个的启动,使用一个脚本就可以,这都是次要的全部启动就ok了

到这来准备工作就完成了

redis集群操作

我们在打开一个窗口启动集群

低版本都是用redis-trib.rb 命令

redis


这里直接提醒我们命令已经换了

redis-cli --cluster create 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 --cluster-replicas 1

这里我们就直接去我们redis安装目录下使用redis-cli命令启动了,cluster-replicas 1 这个1 表示主后面跟几个从,我们这里是3主3从所以是1,看下面的打印信息前面3个为主后面三个为从

redis


redis


上面3行表示每个主分的曹的编号,下面3行是表示哪个从连的哪个主此时我们看看我们data目录下

redis


redis


继续gogo

redis


redis


这里我把每个信息都截图下拉目的是方便一会我们理解其中的原理

主的信息

![在这

redis


这类说明下:上面环境搭建好了是好了,但是由于一个虚拟机跑6个redis导致直接卡死没办法我复制了2个虚拟机下面的截图是基于新环境下搭建的

说明如下:

192.168.43.230:6379

主1

192.168.43.231:6379

主2

192.168.43.232:6379

主3

192.168.43.230:6380

从1

192.168.43.231:6380

从2

192.168.43.232:6380

从3

数据设置和获取

存数据

redis


此时链接客户端的时候需要加-c

slot 5798 也就是说存储到曹编号是5789上面

redis


主1设置数据

redis


redis


主2 从3获取数据都没问题,当然其他的都可以获取,这里就不一一截图了

主从切换

从下线

这里我就让从1下线:

redis


这个时候另外五个都获取到从1下线了,大家可以观察每一个窗口的日志信息从1上线:

redis


相互通信 从1又上线了, 其他的同步信息就不说了,从下线还是比较简单

主下线

主3 下线

redis


此时我们查看下节点信息:

redis


4个主一个fail的3个成功的, 2个从,也就是说一个slave编程了master

我们再让下线的上线:

redis


redis


这个时候我们发现主从发生切换

其他节点操作命令

redis


以上是关于redis 集群环境搭建和工作原理的主要内容,如果未能解决你的问题,请参考以下文章

详解RabbitMQ集群原理,值得收藏

Docker搭建Redis Cluster集群及扩容和收容

REDIS04_主从复制概述及搭建反客为主薪火相传原理哨兵模式集群搭建

redis高级应用(集群搭建集群分区原理集群操作)

redis集群为啥要ruby

分布式缓存技术redis学习系列——redis高级应用(集群搭建集群分区原理集群操作)