down redis集群_redis有哪些集群模式

Redis集群一般有5种:

1,主从复制

2,哨兵模式

3,Redis官方提供的Cluster集群模式(服务端)

4,Jedis sharding集群(客户端sharding)

5,利用中间件代理,比如豌豆荚的codis等

介绍完他们的模式,现在来分析一下他们的原理:

主从复制(Master-Slave Replication):

实现主从复制(Master-Slave Replication)的工作原理:Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave从节点服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

主从复制配置

修改从节点的配置文件:slaveof masterip masterport

如果设置了密码,就要设置:masterauth master-password

哨兵模式:

该模式是从Redis的2.6版本开始提供的,但是当时这个版本的模式是不稳定的,直到Redis的2.8版本以后,这个哨兵模式才稳定下来,无论是主从模式,还是哨兵模式,这两个模式都有一个问题,不能水平扩容,并且这两个模式的高可用特性都会受到Master主节点内存的限制。

Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用。

Sentinel(哨兵)进程的作用

监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。

提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

Sentinel(哨兵)进程的工作方式

每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。

如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)

如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有 Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态

当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)

在一般情况下, 每个 Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。

当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。

若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。

Redis官方 Cluster集群模式

Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供。

在这个图中,每一个蓝色的圈都代表着一个redis的服务器节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。

Redis集群数据分片

在redis的每一个节点上,都有这么两个东西,一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

Jedis sharding集群

Redis Sharding可以说是在Redis cluster出来之前业界普遍的采用方式,其主要思想是采用hash算法将存储数据的key进行hash散列,这样特定的key会被定为到特定的节点上。

庆幸的是,Java Redis客户端驱动Jedis已支持Redis Sharding功能,即ShardedJedis以及结合缓存池的ShardedJedisPool

Jedis的Redis Sharding实现具有如下特点:

采用一致性哈希算法,将key和节点name同时hashing,然后进行映射匹配,采用的算法是MURMUR_HASH。采用一致性哈希而不是采用简单类似哈希求模映射的主要原因是当增加或减少节点时,不会产生由于重新匹配造成的rehashing。一致性哈希只影响相邻节点key分配,影响量小。

为了避免一致性哈希只影响相邻节点造成节点分配压力,ShardedJedis会对每个Redis节点根据名字(没有,Jedis会赋予缺省名字)会虚拟化出160个虚拟节点进行散列。根据权重weight,也可虚拟化出160倍数的虚拟节点。用虚拟节点做映射匹配,可以在增加或减少Redis节点时,key在各Redis节点移动再分配更均匀,而不是只有相邻节点受影响。

ShardedJedis支持keyTagPattern模式,即抽取key的一部分keyTag做sharding,这样通过合理命名key,可以将一组相关联的key放入同一个Redis节点,这在避免跨节点访问相关数据时很重要。

利用中间件代理

中间件的作用是将我们需要存入redis中的数据的key通过一套算法计算得出一个值。然后根据这个值找到对应的redis节点,将这些数据存在这个redis的节点中。

常用的中间件有这几种

Twemproxy

Codis

nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android studio占内存大小,极大精简android studio在C盘的内存

在C盘占很大的内存大约就2种原因:1.SDK占内存太大2.AVD模拟器占内存太大第一种情况,移动SDK(用android studio不需要配置环境变量)先移动C盘的Android目录,里面是Sdk目录文件,复制到E盘,再删掉C盘的sdk,然后…

和gdi绘图效率比较_绘图计算器测评来袭!哪一款才是你AP考试的最佳拍档?

温馨提示:距离AP考试还有不到1个月。其中不少中国考生选择了理科科目,其中微积分,统计,化学,物理,生物的科目都可以使用绘图计算器。今天,小编收集了四款口碑不错的计算器进行测评,大…

android 将布局多次添加,android – 如何在布局xml中添加循环视图

您无法将aar文件添加到Eclipse中的libs文件夹(它不是jar文件)目前,使用新的RecyclerView的最佳方式是切换到Android Studio并将此依赖项添加到build.gradlecompile com.android.support:recyclerview-v7:只是一个说明.使用”占位符不是一个好习惯,但在这种情况下,您正在尝试预览…

去除小圆点_去除li小圆点以及解决其空格问题

不管是ul还是ol中的li前面始终有个小圆点,以前没有发现问题,都是直接给ul增加list-style:none;属性,可今天屡试不爽的属性出现问题了,上图通过两张截图可以清晰的看到虽然小圆点去掉了,但是还是占着位置。典型的占着**…

android webviewclient 点击事件,Android Api WebViewClient 详细解析

设计思想理解在WebView的设计中,不是什么事都要WebView类干的,有相当多的杂事是分给其他类做的,这样WebView专心干好自己的解析、渲染工作就行了。比如我们最熟知的,所有针对WebView的设置都封装到了WebSettings里。我们知道&…

js svg语音波动动画_11 个非常受欢迎的 JavaScript 动画库,值得学习!

1.Three.js超过46K的星星,这个流行的库提供了非常多的3D显示功能,以一种直观的方式使用 WebGL。这个库提供了、 、CSS3D 和 WebGL渲染器,让我们在设备和浏览器之间创建丰富的交互体验。该库于2010年4月首次推出,目前仍有近1000名贡…

hbuilder边框代码是什么_看懂HTML代码,摸清国外买家喜欢搜什么关键词

