03_redis高可用性方案、数据丢失问题及减损数据丢失方案
2020-02-22 21:56:17 40 举报
redis高可用性方案、数据丢失问题及减损数据丢失方案
作者其他创作
大纲/内容
2、返回写入成功
2、系统在几分钟之后主可可以用了
异步同步数据
3、一帮人在连夜抢修,但问题在于抢修的这段时间系统无法访问。这系统无法访问的期间就叫系统不可用
3、此时,因网络问题master node 与slave node 和sentinal失去了联系
slave node1->master node
client
1、脑裂问题产生,但clien继续向master node 发送数据,当master 发现当所有slave同步数据超过10秒的时候,直接拒绝client发来的请求,这样就不会因为脑裂而导致大量数据丢失的问题了。
redis的高可用
电商网站后台系统
sentinal cluster
网络分区1
集群脑裂导致数据丢失如何降低损失
master node
sentinal 集群
写操作
5、假设master 没有做两个参数的设置,master node写到2000 条数据,而slave node只同步到了1200条。已经落后30分钟的数据,此时master 一旦宕机,那这30分钟的数据就丢失了。
master node->slave node
slave node2->新master node
slave node->master node
1、slave 1死掉了,此时redis还是能提供服务的。系统为可用状态。
问题:假如不是像视频那里只有一台slave node,而是像我图片里的那样有2台slave node,而且slave node2是跟master node是在同一个网络分区中的,那是不是设置min-slaves-to-write 1 min-slaves-max-lag 10就预防不了这种情况?如果是 那这样导致数据丢失问题怎么降低损失呢?
6、返回写入成功
系统不可用情况
读操作
slave node1
异步复制导致数据丢失问题
4、用户访问网站什么都没有
说明:min-slaves-to-write 1min-slaves-max-lag 10要求至少有1个slave,数据复制和同步的延迟不能超过10秒如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,那么这个时候,master就不会再接收任何请求了上面两个配置可以减少异步复制和脑裂导致的数据丢失
1、master 死掉了
这个在master 故障时,自动检测并将某个slave node自动切换为master node的过程叫主备切换。这个过程实现了主从架构下的高可用性。实现了系统99.99%的高可用性。因为一旦master故障,在很短的时间内就会切换到另一个master上。系统就几分钟是不可用的。
1、用户访问网站什么都没有
2、同步数据延时>10并且越来越大
网络分区2
slave node2
2、master 死掉了,直接导致整个系统不可用
1、写入数据1
3、此时数据1还只在master node中,还未同步slave去,此时master node挂掉了
异步复制导致数据丢失如何降低损失
redis的不可用
3、master node 已经写了1000条数据,因网络原因同步到slave node1只有900条。master 与slave同步数据已经落后超过10秒的数据
1、用户正常访问网站
集群脑裂导致数据丢失问题
5、写入数据2
什么是高可用性
集群脑裂导致数据丢失如何降低损失疑问
slave node
说明:如果你的系统在全年99.99%的时间处于可用的状态,那么就可称之为高可用。或者是99.9%、99%,都可说是高可用80%时间可用,称为低可用。
2、同步数据延时<10
4、sentinal 检测到master node 挂掉了,将slave node 1提拔为新的master node
2、将slave 2提拔成master,并做matser的工作
4、sentinal 因与master node不在同一个网络分区,连接不到master,故检测master node故障了,把slave node提拔成新的master node,但实际上旧的master node还是活着的,这种情况就叫脑裂
3、用户正常访问网站
slave node2
6、工程师将网络问题修复,将master node 重启,并将其调整成slave node,并从新的master node中同步数据,从而导致数据2丢失。
脑裂问题master node出现了异常性的,有相同数据,有相同工作的两个节点。像这个图中就有两个master node存在大脑只有一个,一个大脑负责一个人所有的思考和行动。目前大脑一分为二,作用是一样的,都想去指挥一个人,这种情况就叫脑裂。
说明:在旧的master node 中的数据1还没有来得及复制到 slave node就挂掉了。slave node 1就成了新的master node数据1就被丢了(数据1也可以代表是一部分数据)
4、在设置了说明中的两个参数情况下,此时master node 不接受写请求,client只能在自己缓存中暂时存储。或者尝试写其它master,或者暂停一段时间再写。一般来说,会在client会做降级,写到本地磁盘里面,在client对外接收请求,再做降级,再做限流,减慢请求涌入的速度。或者client可能会采取,将数据临时写入kafka消息队列中,每隔10分钟去队列里取一次,尝试重新发回master。
2、系统因某种原因挂掉,无法对外提供服务。
0 条评论
下一页