redis集群和主从复制原理

Redis(内存数据库)
是一个key-value存储系统(布式内缓存,高性能的key-value数据库)。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。



Redis特点:

  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,在set,hash等数据结构的存储。
  3. Redis支持数据的备份,即master-slave模式的数据备份
  4. 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s
    5.Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右);
    6.支持(快照、AOF):依赖快照进行持久化,AOF增强了可靠性的同时,对性能有所影响;
    7.Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用;


Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态。Redis 集群可谓是让很多人久等了。
Redis 集群是一组能进行数据共享的Redis 实例(服务或者节点)的设施,集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集;Redis 集群通常具有高可用、可扩展性、分布式、容错等特性。了解redis的集群后,这些晦涩的概念可结合redis的主从、集群分区和集群运维等角度理解体会。

Redis集群
基本介绍

Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施installation。

Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低Redis集群的性能, 并导致不可预测的行为。
Redis 集群通过分区partition来提供一定程度的可用性availability: 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

Redis集群提供了以下两个好处:

将数据自动切分split到多个节点的能力。
当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。



Redis Cluster功能特点如下:
1)所有的节点相互连接
2)集群消息通信通过集群总线通信,集群总线端口大小为客户端服务端口+10000,这个10000是固定值
3)节点与节点之间通过二进制协议进行通信
4)客户端和集群节点之间通信和通常一样,通过文本协议进行
5)集群节点不会代理查询
6)数据按照Slot存储分布在多个Redis实例上
7)集群节点挂掉会自动故障转移
8)可以相对平滑扩/缩容节点



Redis主从复制结构:
一主以从、一主多从、主从从

Redis主从复制工作原理
工作原理:
slave向master发送sync命令

master启动后台存盘进程,并收集所有修改数据命令

master完成后台存盘后,传送整个数据文件到slave

slave接收数据文件,加载到内存中完成首次完全同步
后续有新数据产生时,master继续将新的数据收集到
的修改命令依次传给slave,完成同步。

主从复制缺点:
网络繁忙,会产生数据同步延时问题
系统繁忙,会产生数据同步延时问题

哨兵模式:
主库宕机后,从库自动升级为主库
在slave主机编辑sentinel.conf文件



Redis持久化是如何工作的?

什么是持久化?简单来讲就是将数据放到断电后数据不会丢失的设备中,也就是我们通常理解的硬盘上。

redis 提供了两种持久化方式,一种是RDB,一种是AOF;
RDB 是指在制定的时间间隔生成数据集的快照,
AOF持久化记录服务器执行的所有写命令,并在服务器重启时,重新执行这些命令来恢复数据



RDB的优点和缺点
RDB优点
–高性能的持久化实现 —>创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程介乎后,再用这个临时文件替换上次持久化号的完呢键; 过程中主进程不做任何IO操作(处理客户端请求的进程和负责存盘的进程不是同一个进程)
–比较适合大规模数据恢复,且对数据完整性要求不是很高
RDB的缺点
–意外宕机时,最后一次持久化的数据会丢失



AOF优点和缺点
AOF优点:
– 可以灵活设置持久化方式,同步持久化方式有三种,同步持久化appendfsync always或异步持久化appendfsync everysec
–出现以外宕机时,仅肯能丢失1秒的数据

AOF缺点
–持久化文件的体积通常会大于RDB的体积
–执行fsync策略时的速度可能会比RDB方式慢

原文地址:https://blog.51cto.com/14050800/2397277

时间: 2024-10-03 23:04:15

redis集群和主从复制原理的相关文章

突破Java面试-Redis集群模式的原理

1 面试题 Redis集群模式的工作原理说一下?在集群模式下,key是如何寻址的?寻址都有哪些算法?了解一致性hash吗? 2 考点分析 Redis不断在发展-Redis cluster集群模式,可以做到在多台机器上,部署多个实例,每个实例存储一部分的数据,同时每个实例可以带上Redis从实例,自动确保说,如果Redis主实例挂了,会自动切换到redis从实例顶上来. 现在新版本,大家都是用Redis cluster的,也就是原生支持的集群模式,那么面试官肯定会就redis cluster对你来

redis集群和主从复制

一.简介 Redis支持将数据同步到多台slave上,这种特性对提高读取性能非常有益 1)master可以有多台slave 2)  除了多个slave连到相同master外,slave也可以连接到其它slave形成图状结构 3)主从复制不会阻塞master,也就是说当一个或多个slave与master连接进行复制时,master可以继续处理客户端发来的请求,相反slave在初次同步数据时则会阻塞,不能处理客户端请求 4)主从复制可以用来提高系统的伸缩性,我们可以用多个slave专门负责客户端的读

《redis集群sentinel主从复制》笔记

首先了解一下什么Sentinel:http://redisdoc.com/topic/sentinel.html#id2 ,耐着心看一遍,很受用.我也是看了好几遍,然后再结合实例操作验证,回头再看就觉得是那么回事了. 我的Demo案例下载地址:http://download.csdn.net/detail/caiwenfeng_for_23/8696295 下面我简单说一下配置,放在conf目录下: 从上图中可以看出,我配置了4个Sentinel.3个Master.7个Slave,他们之间的对应

Redis集群存/取数据原理(理论)

redis集群数据存储原理: 在redis cluster中,如果想要存入一个key-value, 首先会通过CRC16(hash算法)将key计算出一个值, 然后用计算出的值和16384取余,余数会对应上0-16383之间的哈希槽(hash slot) 最后,redis cluster会将key-value放置在对应的哈希槽中. redis集群数据获取原理: 当client向redis cluster中的任意一个节点发送与数据库key有关的命令时, 接收命令的节点会计算出要处理的key属于哪个

Redis集群部署(一)

一.Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误. Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势: 自动分割数据到不同的节点上. 整个集群的部分节点失败或者不可达的情况下能够继续处理命令. Redis 集群的数据分

Redis集群重新分片(新增/移除节点)【理论】

redis集群重新分片原理:(增加或移除节点) 以增加节点为例: 我们只需要将已经分配给节点的哈希槽(hash slot),重新分配即可. 注:hash slot重新分配时,如果槽中存在key-value,那么key-value也将一起被分配出去. 例如: node1的哈希槽:0-5000 node2的哈希槽:5001-10000 node3的哈希槽:10001-16383 现在新增node4: 我们可以将node3的哈希槽调整为:10001-15000.node4的哈希槽:15001-1638

Redis的高可用详解:Redis哨兵、复制、集群的设计原理,以及区别

谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. 哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能. 复制(Replication):则是负责让一个Redis服务器可以配备多个备份的服务器. Redis正是利用这两个功能来保证Redis的高可用. 哨兵(sentinal) 哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预的问题. 1.Redis哨兵

支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)

Redis作为一款性能优异的内存数据库,支撑着微博亿级社交平台,也成为很多互联网公司的标配.这里将以Redis Cluster集群为核心,基于最新的Redis5版本,从原理再到实战,玩转Redis集群 常见Redis集群方案 在介绍Redis Cluster集群方案之前,为了方便对比,先简单了解一下业界常见的Redis集群方案: 1 基于客户端分片 Redis Sharding是Redis Cluster出来之前,业界普遍使用的多Redis实例集群方法.其主要思想是基于哈希算法,根据Redis数

Redis哨兵、复制、集群的设计原理,以及区别

广西SEO:谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. **哨兵(Sentinel):**可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能. **复制(Replication):**则是负责让一个Redis服务器可以配备多个备份的服务器. Redis正是利用这两个功能来保证Redis的高可用. 哨兵(sentinal) 哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预