redis分布式高可用方案

1.主从复制

说到分布式高可用,必然少不了复制,一来是为了做个冗余备份防止数据丢失,二来还可以达到分流来提高性能的目的。下面全部用M来表示Master(主服务器),用S来表示Slave(从服务器)

那么redis的复制是怎么实现的呢?啥也不说了,先看图:

Replication ID, offset

不好意思,没有图~哈哈~~看个表凑合吧

每个M都有上面这两个属性,Replication ID是M的唯一标识。offset是要发送命令流的字节数,简单来说,只要客户端有更新操作,这个offset就会增加。就算没有S,这个偏移量也是自动增长的。下面就是通过offset来实现部分复制的详细说明:

  1. S带上当前offset-s请求M进行复制
  2. M判断请求有效,offset_m - offset_s计算偏移,然后给S发送差异部分和offset_m
  3. S同步数据,更新offset_s = offset_m

redis默认使用高性能的异步复制,S会异步向M确认收到的数据

复制的机制和特点:

  • 当M和S连接良好时,S定时请求M进行复制,M向S发送命令流来保持同步
  • 当M和S由于网络问题或者超时导致断开连接,S会尝试重新连接,执行部分同步
  • 当部分同步不可能时,S要求完全重新同步。 M需要创建完整的数据快照发送给S
  • 一个M可以有多个S
  • S也可以当做一个M供其他S进行复制
  • 复制在M端是非阻塞的,也就是M向S复制的过程中,M的查询不受影响
  • 复制在S端也基本上是非阻塞的,初始化同步的时候,S可以提供旧数据来使查询不受影响,同步开始时,S将会阻塞连接不提供查询服务(非常大的数据也只需要短短几秒就同步完了),旧数据将会被删除,新数据将会被载入
  • 可以把耗时查询放到S上面来提高主机的性能
  • 可以使用复制来避免M持久化带来的开销,让一个S来持久化,但是应该避免M重启,因为M重启之后数据是空的,这时候如果同步的话S的数据也变成空了。就算是用redis的sentinel实现的高可用方案,也不要把持久化关了,说不定sentinel还没来得及检测到故障,M就已经宕机然后重启了。为了避免这种情况,建议M和S都打开持久化,下面就演示数据是如何丢失的:
    • A,B,C三台redis服务器,A是M,B和C是S
    • 因为某些原因,A宕机了,它执行自动重启机制,这时候因为关闭了持久化,磁盘里是没有备份数据的,内存里的数据也因为重启丢失了,所以重启之后数据全部丢了
    • B和C尝试同步,它们也不管A的数据是不是空,照常同步过来了,所以B和C的数据也丢了

配置

slaveof 192.168.1.1 6379

只需要在S的配置文件里添加上面这一行就可以了,这一行代码的含义是:192.168.1.1 6379是M,我从这儿同步数据进行复制,下面就在我的虚拟机上面实操一下:

配置3台redis,6379是M,6380、6381是S

配置M

[[email protected] redis]# cp redis.conf redis_6379.conf
[[email protected] redis]# vi redis_6379.conf
bind 192.168.56.10 #修改ip为本机

配置S

[[email protected] redis]# cp redis_6379.conf redis_6380.conf
[[email protected] redis]# vi redis_6380.conf
#修改端口号和pid文件名
port 6380
pidfile /var/run/redis_6380.pid
slaveof 192.168.56.10 6379 #设定复制
#同样拷贝一份配置按照上面的步骤进行修改
[[email protected] redis]# cp redis_6380.conf redis_6381.conf

启动

[[email protected] redis]# src/redis-server redis_6379.conf
[[email protected] redis]# src/redis-server redis_6380.conf
[[email protected] redis]# src/redis-server redis_6381.conf

测试复制

[[email protected] redis]# telnet 192.168.56.10 6379
Trying 192.168.56.10...
Connected to 192.168.56.10.
Escape character is ‘^]‘.
set school bistu
+OK
get school
$5
bistu
quit
+OK
Connection closed by foreign host.
[[email protected] redis]# telnet 192.168.56.10 6380
Trying 192.168.56.10...
Connected to 192.168.56.10.
Escape character is ‘^]‘.
get school
$5
bistu #复制成功
set myname pigfly
-READONLY You can‘t write against a read only slave. #注意slave不能写,这是默认配置,如需修改请到配置文件修改read-only项
[[email protected] redis]# telnet 192.168.56.10 6381
Trying 192.168.56.10...
Connected to 192.168.56.10.
Escape character is ‘^]‘.
get school
$5
bistu #复制成功
时间: 2024-10-06 09:18:30

redis分布式高可用方案的相关文章

redis HA高可用方案Sentinel和shard

1.搭建redis-master.redis-slave以及seninel哨兵监控 在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然不能接受.幸好redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决 每个sentinel会向其它sentinal.master.slave定时发送消息

基于Sentinel的Redis高可用方案

数据存储我们在应用设计过程中非常重要的一部分,无论是关系型数据库,还是Redis.MongoDB等非关系型数据库,都有很多的高可用方案,还有一些针对不同业务设计的中间件,使其性能更有特色,更能保证数据存储的稳定和安全. 目前主流的Redis的数据存储架构有Redis单点,Redis主从,基于Sentinel的Redis主备.基于keepalive的redis主备,以及Redis集群Cluster,还有豌豆荚开源的Codis等是目前业内比较流行的解决方案,不同的存储架构,是若干个技术工程师,根据自

基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案 http://www.tuicool.com/articles/naeEJbv 基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案 时间 2014-02-21 15:15:17  IT社区推荐资讯 原文  http://itindex.net/detail/48192-redis-sentinel-redis Redis Sentinel是一个分布式系统,可以部署多个Se

基于Redis Sentinel的Redis集群(主从Sharding)高可用方案(转)

本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求: Redis Sentinel介绍 Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能: 监控,能持续监控Redis的主从实例是否正常

(转)基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

转载自:http://warm-breeze.iteye.com/blog/2020413 本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求: Redis Sentinel介绍 Redis Sentinel是Re

Redis主从复制与高可用方案

redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis与其他key – value缓存产品有以下三个特点: 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储. 支持数据的备份,即master-slave模式的数据备份. Redis的持久化 RDB:snapshotting 二进制格式:按事先定

Redis Sentinel(哨兵)主从高可用方案

环境搭建 三台服务器: 192.168.126.100(master) 192.168.126.110(slaver) 192.168.126.120(slaver) 拷贝192.168.126.100(主)服务器中的Redis到从机,保证Redis版本.环境一致: scp -r redis-3.2.0/ [email protected]192.168.126.110:/usr/local/ // 安装目录 scp -r redis/ [email protected]192.168.126.

redis专题之redis cluster高可用集群

1.redis cluster集群是什么? redis cluster集群是一个由多个主从节点群组成的分布式服务器群,它具有复制.高可用和分片特性.Redis cluster集群不需要sentinel哨兵也能完成节点移除和故障转移的功能. 需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到1000节点. redis cluster集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单 2.redis cluster集群搭建 redis clu

Codis3.2集群HA高可用方案

Codis高可用方案官方推荐使用Sentinel Redis 本身就是最终一致性的.Master 挂了,Promote Slave 成为新的 Master 需要时间(测试15秒内).其实 Sentinel 就是这个逻辑.Codis3.2 自己没有实现 HA,而是直接依赖 Sentinel 的. 注意事项: Sentinel需要使用原生的Redis-server,版本要等于或高于Codis3.2里面的3.2.8版本, 这里是在Redis3.2.9的下配置测试的,另外Protected-mode n