一、概念篇

Redis集群的三种模式

1.主从模式

2.Sentinel模式

3.cluster模式

主从模式

一主多从的特点如图,整个集群只有一个master,

1.master负责写数据(master也可以读),slave负责读数据

2.master如果故障集群将无法提供写服务(因为不会选出新的master),将主服务器重启即可恢复。

3.当写操作发生时会master会将数据发送给slave,保证数据一致性

4.slave如果重启需要重新使用slaveof指令连接集群

链表式主从

特殊的主从模式,缺点是如果slave0故障了后边的slava1与slava2都无法正常同步数据了。优点是减轻了master的同步数据负担,master只负责它的从节点的数据同步。

sentinel模式

sentinel的意思是哨兵,顾名思义就是一个哨兵监控着Redis集群的master是否故障,如果master故障了将由sentinel开启投票选举出一个新的master,当故障的master重启时,故障重启的master将会成为新master的slave。

主从复制数据同步流程

slave启动完成时,立即向master发送同步请求。master收到同步请求后触发RDB策略,保存当前时间的master数据集,并把该RDB文件发送给slave,slave根据此RDB文件进行数据同步。

另外每当master执行写操作之后,都会将该操作发送至从服务器与之同步。


cluster模式 

如果不需要扩容一般是不需要用到cluster模式的(不存在Redis内存放不下的情况),但如果Redis已经容量不够了则必须使用cluster。上面的主从模式只解决了高可用的问题,想容量大还得看cluster。假设我们现在的内存是16G,而Redis中要放的内存有48G,此时我们可以将Redis分为三块,如图(实际情况请对内存与需求做评估后决定)。

可见cluster实现了redis的水平扩容。


二、操作(说明:由于链表式主从是特殊的主从模式,配置方式与主从模式一致,故不再进行演示)

下面我们以Windows版本Redis演示集群操作

主从模式

1.下载Redis,GitHubWindows版本下载。

2.解压文件后复制两份同样的文件,修改文件夹名称方便识别。

3.修改每个文件夹中的 redis.windows.conf文件,将port改为对应的port,并且将dbfilename改为不同的值。

6379

 6380

剩下的6381如法炮制。

4.创建redis-server.bat文件在对应的文件夹目录下(三个redis副本皆需要此文件),右键编辑粘贴下面脚本保存退出。

redis-server.exe redis.windows.conf

5.创建redis-cli.bat文件在对应的文件夹目录下(三个redis副本皆需要此文件),右键编辑粘贴下面脚本保存退出(请自行修改相应的port)。

redis-cli.exe -p 6379

此时每个redis文件夹内应该有如下两个bat文件

6.在对应的redis文件夹中启动redis-server.bat文件。

7.在对应的redis文件夹中启动 redis-cli.bat文件

8.6380 、 6381两台redis通过 slaveof 127.0.0.1 6379 命令来选择6379当master。执行命令后,6379为master,6380,6381为slave。

此时主从模式搭建成功,我们来试试效果

测试也没问题,搭建成功后我们再来观看一些主从模式的特性。

当master故障时(把master关掉):

info replication命令可以查看redis副本的状态。可以看到master的status为down。

首先可以看到我们依旧能正常读,但因为master故障我们无法往集群中写入数据。并且两台slave并没有任何一台被提升为master,我们可以从server的log看到两台slave一直在等待master重启。

此时我们将master重新启动(启动redis-server.bat文件)

当master重新连接集群时,两台slave将与master进行数据同步(我这里因为默认的RDB策略未保存RDB文件所以数据被清空了)。

再使用master写入k1 v1

当slave故障时重启会不会重新与集群连接呢?让我们看看

先关掉6381

重启6381之后再使用info replication观察它的信息

所以当slave故障重启后我们需要重新使用slaveof 命令来与master重连。

测试到这里可以很清楚的看见与我们概念篇的描述相符合。


sentinel模式

sentinel模式以主从模式为基础,所以在这里我们与上面一样启动6379,6380,6381三台redis实例,6380,6381执行slave of 6379指令,6379为master,另外两台为slave。

1.现在我们要做的事是创建sentinel.conf配置文件

sentinel配置文件解释:

