redis 集群环境搭建和工作原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 集群前准备工作
这里我创建了一个clusterconf文件夹目的是把集群的相关配置都放在这个下面
复制一份原来的redis-6379.conf文件到这个文件夹下内容添加红框内容,含义分别是:
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下面全部删除,方便后面我们观察效果,
如果没有安装ruby的情况下安装ruby
yum install ruby
我们现在开启6个窗口,启动cluster下面的6个rides
这里就是正常启动rides没有任何区别我这里是用的窗口启动方便观察日志,生产环境不会这么做的,启动也不会一个一个的启动,使用一个脚本就可以,这都是次要的全部启动就ok了
到这来准备工作就完成了
redis集群操作
我们在打开一个窗口启动集群
低版本都是用redis-trib.rb 命令
这里直接提醒我们命令已经换了
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个为主后面三个为从
上面3行表示每个主分的曹的编号,下面3行是表示哪个从连的哪个主此时我们看看我们data目录下
继续gogo
这里我把每个信息都截图下拉目的是方便一会我们理解其中的原理
主的信息
![在这
这类说明下:上面环境搭建好了是好了,但是由于一个虚拟机跑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 |
数据设置和获取
存数据
此时链接客户端的时候需要加-c
slot 5798 也就是说存储到曹编号是5789上面
主1设置数据
主2 从3获取数据都没问题,当然其他的都可以获取,这里就不一一截图了
主从切换
从下线
这里我就让从1下线:
这个时候另外五个都获取到从1下线了,大家可以观察每一个窗口的日志信息从1上线:
相互通信 从1又上线了, 其他的同步信息就不说了,从下线还是比较简单
主下线
主3 下线
此时我们查看下节点信息:
4个主一个fail的3个成功的, 2个从,也就是说一个slave编程了master
我们再让下线的上线:
这个时候我们发现主从发生切换
其他节点操作命令
以上是关于redis 集群环境搭建和工作原理的主要内容,如果未能解决你的问题,请参考以下文章