一、redis复制介绍
(1)什么是redis复制
redis复制即redis replication,主要用于主从(master-slave)数据复制异步备份,或者读写(read-write)分离。使用和配置起来非常简单,从redis服务器会复制并且保存主redis服务器的数据,从而达到备份需求或者同步数据之后,其他客户端读分离的需求。
而常用的redis复制使用方案
a)、读写分离简要图示:
适用场景:适用于数据量不是非常大,单机的数据复制到相同的多台服务器,多台的服务器数据相同,从而达到读写分离,负债均衡的作用。事实上,稍微性能强悍点的物理单机,足以应对大部分的系统了,我们需要做的要主从备份,防止数据意外丢失。
缺点:有可能从服务器的数据会稍微延迟于主redis。
b)、主从备份、自动切换的简要图示
适用场景:如果主redis服务器崩溃或则其他原因不可用,要求服务不可停用,从而需要redis自动切换。如果不需要自动切换,主redis挂了之后,手动切换到从redis也是较为保险的方案。
缺点:同读写分类一样,也是从服务器的数据会稍微延迟于主redis。
二、使用redis 复制
(1)、配置很简单,主服务器上不需要任何额外配置,正常启动
(2)、从服务器需要添加一行命令(仅此一行)slaveof <masterip> <masterport>
(3)、如果主服务器上开启了密码验证(主服务器不要bind 127.0.0.1,否则其他服务器怎么也不能复制数据,就算绑定,把从服务器的ip也绑定了),
那就在从服务器上在加一行masterauth <master-password>。收工。
当然了,关于redis复制配置命令,还有一些额外的命令:
slave-serve-stale-data yes|no
|
当slave和master之间的连接断开或slave正在于master同步时,如果有slave请求,当slave-serve-stale-data配置为yes时,slave可以相应客户端请求;当为no时,slave将要响应错误,默认是yes
|
slave-read-only yes|no
|
从服务器是否只读。设置为no时,可以接受客户端写命令,事实上从服务器写指令之后并不会同步到主服务器,而从服务器会周期性的同步主服务器的数据,很有可能这个写的数据会丢失。因为redis设置复制时,就没有考虑master-master这种架构。这个命令纯属鸡肋,并没有什么卵用。默认是yes
|
repl-diskless-sync yes|no
|
复制集同步策略:磁盘或者socket
当新slave连接或者老slave重新连接时候不能只接收不同,得做一个全同步。需要一个新的RDB文件dump出来,然后从master传到slave。可以有两种情况:
(1)、基于硬盘(disk-backed):master创建一个新进程dump RDB,然后由父进程(即主进程)增量传给slaves。
(2)、基于socket(diskless):master创建一个新进程直接dump RDB到slave的socket,不经过主进程,不经过硬盘。
使用建议:
(1)、基于硬盘的话,RDB文件创建后,一旦创建完毕,可以同时服务更多的
slave。基于socket的话, 新slave来了后,得排队(如果超出了repl-diskless-sync-delay还没来),结束一个再进行下一个。如果一个主多个从,强烈建议使用基于硬盘的方案。
(2)、当用diskless的时候,master等待一个repl-diskless-sync-delay的秒数,如果没slave来的话,就直接传,后来的得排队等了。否则就可以一起传。
(3)、disk较慢,并且网络较快的时候,可以用diskless。(默认用disk-based)
ps:配置高性能的硬盘,使用默认基于硬盘即可,这样节省网络。
默认为no
|
repl-diskless-sync-delay 5
|
设置成0的话,传输开始立马进行下一个。 默认为5。
|
repl-ping-slave-period 10
|
Slave发送ping给master。默认10s
|
repl-timeout 60
|
超时时间,包括从master看slave,从slave看master,要大于上边的repl-ping-slave-period
|
repl-disable-tcp-nodelay no
|
SYNC完毕后,在slave的socket里关闭TCP_NODELAY。
如果是yes,reids发送少量的TCP包给slave,但可能导致最高40ms的数据延迟。
如果是no,那可能在复制的时候,会消耗 少量带宽。
默认我们是为了低延迟优化而设置成no,如果主从之间有很多网络跳跃。那设置成yes吧。
|
repl-backlog-size 1mb
|
复制集后台backlog大小,越大,slave可以丢失的时间就越长。
|
repl-backlog-ttl 3600
|
多久释放backlog,当确认master不再需要slave的时候,多久释放。0是永远不释放。
|
slave-priority 100
|
当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举。(必须≥0)。默认是100。可以在配置集群时使用。
|
min-slaves-to-write 3
min-slaves-max-lag 10
|
slave小于几个,网络lag大于几秒的时候,master停止接受write请求。默认对slave数目无限制,给0。网络延迟给10s
|
三、redis特性
(1)、Redis采用异步复制。从Redis 2.8开始,从服务器会每隔一段时间循环复制流(主服务器待复制的数据)的数据,从而进行复制处理。
(2)、一个主服务器可以连接多个从服务器。
(3)、从服务器可以接受其他从服务器的连接。
(4)、Redis的复制在主服务器上是非阻塞的。redis 主服务器会fork出一个子进程去处理复制业务,这样正是因为redis服务器不能设置maxmemory为服务器的全部内存的原因之一。
(2)、一个主服务器可以连接多个从服务器。
(3)、从服务器可以接受其他从服务器的连接。
(4)、Redis的复制在主服务器上是非阻塞的。redis 主服务器会fork出一个子进程去处理复制业务,这样正是因为redis服务器不能设置maxmemory为服务器的全部内存的原因之一。
也意味着,当一个或多个从服务器执行初始化同步(initial synchronization)时,主服务器能继续处理请求。
(5)、Redis的复制在从服务器上也是非阻塞的。
(6)、复制可以用来支持可伸缩性,用多个从服务器处理只读查询(例如,繁重的SORT操作可以分配到从服务器上),也可以仅仅作为数据冗余。
(5)、Redis的复制在从服务器上也是非阻塞的。
(6)、复制可以用来支持可伸缩性,用多个从服务器处理只读查询(例如,繁重的SORT操作可以分配到从服务器上),也可以仅仅作为数据冗余。
四、redis复制原理
(1)、当你建立一个从服务器,连接时就会发送一个SYNC命令。不管是第一次连接上还是重连接上。 然后主服务器开始在后台保存,并且开始缓冲所有新收到的会修改数据集的命令。当后台保存完成以后,主服务器传输数据库文件给从服务器,从服务器将其保存到磁盘上,然后加载到内存中。然后主服务器开始发送缓冲的命令给从服务器。这是通过命令流完成的,和Redis的协议是一样的格式。
(2)、当主从链路由于某些原因断开时,从服务器可以自动重连。如果主服务器收到多个并发的从服务器的同步请求,只会执行一个后台保存来服务所有从服务器。
当主服务器和从服务器断开后重连上,总是执行一次完整重同步(full resynchronization)。然而,从Redis 2.8以后,可以选择执行部分重同步(partial resynchronization)。
(3)、从Redis 2.8开始,在复制链接断开后,主服务器和从服务器通常可以继续复制过程,而不需要一次完整的重同步。
这是通过在主服务器上创建一个复制流的内存缓冲区(in-memory backlog)实现的。主服务器和所有从服务器都记录一个复制偏移量(offset)和一个主服务器运行ID(run id),当链接断掉时,从服务器会重连接,并且请求主服务器继续复制。假设主服务器的运行ID还是一样的,并且指定的偏移量在复制缓冲区中可用,复制会从中断的点继续。如果这两个条件之一不满足,将会执行完整重同步(2.8版之前的正常行为)。
新的部分重同步特性使用的是内部PSYNC命令,老的实现采用的是SYNC命令。注意,Redis 2.8的从服务器可以检测主服务器是否不支持PSYNC,然后使用SYNC代替。
新的部分重同步特性使用的是内部PSYNC命令,老的实现采用的是SYNC命令。注意,Redis 2.8的从服务器可以检测主服务器是否不支持PSYNC,然后使用SYNC代替。
复制原理简图:
五、小结
在实际生产中,多数系统使用主从配置即可达到大部分的系统性能要求,如果要求主从自动切换,使用类似keepalived就足以满足需求了。
相关推荐
在这个“redis6 安装包下载”中,我们得到了一个针对Linux系统的免编译版本,使得安装过程更为简便快捷。 首先,Redis的核心特性包括它的高速读写性能,这得益于其内存数据结构存储方式。它支持多种数据类型,如...
4. **复制与集群**:Redis 6在复制和集群方面有重大改进,支持多主复制和槽动态迁移。这一部分将深入探讨复制的工作原理和集群搭建及管理。 5. **lua脚本**:Lua是Redis内置的脚本语言,用于执行复杂的逻辑操作。这...
### Redis主从复制和集群配置详解 #### 一、Redis主从复制原理及配置 **1.1 概述** Redis的主从复制机制是一种重要的数据同步方式,它支持一个或多个从数据库(slave)与主数据库(master)之间进行数据同步。其中,...
在实际使用中,你可能还需要了解如何通过Redis进行数据备份与恢复、监控系统状态、设置主从复制和哨兵模式以实现高可用性等。对于开发者来说,熟悉Redis的API和命令是至关重要的,这将有助于在应用程序中有效利用...
下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 Redis 提供了很多有用的命令来管理和操作数据。下面是一些常用的 Redis 命令: * SET key value:设置...
9. **新的持久化选项**:除了RDB和AOF,Redis 6还引入了PSYNC2,提供了更好的主从复制性能和故障恢复能力。 学习这个压缩包中的内容,你将能够了解如何利用Redis 6的新特性来优化应用程序的性能,提升安全性,以及...
### Redis 主从复制集群知识点详解 #### 一、Redis 主从复制概述 Redis 主从复制是一种数据冗余机制,主要用于实现读写分离、负载均衡以及数据备份等目的。通过搭建主从复制集群,可以有效避免单点故障问题,并且...
Redis 主从复制技术原理 概述 Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。Redis 主从复制是指将一台 Redis 服务器的数据,复制到...
redis-copy, 将一个redis数据库复制到另一个数据库 RedisCopy这个工具提供了一种将一个redis数据库的内容移动到另一个redis数据库的方法。 代码是由包含在redis源代码中的 redis-copy.rb 脚本插件激发的,但目标是...
通过本教程,你将学习如何安装配置Redis 6.x,使用不同数据类型存储和检索数据,设置持久化策略,搭建复制和集群,以及进行性能调优和安全配置。通过实践案例,你可以进一步掌握Redis在实际项目中的应用。记得查看`...
由于Redis官方并未直接提供Windows版,描述中提到的“目前redis6版本没有win版本”,意味着这个软件包是通过第三方工具或方法,如Cygwin64,将源代码编译为适合Windows 10环境的可执行文件。 Cygwin64是一个Linux...
ExecStart=/path/to/redis-6.x.x/src/redis-server /etc/redis/redis.conf ExecStop=/path/to/redis-6.x.x/src/redis-cli shutdown Restart=always LimitMEMLOCK=infinity [Install] WantedBy=multi-user.target ``...
6. **主从复制**:通过主从复制,可以实现数据备份和负载均衡,提高系统的可用性和性能。 7. **lua脚本**:支持使用Lua语言编写脚本,实现更复杂的逻辑操作。 8. **集群支持**:Redis 3.0及以上版本引入了Cluster...
Redis6 是一个高级的、开源的、支持网络的、基于键值对的内存数据存储系统。作为NoSQL数据库,它广泛应用于缓存、消息代理、实时分析等多种场景。本视频课程配套资料旨在深入讲解Redis6.2.1的最新特性和最佳实践。 ...
通过redis主存复制(一主两从) 数据同步过程日志,分析Redis主从复制的工作原理,Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。此时重新启动Redis后Redis会使用AOF文件来恢复数据,...
4. **复制**:Redis 提供了主从复制功能,允许将数据复制到多个从节点,提高数据可用性和读取性能。 5. **集群**:Redis 集群模式支持数据分片,可以在多台服务器上分散存储,提高可扩展性和容错性。 6. **Lua ...
Redis以其高速的读写性能、丰富的数据类型和持久化选项在众多NoSQL数据库中脱颖而出,广泛应用于缓存、消息队列、主从复制、分布式锁等场景。 【Redis的数据类型】 1. 字符串(String):基本数据类型,可以存储...
4. **主从复制**:Redis支持主从复制,可以将一个Redis实例的数据复制到多个从实例,实现读写分离,提高系统的读取性能。 5. **事务**:Redis提供了简单的事务功能,允许多个操作在原子性下执行,确保数据一致性。 ...
6. `README*`:介绍如何安装和运行Redis的信息。 7. 可能还有针对不同平台的特定文件夹,如`win32/`和`arm/`,包含相应的可执行文件和附加资源。 总的来说,"redis-6.0.5.zip"提供了一个跨平台的Redis实现,涵盖了...
#### 6. 哈希(Hashes) - **HSET**:向哈希表中添加字段及其值。 - **HGET**:获取哈希表中指定字段的值。 - **HDEL**:删除哈希表中的一个或多个字段。 - **HKEYS/HVALS**:分别获取所有字段名或字段值。 #### 7. ...