`
m635674608
  • 浏览: 4906083 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Sentinel-Redis高可用方案(一):主从复制

 
阅读更多

引言

大概是因为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只读错误,不能写入

 

 

http://www.cnblogs.com/Xrinehart/p/3501372.html

http://blog.csdn.net/pi9nc/article/details/17735653

分享到:
评论

相关推荐

    高可用Redis:主从复制、sentinel哨兵、漂移VIP故障转移.pdf

    高可用Redis:主从复制、sentinel哨兵、漂移VIP故障转移

    redis-sentinel-demo:redis-sentinel示例,实现高可用(Auto Failover

    redis-sentinel示例,实现高可用(Auto Failover:自动故障转移),主从自动切换.包含redis配置,redis-sentinel配置,以及Java示例代码. 参考原帖地址:http://blog.csdn.net/pi9nc/article/details/17735653

    laravel-redis-sentinel-drivers:用于Laravel和Lumen的Redis Sentinel集成

    有助于为配置为主从复制的Redis服务器提供高可用性,监视和负载平衡。 内置了对Redis的支持,但是我们不能灵活地开箱即配置Sentinel设置。 这将Sentinel的配置限制为单个服务。 例如,如果我们希望在Laravel API中...

    Redis Sentinel主从高可用方案1

    二、Sentinel的主从原理 之前介绍过为什么Jedis要用2.2.2及以上版本,因为主从实例地址(IP PORT)是不同的,当故障发生进行主从切换后,应

    【windows】redis高可用主从+哨兵

    【windows】redis高可用主从+哨兵,有详细的word操作文档和已经配置好的主从文件,只需要把文件放在不同节点的电脑上按照word的说明进行更改就可以使用了,公司让我为新系统提供高可用真的是很折腾~~~

    2019年 Redis从入门到高可用 分布式实战教程

    Redis从入门到高可用 分布式实战教程,共140多节课程、 掌握redis主从、哨兵、集群 ,参数调优 目录: 9-9 原生安装-1.准备节点.mp4 9-8 原生安装.mp4 9-7 基本架构.mp4 9-6 虚拟槽哈希分布.mp4 9-5 一致性...

    redis的高可用.xmind

    redis的高可用: Redis高可用常见的有两种方式: 主从复制(Replication-Sentinel模式) Redis集群(Redis-Cluster模式)

    3-13-3-redis-随堂笔记.docx

    本节所讲: 13.1 redis概述 13.2 安装redis 13.3 redis基本操作 13.4 redis持久化 13.5 redis主从架构(实现读写分离) 13.6 使用sentinel实现主从架构高可用

    运维部-redis服务

    单纯的master-slave模式,读写分离,master是... 4)少部分采用redis + sentinel模式,但须配置多个sentinel来检测和切换主从状态,不易水平扩展。 5)重要业务采用rediscluster,无需关心分片,分中心部署是个问题。

    Redis-master-slave-sentinel.rar

    redis的主从设置,以及redis-sentinel 哨兵的高可用配置。只要解压将文件放置在对应的redis服务下,修改对应的ip,就可以直接运行。如果不通的话,要考虑端口是否开放。

    基于javatcpsocket通信的拆包和装包源码-seckill-practice:redis-秒杀项目实战

    redis集群+sentinel高可用 布隆过滤 标志位防止流量倾斜,缓存预热防止缓存穿透 redis缓存秒杀 异步写入数据库 redis知识 redis主从集群的搭建与docker通信知识 docker搭建redis主从集群 查看docker所有容器的ip: ...

    Redis服务之高可用组件sentinel详解

    前文我们了解了redis的常用数据类型相关命令的使用和说明,回顾请参考https://www.jb51.net/article/120364.htm 今天我们来聊一下redis的高可用组件sentinel;首先来回顾下redis的主从同步,主从同步最主要的作用是...

    玩转Redis搭建集群之Sentinel详解

    为此,Redis官方提供了一种解决方案:Redis Sentinel 简介 Redis Sentinel集群通常由3到5个节点组成,如果个别节点挂了,集群还可以正常运作。它负责监控Redis集群的健康情况。如果主节点挂掉,Sentin

    单点登录源码

    - 一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。 - 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统...

    "优雅的SSM框架"进行完善(页面分离+nginx负载均衡+tomcat集群)

    Redis Sentinel主从高可用方案 Redis Cluster集群高可用方案 Druid(数据源配置 sql防注入 sql性能监控) 前后端分离(Html替代Jsp) Nginx静态加载、负载均衡 基于keepalived的nginx高可用方案 Tomcat集群(Redis...

    Redis有哪些功能?

    Redis也是通过这两个功能保证Redis的高可用; 4、集群(Cluster) 单台服务器资源总是有上限的,CPU和IO资源可以通过主从复制,进行读写分离,把一部分CPU和IO的压力转移到从服务器上,但是内存资源怎么办,主从...

    redis哨兵

    主从复制高可用 基本架构 实现原理 配置 安装 主观下线跟客观下线 3个定时任务 运维 主从复制高可用 主从复制实际就是对主服务器提供了一个数据备份; 同时可以实现分流作用(读写分离);主从服务如果主服务器出现...

    Redis 3.0 中文版 - v1.1.pdf

    第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

    Redis V3.0 中文文档

    第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

    Linux学习教程之redis哨兵集群详解

    Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主...

Global site tag (gtag.js) - Google Analytics