redis主从复制与哨兵模式

Redis主从复制

单机有什么问题
单机故障、容量瓶颈、qps瓶颈。主机数据更新后根据策略和配置,自动同步到备机上。master以写为主,从以读为主。
默认情况下,Redis使用异步复制(低延迟和高性能)。也允许使用同步复制。客户端可以使用WAIT命令请求某些数据的同步复制,但是,WAIT命令仅能确保其他Redis实例中具有指定数量的已确认副本,它不会将一组redis实例转换为具有高度一致的CP系统,在故障转移期间,仍然会丢失已确认的写入,具体取决于关于redis持久性的配置。但是,使用wait在发生故障事件后丢失写操作的可能性会大大降低,从而很难触发某些故障模式。
当然,如果主服务器的持久性关闭时,会造成复制的安全性问题。所以应避免实例的自动重启。

redis主从复制配置

redis.conf

bind 192.168.0.104   ##指定本机ip
port 8000
daemonize yes
pidfile /var/run/redis_8000.pid
dir /myredis/redis8000
requirepass 123456

如果是伪主从,只需要新建多个同级文件放置redis.conf
如:./redis8000/redis.conf ./redis8001/redis.conf ./redis8002/redis.conf
1、批量替换redis.conf文件 %s/8000/8001/g %s/8000/8002/g
2、在redis.conf添加 replicaof 192.168.x.xx 8000
3、在redis.conf添加 masterauth 123456
然后,启动8000、8001、8002
redis-server ./redis8000/redis.conf
redis-server ./redis8001/redis.conf
redis-server ./redis8002/redis.conf

redis复制如何工作

1.slave(从)发送指令 psync master复制ID和到目前已处理的偏移量,这样主机可以只发送所需的增量部分。当然如果命令缓冲区积压不足,将会进行全量复制
2.master 执行bgsave 后台保存生成rdb文件,同时生成命令缓冲区缓存从客户端接收到的所有新写命令
3.在第一个salve连接时,创建命令缓存区
4.生成RDB文件,通过socket发送给slave
5.slave接收RDB,清空数据,执行RDB文件恢复过程 副本将其保存在磁盘,加载到内存
6.发送命令告知RDB恢复已经完成(告知全量复制完成)
7.master发送所有缓冲区信息命令到副本 这是作为命令流完成的
8.slave接收信息,执行重写后恢复数据
当主副本链接断开时,副本能够自动重连。如果主服务器接收到多个并发副本同步请求,将会执行一次后台保存,为所有请求提供服务


image.png

在命令传播阶段如果断网:
长时间断网 全量复制
段时间断网 增量
全量复制的要素:
1、主服务器的run_id
2、主服务器的命令缓冲区 是一个先进先出队列
3、主服务器复制偏移量 用于判断是执行增量还是全量复制
全量复制有哪些消耗:
1、bgsave时间
2、rdb文件网络传输时间
3、从节点请求数据时间
4、从节点加载时间
增量复制是从命令缓冲区进行复制

主从复制缺点

1、延迟:所有写操作都是在主服务器上操作,然后再同步到从
2、主机宕机后,需要手动处理

哨兵模式

核心功能是主节点的自动故障转移(解决主从复制的手动处理)
Redis Sentinel为Redis提供了高可用性,可以在无人工干预情况下抵抗某些类型的故障。Redis Sentinel提供的功能:
1、监控。不断检查主服务器和副本是否按预期工作
2、通知。可以通过API通知redis实例出了问题
3、自动故障转移。如果主服务器未按预期工作,则Sentinel启动自动故障转移,将副本升级为主服务器,其他副本重新配置使用新的主服务器,并通知redis的应用程序使用新地址
4、配置提供程序。Sentinel充当客户端服务发现的授权来源,询问主redis地址。如果发生故障转移报告新地址

部署哨兵节点

配置文件主要是端口不同,假设实例端口使用28000、28001、28002。8000运行redis主服务器,8001、8002运行从服务器
sentinel-28000.conf

port 28000
daemonize yes
logfile "28000.log"
sentinel monitor mymaster 127.0.0.1  8000 2

其他两个文件相同,但使用28001、28002端口号
sentinel monitor mymaster表示:该哨兵节点监控192.168.x.x 8000 主节点,该主节点的名称是mymaster。2表示至少需要两个哨兵同意才能判断主节点进行故障转移
启动方式
redis-sentinel sentinel-28000.conf
redis-server sentinel-28000.conf --sentinel
故障转移测试,只需要杀死主节点
jedis访问哨兵系统测试 可以使用JedisSentinelPool

哨兵原理

哨兵的原理,主要是以下几个基本概念
主观下线:在心跳检测的定时任务中,如果主节点超过一定时间没有回复,则当前哨兵节点就认为此节点下线
客观下线:如果一个哨兵节点对主节点进行主观下线后,会通过
sentinel is-master-down-by-addr命令询问其他哨兵节点这个主节点的状态。如果判断主节点下线的哨兵数量达到一定的值,则该主节点进行客观下线。
定时任务:每个哨兵节点维护了三个定时任务
1、每10s通过发送info命令获取最新的主从结构 发现slave节点、确认主从关系
2、每2s通过发布订阅功能获取其他哨兵节点信息 交互节点及自身信息情况
3、每1s通过向其他节点发送ping进行心跳检测,判断是否下线
选举领导者哨兵节点:一般是判断主观下线的节点(Raft算法,先到先得),对主节点进行故障转移
故障转移步骤:
1、在从节点选择新的主节点。
选取原则:首先过滤掉不健康的从节点、过滤掉响应慢的节点、过滤掉与master断开时间最久的、优先原则(replica-priority指定的优先级、复制偏移量最大、选择runid最小的从节点)
2、更新主从状态:slaveof no one命令让选出来的节点成为主节点,并通过slaveof命令让其他节点成为从节点
3、对下线的主节点,如果重新上线后设置为新主节点的从节点

哨兵模式缺点:

无法对从节点进行故障转移 需要额外监控、切换操作
没有解决写操作的负载均衡
存储能力受单机限制

总结:

主从复制主要是全量复制和增量复制概念区别
主从复制与哨兵模式解决的问题及其缺点
哨兵模式是在主从复制的基础上解决主节点的自动故障转移

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容