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

  • 相关阅读:
    《财富自由之路》读后感及读书笔记
    echarts3.x 入门
    Ubuntu 16.04 硬盘安装
    语义化版本控制的规范(转载)
    appcan IDE 无法 请求数据
    jQuery extend 函数
    63342 接口 奇遇 IDEA
    C++调用Java的Jar包
    无法打开 源 文件“stdafx.h”的解决方法
    CString的头文件
  • 原文地址:https://www.cnblogs.com/suojian/p/14144810.html
Copyright © 2011-2022 走看看