port  sentinel服务运行的端口
sentinel monitor <实例名称(自定义)> <IP> <PORT>
sentinel down-after-milliseconds <实例名称> <timeout(ms)> : 指定的实例名称在指定的毫秒内如果未响应则判定实例故障
sentinel parallel-syncs <实例名称> <number> 故障时只能有<number>个redis slave做同步操作
sentinel failover-timeout mymaster <timeout(ms)> : 指定时间内未完成failover event,则判定failover失败

6379的sentinel配置文件

port 10000
sentinel monitor 6379 127.0.0.1 6379 1
sentinel down-after-milliseconds 6379 10000
sentinel parallel-syncs 6379 2
sentinel failover-timeout 6379 10000

6380

port 10001
sentinel monitor 6379 127.0.0.1 6379 1
sentinel down-after-milliseconds 6379 10000
sentinel parallel-syncs 6379 2
sentinel failover-timeout 6379 10000

6381

port 10002
sentinel monitor 6379 127.0.0.1 6379 1
sentinel down-after-milliseconds 6379 10000
sentinel parallel-syncs 6379 2
sentinel failover-timeout 6379 10000

2.在各个redis文件夹下创建redis-sentinel.bat文件

redis-server.exe sentinel.conf --sentinel

3.去6379、6380、6381下启动redis-sentinel.bat,成功如下图所见

4.现有6379,6380,6381三台Redis实例,6379为master、其他两台为slave

现在我们开始测试sentinel模式,当6379故障时会发生什么?

关掉6379实例。

从图中可以观察到在sentinel模式下,6379master故障时,6380被选举为master,并且6381自动切换为6380的slave。

可见sentinel模式自动选举master,有这种模式我想我们再也不需要深更半夜爬起来重启redis了,于是我们可以下出结论,与主从模式对比,肯定选择sentinel模式。


cluster模式

说明:我们将创建一个三主三从的集群。

1.复制6个Redis文件夹,分别修改对应的配置文件。

配置文件修改

port 6379 #改为对应的端口号
cluster-enabled yes
cluster-config-file nodes-6379.conf #改为对应的端口号以区分
cluster-node-timeout 15000

2.创建bat文件

title redis-a-6379;
redis-server.exe redis.windows.conf

请如上创建其他bat文件。

3.安装ruby(我也不想装,redis集群脚本需要ruby环境)

Ruby-Downloads 下载地址。

下载完成后打开exe文件安装就好了。

安装完成出现此内容时选1

如果出现这种东西就是网速太慢(我是开代理解决的,各位可以关掉窗口打开CMD输入

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

gem sources -l)

使用ruby-v出现下图内容时表示安装完成

安装redis依赖

gem install redis

4.下载集群脚本redis-trib.rb

redis-trib.rb 下载_new Girl的博客-CSDN博客_redis-trib.rb下载 这位老哥这里可以下载。

下载后放到这个位置中

5.先启动所有的redis实例

cmd到redis-trib.rb文件中,执行

ruby redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6389 127.0.0.1:6398 127.0.0.1:6380 127.0.0.1:6390 127.0.0.1:6399 命令

(--replicas的意义是指定集群中每个master配备几个slave。)

最后一行是问我们是否接收此分配:输入yes。

可以看到这次分配 6380,6390,6399是master,其他三台是slave。

至此Redis的集群搭建完成。

6.通过集群方式连接redis cluster

创建bat文件,

redis-cli -c -p 6379

运行bat文件,

使用cluster nodes命令查看集群信息:

关于slot的说明

每个Redis集群中总共有16383个slot(简单理解为一个范围),当有一个K V键值对想被放入集群时,首先对key进行计算,看此值属于哪个slot(范围),这一对键值对就会被放入哪个master中,因为此机制,redis集群才能实现水平扩容。

可以看到5493值被放入了6389,正好符合上面的slot。

关于Redirected说明

如果要get的值或者set的值不在此次连接的实例上,因为redis的无中心化配置,将会切换到对应的实例上。

7. 测试--当master故障会如何?

关闭6398实例。

当6398故障时,我们任然可以从6399实例获取到k1的value

可以看到6399实例被提升为master了。 当6398重启时,角色将从master转为slave。

如果某一节点的master-slave全部挂掉了,集群是否还可用?此时我们关掉6379与6380。

所以,此处在配置文件总的配置cluster-require-full-coverage如果设置为yes时,整个集群也会down。如果配置为no, 那么集群可以使用,该slot范围无法再存储与读取数据。有兴趣的小伙伴可以试一试。

