zoukankan      html  css  js  c++  java
  • Redis 主从配置

    主从复制机制:

      持久化 保证了即使Redis服务器重启也不会丢失数据,因为Redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是如果Redis服务器损坏则可能导致数据丢失,但是可以通过Redis的 主从复制机制就可以避免这种单点故障

      主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务

      主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上

      只有一个主redis,可以有多个从redis

      主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求

      一个redis可以即是主又是从,如下图:

    主从复制配置:

    主redis配置:无须特殊配置

    从redis配置:修改从redis服务器上的redis.conf文件

      为了保证安全,可以在主服务器上开启密码验证:

    从服务器配置:对应主服务器密码即可,否则无法执行和主服务器的数据同步

    主从复制过程

    完整复制:

      slave服务启动,slave会建立和master的连接,发送sync命令

      master会启动一个后台进程将数据库快照保存到RDB文件(此时如果生成RDB文件过程中存在写数据操作会导致RDB文件和当前主redis数据不一致,所以此时master 主进程会开始收集写命令并缓存起来

       master会将RDB文件发送给slave

      slave将文件保存到磁盘上,然后加载到内存中恢复

      master把缓存的命令转发给slave后续master 收到的写命令都会通过开始建立的连接发送给slave;当master 和slave 的连接断开时slave 可以自动重新建立连接。如果master 同时收到多个slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有slave)

      完整复制的问题:

    redis2.8之前从redis每次同步都会从主redis中复制全部的数据,如果从redis是新创建的从主redis中复制全部的数据这是没有问题的,但是,如果当从redis停止运行,再启动时可能只有少部分数据和主redis不同步,此时启动redis仍然会从主redis复制全部数据,这样的性能肯定没有只复制那一小部分不同步的数据高

     部分复制:

      从机连接主机后,会主动发起 PSYNC 命令,从机会提供 masterrunid(机器标识,随机生成的一个串 offset(数据偏移量,如果offset主从不一致则说明数据不同步),主机验证 runid  offset 是否有效, runid 相当于主机身份验证码,用来验证从机上一次连接的主机,如果runid验证未通过则,则进行全同步,如果验证通过则说明曾经同步过,根据offset同步部分数据

  • 相关阅读:
    如何做好不擅长的测试任务
    [ Python入门教程 ] Python中日志记录模块logging使用实例
    [ Python入门教程 ] Python中日期时间datetime模块使用实例
    cmd命令行窗口和文件目录资源管理器快速切换
    [ Python入门教程 ] Python中JSON模块基本使用方法
    [ PyQt入门教程 ] PyQt5中多线程模块QThread使用方法
    [ PyQt入门教程 ] PyQt5中数据表格控件QTableWidget使用方法
    设计模式目录
    我的软考架构师之路:目录(共22篇)
    算法篇:目录
  • 原文地址:https://www.cnblogs.com/roxy/p/7774715.html
Copyright © 2011-2022 走看看