复制

嗯嗯,和大家想的一样,今天要讲的就是 redis 的主从复制。尽管 redis 功能非常强大,但是还是不能百分百保证不会发生故障,如果只是一台 redis 服务器的话,一旦发生故障,就会出现数据丢失的问题。如何来解决单点故障造成的数据丢失问题呢?

世界上没有钱解决不了的问题....额,台词错了。重来:既然一台 redis 解决不了问题,那就来两台,三台,四台...把数据共享到每一台服务器上,即使其中一台服务器故障了,也不会有太大影响,故障恢复后还可以从其他服务器复制数据。又是一条能打能抗的汉子。

ok,开始正经的--复制。

目的

1、避免单点故障

2、实现当一台数据库数据更新后,自动将更新数据同步到其他数据库上。

3、实现读写分离,提高服务器负载能力。

基础

持久化。

主从复制配置

常规的主从数据库职责不做过多讲解,通常都是主数据库读写,从数据库只读,主库有更新同步到从库。

redis 中使用主从复制配置也比较简单粗暴,只需要从库配置文件中加入 "slaveof 主库地址 主库端口" 即可,主库不需要任何配置。

此处多介绍一个 redis 命令:info replication  通过这个命令可以查看主、从库的复制信息。

过程

1、从库启动后主动向主库发送 SYNC 命令。

2、主库收到命令后后台保存快照(即 RDB持久化),并将保存快照期间的命令缓存下来。

3、快照完成后, redis 将快照文件和缓存命令发给从库,从库载入快照,执行缓存命令。

4、后期主库收到的命令都会同步给从库,从而保证数据一致性。

从库持久化

主从数据库布置完毕后,为了避免主数据库压力过大,可以将主库的持久化禁用,将某一从库的持久化开启。

从库重启后,主库会自动将数据同步过来,但是如果主库崩溃重启了呢?主库持久化被禁用了,如何恢复数据呢?这时候是不只能唱凉凉了?

你要知道,主库或者从库,只是按照打工人的意愿来规定的,只要你想,主从库可以随时切换他们的角色,但是还是要保持一主多从的原则。这样一想的话,把开启了持久化的从库切换为主库,是不就能解决我们的问题?

1、从库使用 slaveof no one 命令切换为主库。

2、启动崩溃的主库,并将其切换为从库。成功后会自动将数据同步。(加载镜像+执行缓存命令)

增量复制

redis 2.8 相对 2.6来说增加了增量复制的功能,相对比全量复制,增量复制只会将断开连接后的命令发送给从库,大大节省了资源浪费。这里不做过多描述,只要了解有这一重大突破即可,有兴趣的可以自行研究。

posted @ 2020-12-16 16:53  所见即我  阅读(275)  评论(0编辑  收藏  举报