至此已将所有的redis集群模式介绍完成,有何不妥之处还请各位指正,谢谢!

注意:请删除每个redis文件夹下的此文件再启动,否则会出现错误

Redis集群(windows版本操作)相关推荐

  1. Redis集群Windows

    一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址   ...

  2. Mysql Cluster 集群 windows版本

    VM1:192.168.220.102 管理节点(MGM) VM2:192.168.220.103 数据节点(NDBD1),SQL节点(SQL1) VM3:192.168.220.104 数据节点(N ...

  3. Python与redis集群进行交互操作

    安装包如下 pip install redis-py-cluster redis-py-cluster源码地址https://github.com/Grokzen/redis-py-cluster 创 ...

  4. Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件

    对于redis-sentinel我在之前的文章中Redis集群~StackExchange.redis连接Twemproxy代理服务器 已经说过,它是一个仲裁者,当主master挂了后,它将在所有sl ...

  5. Redis集群Cluster部署

    这篇Redis 集群部署笔记参考的书籍资料是: <Redis入门指南>第二版,作者:李子骅 第8章 <Redis开发与运维> 作者:付磊 第10章 以下是学习笔记,记录了Red ...

  6. windows版本下的 redis 集群配置

    windows下的redis配置 https://www.cnblogs.com/thirteen-zxh/p/9187875.html ( 集群后篇) https://www.cnblogs.com ...

  7. Windows平台下的Redis集群搭建(简单有效)

    1. 下载redis Windows版本下载:https://github.com/MicrosoftArchive/redis/tags 然后进入目录执行命令redis-server.exe red ...

  8. Redis集群搭建(转自一菲聪天的“Windows下搭建Redis集群”)

    配置Redis参考:http://blog.csdn.net/zsg88/article/details/73715947 使用Ruby配置集群参考:https://www.cnblogs.com/t ...

  9. Windows下Redis集群搭建(超详细教程)

    文章目录 一.Redis单机版安装 二.Redis集群的安装 1.构建集群节点目录 2.下载Ruby并安装 3.构建集群脚本redis-trib.rb 4.构建集群 三.将Redis注册生window ...

最新文章

  1. 用iPhone薅Google羊毛:相册可无限存储高清照片,只要一步设置就搞定
  2. 如何在fluid中添加自定义控件
  3. 当鼠标移动到图片上会显示 不同的背景
  4. Java微信公众平台开发(二)--微信服务器post消息体的接收
  5. 为什么Docker是云计算必然的现在和未来
  6. jzoj3348,bzoj3258-秘密任务【最短路,网络流最小割】
  7. cad多段线画圆弧方向_CAD箭头怎么画
  8. laravel5.4+vue+vux+element的环境搭配
  9. 安徽大学计算机科学与技术学院刘峰,刘峰
  10. Jbpm工作流表补数记录
  11. java 线程修改数据库连接_如何强制Java线程关闭线程本地数据库连接
  12. log4j2自定义级别日志
  13. 正离子计算机扫描检测,扫描电子显微镜
  14. 学习光线跟踪一样的自3D表征Ego3RT
  15. 帝国cms !--list.var1--,!--list.var2--的终极用法
  16. cpu之ALUSrc_Reg
  17. 【Maven】---Linux搭建Nexus3.X私服
  18. python中line的意思_关于python代码,line[:-1]的意思
  19. PLC读取PC文件(汇川PLC读取电脑上的文件)
  20. 如果你看不懂KMP算法,一定要看看这个视频!!!!!!!!!!!虽然讲的慢,但是很详细!!!!

热门文章

  1. tr td 编写表格
  2. edge运行js文件,控制台查看结果
  3. 用cmd控制台编译java文件和运行class文件
  4. 华科计算机博士公寓宿舍,这次让你看看华科真正的豪华版宿舍!2.0(同济篇)...
  5. TI_BLE软件开发者指导6——L2CAP(笔记)
  6. TNNLS | GNN综述:A Comprehensive Survey on Graph Neural Networks
  7. CTO离职前悄悄传了我一招,和我说吃透跳槽涨薪指日可待
  8. linux 计划任务不能执行 解决思路(PHP)
  9. windows 访问控制模型(一)
  10. Class文件结构介绍[属性表集合]