引言
大概是因为Redis是个人开发的产品,所以Redis的高可用方案是被分成了几块来实现:主从复制、主从切换以及虚拟IP或客户端方案。
从Redis 2.8开始加入对Sentinel机制从而实现了服务器端的主从切换,但目前尚未发现实现虚拟IP或客户端切换方案。
主从复制研究
wget http://download.redis.io/releases/redis-2.8.2.tar.gz
tar xzf redis-2.8.2.tar.gz
mv redis-2.8.2 /opt/
cp redis.conf redis-master.conf
cp redis.conf redis-slave.conf
cd /opt/redis-2.8.2
make
以下是关于 Redis 复制功能的几个重要方面:
1. 一个Master可以有多个Slave;
2. Redis使用异步复制。从2.8开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replication stream)被处理进度;
3. 不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构;
4. 复制在Master端是非阻塞模式的,这意味着即便是多个Slave执行首次同步时,Master依然可以提供查询服务;
5. 复制在Slave端也是非阻塞模式的:如果你在redis.conf做了设置,Slave在执行首次同步的时候仍可以使用旧数据集提供查询;你也可以配置为当Master与Slave失去联系时,让Slave返回客户端一个错误提示;
6. 当Slave要删掉旧的数据集,并重新加载新版数据时,Slave会阻塞连接请求(一般发生在与Master断开重连后的恢复阶段);
7. 复制功能可以单纯地用于数据冗余(data redundancy),也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的 SORT 命令可以交给附属节点去运行。
8. 可以通过修改Master端的redis.config来避免在Master端执行持久化操作(Save),由Slave端来执行持久化。
分别修改redis-master.conf和redis-slave.conf,
daemonize项,改为yes(缺省为no):daemonize yes
maxmemory项,设最大占用内存为50MB:maxmemory 50mb
而有6种内存过期策略,通过maxmemory-policy修改,一般使用默认值或allkeys-lru:
volatile-lru:只对设置了过期时间的key进行LRU(默认值)
allkeys-lru : 是从所有key里 删除 不经常使用的key
volatile-random:随机删除即将过期key
allkeys-random:随机删除
volatile-ttl : 删除即将过期的
noeviction : 永不过期,返回错误
修改redis-slave.conf中的端口,避免和Master的相同:port 7379
Redis复制工作原理:
1. 如果设置了一个Slave,无论是第一次连接还是重连到Master,它都会发出一个SYNC命令;
2. 当Master收到SYNC命令之后,会做两件事:
a) Master执行BGSAVE,即在后台保存数据到磁盘(rdb快照文件);
b) Master同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类);
3. 当Master在后台把数据保存到快照文件完成之后,Master会把这个快照文件传送给Slave,而Slave则把内存清空后,加载该文件到内存中;
4. 而Master也会把此前收集到缓冲区中的命令,通过Reids命令协议形式转发给Slave,Slave执行这些命令,实现和Master的同步;
5. Master/Slave此后会不断通过异步方式进行命令的同步,达到最终数据的同步一致;
6. 需要注意的是Master和Slave之间一旦发生重连都会引发全量同步操作。但在2.8之后版本,也可能是部分同步操作。
部分复制
2.8开始,当Master和Slave之间的连接断开之后,他们之间可以采用持续复制处理方式代替采用全量同步。
Master端为复制流维护一个内存缓冲区(in-memory backlog),记录最近发送的复制流命令;同时,Master和Slave之间都维护一个复制偏移量(replication offset)和当前Master服务器ID(Master run id)。当网络断开,Slave尝试重连时:
a. 如果MasterID相同(即仍是断网前的Master服务器),并且从断开时到当前时刻的历史命令依然在Master的内存缓冲区中存在,则Master会将缺失的这段时间的所有命令发送给Slave执行,然后复制工作就可以继续执行了;
b. 否则,依然需要全量复制操作;
Redis 2.8 的这个部分重同步特性会用到一个新增的 PSYNC 内部命令, 而 Redis 2.8 以前的旧版本只有 SYNC 命令, 不过, 只要从服务器是 Redis 2.8 或以上的版本, 它就会根据主服务器的版本来决定到底是使用 PSYNC 还是 SYNC :
如果主服务器是 Redis 2.8 或以上版本,那么从服务器使用 PSYNC 命令来进行同步。
如果主服务器是 Redis 2.8 之前的版本,那么从服务器使用 SYNC 命令来进行同步。
配置Slave
只需要将redis-slave.conf中REPLICATION段中的slaveof <masterip> <masterport>行的注释去掉,并修改为:
slaveof 127.0.0.1 6379
即完成该Slave的配置,并指向本地端口为6379的Master端。
masterauth
如果Master端通过requirepass设置了密码,Slave需要对应的通过masterauth <password>设置密码;
slave-serve-stale-data
当Slave和Master断开连接时,Slave是直接返回错误提示还是利用历史数据响应客户端(或是直接返回空数据,当全量复制进行时)。yes是缺省值,即利用历史数据响应。
slave-read-only
缺省模式下,Slave服务器是只读的。
repl-ping-slave-peroid
即心跳检测间隔时间,缺省值为10秒。
repl-timeout 60
复制超时
启动Redis
#redis-server redis-master.conf
#redis-server redis-slave.conf
使用ps查看进程
#ps -ef | grep redis
还可以用netstat查看端口
#netstat -tpln
验证主从复制
#redis-cli set test 1000
#redis-cli get test #只能说明目前Master工作正常,不能说明Slave已经复制数据
根据刚刚查看到的端口号,把端口号是6379的Master进程杀掉
#kill -9 XXXX(PID号)
#redis-cli -p 7379 get test #连接到Slave上,读取test
#redis-cli -p 7379 set test 1000 #会提示Slave只读错误,不能写入
相关推荐
本资料包主要探讨Redis的三个核心概念:持久化、主从复制和哨兵架构,这些都是确保Redis高可用性和数据安全的重要机制。 首先,我们来详细了解一下Redis的持久化。Redis提供了两种主要的持久化方式:RDB(Redis ...
1. 哨兵系统的作用:哨兵(Sentinel)是Redis提供的高可用性解决方案,它负责监控、故障检测、自动故障迁移和配置更新。 2. 监控与故障检测:哨兵持续监控主从节点的状态,如果发现主节点故障,会进行故障检测。...
Redis的高可用架构主要通过主从复制和哨兵模式来实现。主从复制用于数据的热备份,而哨兵模式则可以监控Redis主从服务器的状态,并在主服务器出现故障时自动执行故障转移,将其中一个从服务器提升为主服务器,以保证...
【Redis缓存高可用集群】是为了...总的来说,Redis高可用集群提供了一种更为健壮和灵活的解决方案,能够满足大规模、高并发的场景,同时确保数据的安全性和服务的稳定性。正确配置和管理集群是保证其高效运行的关键。
当使用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-Sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现...
1. **Redis主从复制**:这是基础的高可用方案,通过将数据实时同步到一个或多个从节点,即使主节点故障,从节点也能无缝接管服务。在Docker Compose文件中,我们需要定义三个服务,一个为主节点,两个为从节点,并...
主从模式是 Redis 提供的一种基础的高可用策略,它通过数据复制来实现读写分离。主节点负责处理写操作,而从节点则处理读操作,从而分散负载,提高系统的处理能力。主节点的数据会实时同步到从节点,确保数据的一致...
Redis集群是Redis的一种高可用性解决方案,通过主从复制、哨兵和集群三大技术模块来实现高可用性和可扩展性。本文将对Redis集群进行详细的介绍,包括Redis安装、主从复制、哨兵和集群的配置和实现。 一、Redis安装 ...
一级分类:基础知识- Redis 数据类型- Redis 命令- Redis 过期策略- Redis 事务- Redis 持久化- Redis 发布订阅- Redis Lua 脚本- Redis 位图操作- Redis 分布式锁- Redis 主从复制- Redis 集群- Redis Sentinel- ...
redis-sentinel示例,实现高可用(Auto Failover:自动故障转移),主从自动切换.包含redis配置,redis-sentinel配置,以及Java示例代码. 参考原帖地址:http://blog.csdn.net/pi9nc/article/details/17735653
- **redis-sentinel**:说明支持 Redis Sentinel 高可用方案。 - **luajit**:表示依赖 LuaJIT 作为 Lua 的执行引擎。 - **openresty**:表示这是 OpenResty 生态系统的一部分。 - **lua-resty-redis**:直接依赖的...
有助于为配置为主从复制的Redis服务器提供高可用性,监视和负载平衡。 内置了对Redis的支持,但是我们不能灵活地开箱即配置Sentinel设置。 这将Sentinel的配置限制为单个服务。 例如,如果我们希望在Laravel API中...
Redis Sentinel是Redis的一个高可用性解决方案,它提供了监控、故障检测和自动故障转移等功能,确保在主Redis服务器出现故障时,系统能够无缝地切换到备份节点,从而保持服务的连续性和稳定性。SpringBoot是一个轻量...
综上所述,Redis的主从复制和集群配置对于构建高可用性和高并发性的系统至关重要。通过对主从复制的理解和合理配置,以及利用Sentinel的功能,可以有效地管理和监控Redis集群,确保系统的稳定运行。
在高可用性架构中,Redis Sentinel系统可以监控、提醒并自动处理主从切换,保证服务的连续性。 总的来说,Redis作为一款高性能的键值数据库,因其强大的功能和易用性,在Windows平台上的应用同样广泛。通过理解其...
### Windows环境下Redis高可用之主从复制与哨兵监控 #### 一、概述 随着分布式系统和微服务架构的普及,高性能、高可用性的数据库成为众多应用的基础需求之一。Redis作为一款广泛使用的开源键值存储系统,凭借其...
Redis Sentinel是Redis高可用性(HA)解决方案的核心组件,它设计用于监控、故障检测以及自动故障转移主从架构中的主服务器。哨兵系统由多个独立的Sentinel实例组成,它们协同工作以确保在主服务器出现问题时,能够...
通过以上介绍,我们可以看到 Redis 主从复制不仅能够提供高可用性和扩展性,还能有效地防止单点故障的发生。此外,通过使用哨兵机制,可以进一步增强集群的健壮性和自动化管理水平。对于大型应用来说,合理设计和...
Redis主从同步是Redis高可用性的一个重要特性,它允许数据在多个实例间进行复制,以实现数据备份、负载均衡和故障恢复。主从结构中,一个Redis实例作为主节点负责处理写请求,而其他实例作为从节点,接收并同步主...