看懂HTML代码,摸清国外买家喜欢搜什么关键词大家每天都忙着找关键词,忙着写标题,忙着做各种的优化。目的就是想把自己的产品排名到前面,获得更多的曝光,带来更多的询盘。在这个过程中客服同时也是一名搜索优化人员&…

通域消化内镜Android患者版,市中心医院消化内科Ⅰ病区开创超声内镜治疗新领域...

胃底静脉曲张常见于肝硬化患者,易反复出现消化道出血症状,严重时危及生命。由于大部分肝硬化患者肝功能储备和手术耐受性差,内镜下组织胶黏合剂注射治疗是常用治疗方法。但对于合并较大直径的分流道患者来说,组织胶有可能通过分流…

android+放大缩小图片+有jar嘛,Android相册支持点击放大图片,滑动切换图片,手势放大缩小...

【实例简介】项目使用了开源框架Universal-Image-Loader显示本地图库所有照片点击放大,单击退出双击放大缩小支持左右滑动查看图片支持手势放大缩小图片【实例截图】【核心代码】ImageLoaderTest└── ImageLoaderTest├── AndroidManifest.xml├── bin│ ├…

bootstraptable查看详情_bootstrap-table前端实现多条件时间段查询数据

实现思路:通过正则匹配到字段是否符合条件,时间段转换为时间戳比对。这是大体的效果图:页面的html代码采购部门:{foreach name"ware_list" item"vo" }{$vo.warehouse_name}{/foreach}单据日期:--查…

python数据校验_最近抽空造了一个数据校验的轮子 Python -validator

最近抽空造了一个数据校验的轮子 python-validator。在开发 web 应用时,经常需要校验前端传入的数据。如果使用 Django,那么可以使用自带的 forms 进行数据校验。python-validator 的灵感也是来源于 Django 的 forms (类似 ORM 的方式定义数据结构)&…

sql android客户端,XSGManage: 学生成绩管理系统---客户端,基于Android+Django+sqlit3开发...

D:.├─.gradle //编译产生,可删除后打开├─.idea //编译产生,可删除后打开├─app //项目核心代码│ ├─build //构建产生,若报错可删除后打开│ ├─debug //运行时产生app的位置│ ├─libs //相关Java依赖包│ └─src│ ├─androidTe…

python发送qq邮件失败_Python实现给qq邮箱发送邮件的方法

#-*-coding:utf-8-*-## 导入smtplib和MIMEText#from email.mime.text import MIMETextimport smtplib## 要发给谁,这里发给2个人#mailto_list["naughty610qq.com","1034791200qq.com"]## 设置服务器,用户名、口令以及邮箱的后缀#mai…

android设备报警推送,Firebase推送通知未送达所有android设备

我正在使用PHP向特定的Android应用程序用户发送firebase推送通知。function enviar_push($token,$titulo,$subtitulo){define( API_ACCESS_KEY, AAA.....);// $registrationIds ;#prep the bundle$msg array(body > $subtitulo,title > $titulo,subtitle > );$field…

hana 表空间_oracle currentval

一个 lob 实例包含一个 locator 和 value。可以将...ALTER TABLE current_table MOVE PARTITION partition_...For every new extent created, Oracle generates ......日期时间函数的实现 Oracle采用SYSDATE作为取当前时间,而DB2中采用CURRENTTIMESTAMP...[n]; // 生产 DB2 UD…

vscode html中加css,[VScode教程] VSCode 支持CSS

VSCode 支持CSS,介绍两个比较实用的功能:取色器 Color Picker和CSS 选择器的预览。取色器 Color Picker首先,你可以在书写 HTML 和 CSS 时使用取色器。在书写 HTML 和 CSS 的时候,你可能经常需要修改元素的颜色。VS Code 为修改颜…

无限超越超级机器人nds_阿里重新定义个人电脑!仅名片大小,无限升级,不怕丢失无惧病毒,价格仅传统PC一半...

9月17日,阿里云智能总裁、达摩院院长张剑锋表示,过去10年,阿里云自研飞天云平台,造了一台“超级计算机”——云电脑“无影”。这是一台长在云上的“超级电脑”:在本地没有主机,没有电脑CPU和硬盘&#xff0…

php怎样传数据到html代码,传递数据到PHP文件与HTML模板

我怎么能加载文件table.php与我尝试通过的数据,当ajax调用made.Im与jquery.load方法trysing第二个参数是一个数据数组,但不起作用。传递数据到PHP文件与HTML模板这是一个基本的例子,我必须让我得到这个错误Notice: Undefined variable: field…

ios uiview 如何刷新_2020最新迅雷苹果版如何下载?

自iOS系统更新以后就用不了迅雷企业版,小伙伴们不要着急,iOS版迅雷失效是经常的事。现在为大家提供迅雷beta,迅雷内测,双版本,永久不失效!!!https://mp.weixin.qq.com/s/qoR_Dkl_TS7LHK_EYegsOw1.【此Beta版…

mrc20温控f1什么意思_温控器的“总、高、低”是什么意思?不知道?民熔老电工告诉你...

今天刘博士就来给大家讲讲温控仪,觉得有帮助的记得点赞加关注不迷路哦!温度控制器是一种常用的温度监控系统,如地暖热水器、空调烤箱等。温控器原理民熔温度控制器的原理也是温度控制器的控制原理。连接温度探头,温度探头测得的温…