zoukankan      html  css  js  c++  java
  • 复制

    嗯嗯,和大家想的一样,今天要讲的就是 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来说增加了增量复制的功能,相对比全量复制,增量复制只会将断开连接后的命令发送给从库,大大节省了资源浪费。这里不做过多描述,只要了解有这一重大突破即可,有兴趣的可以自行研究。

  • 相关阅读:
    ASP.NET Core的Kestrel服务器(转载)
    ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值
    SQL 中常用存储过程xp_cmdshell运行cmd命令 (转载)
    SQL Server数据库中外键强制约束的好处是什么,什么时候设置外键非强制约束?(转载)
    EF Core中如何取消跟踪DbContext中所有被跟踪的实体
    c# .NET开发邮件发送功能的全面教程(含邮件组件源码)
    jquery操作select(取值,设置选中) 基础
    Visiual Studio2012 CLR20r3问题
    关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName .
    Linq to SQL Like Operator
  • 原文地址:https://www.cnblogs.com/suojian/p/14144810.html
Copyright © 2011-2022 走看看