Redis集群(windows版本操作)
一、概念篇
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版本操作)相关推荐
- Redis集群Windows
一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址 ...
- Mysql Cluster 集群 windows版本
VM1:192.168.220.102 管理节点(MGM) VM2:192.168.220.103 数据节点(NDBD1),SQL节点(SQL1) VM3:192.168.220.104 数据节点(N ...
- Python与redis集群进行交互操作
安装包如下 pip install redis-py-cluster redis-py-cluster源码地址https://github.com/Grokzen/redis-py-cluster 创 ...
- Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件
对于redis-sentinel我在之前的文章中Redis集群~StackExchange.redis连接Twemproxy代理服务器 已经说过,它是一个仲裁者,当主master挂了后,它将在所有sl ...
- Redis集群Cluster部署
这篇Redis 集群部署笔记参考的书籍资料是: <Redis入门指南>第二版,作者:李子骅 第8章 <Redis开发与运维> 作者:付磊 第10章 以下是学习笔记,记录了Red ...
- windows版本下的 redis 集群配置
windows下的redis配置 https://www.cnblogs.com/thirteen-zxh/p/9187875.html ( 集群后篇) https://www.cnblogs.com ...
- Windows平台下的Redis集群搭建(简单有效)
1. 下载redis Windows版本下载:https://github.com/MicrosoftArchive/redis/tags 然后进入目录执行命令redis-server.exe red ...
- Redis集群搭建(转自一菲聪天的“Windows下搭建Redis集群”)
配置Redis参考:http://blog.csdn.net/zsg88/article/details/73715947 使用Ruby配置集群参考:https://www.cnblogs.com/t ...
- Windows下Redis集群搭建(超详细教程)
文章目录 一.Redis单机版安装 二.Redis集群的安装 1.构建集群节点目录 2.下载Ruby并安装 3.构建集群脚本redis-trib.rb 4.构建集群 三.将Redis注册生window ...
最新文章
- 用iPhone薅Google羊毛:相册可无限存储高清照片,只要一步设置就搞定
- 如何在fluid中添加自定义控件
- 当鼠标移动到图片上会显示 不同的背景
- Java微信公众平台开发(二)--微信服务器post消息体的接收
- 为什么Docker是云计算必然的现在和未来
- jzoj3348,bzoj3258-秘密任务【最短路,网络流最小割】
- cad多段线画圆弧方向_CAD箭头怎么画
- laravel5.4+vue+vux+element的环境搭配
- 安徽大学计算机科学与技术学院刘峰,刘峰
- Jbpm工作流表补数记录
- java 线程修改数据库连接_如何强制Java线程关闭线程本地数据库连接
- log4j2自定义级别日志
- 正离子计算机扫描检测,扫描电子显微镜
- 学习光线跟踪一样的自3D表征Ego3RT
- 帝国cms !--list.var1--,!--list.var2--的终极用法
- cpu之ALUSrc_Reg
- 【Maven】---Linux搭建Nexus3.X私服
- python中line的意思_关于python代码,line[:-1]的意思
- PLC读取PC文件(汇川PLC读取电脑上的文件)
- 如果你看不懂KMP算法,一定要看看这个视频!!!!!!!!!!!虽然讲的慢,但是很详细!!!!
热门文章
- tr td 编写表格
- edge运行js文件,控制台查看结果
- 用cmd控制台编译java文件和运行class文件
- 华科计算机博士公寓宿舍,这次让你看看华科真正的豪华版宿舍!2.0(同济篇)...
- TI_BLE软件开发者指导6——L2CAP(笔记)
- TNNLS | GNN综述:A Comprehensive Survey on Graph Neural Networks
- CTO离职前悄悄传了我一招,和我说吃透跳槽涨薪指日可待
- linux 计划任务不能执行 解决思路(PHP)
- windows 访问控制模型(一)
- Class文件结构介绍[属性表集合]