首页 > 数据库 >13_redis复制机制

13_redis复制机制

时间:2024-03-17 13:33:07浏览次数:24  
标签:13 主机 数据库 redis 从机 复制 conf

Redis复制机制(replication)

概述

Redis复制机制就是主从复制,master数据库以写为主,slave数据库以读为主,当master数据发生变化时,自动的将新的数据异步同步到其他slave数据库。

作用

读写分离

容灾恢复

数据备份

水平扩容支持高并发

怎么用

一般只配置(从)读库,不配置(主)写库(一主多从)。master如果配置了requirepass参数(密码),需要密码登录,那么从数据库就要配置masterauth来设置校验密码,否则的话主机会拒绝从机的访问请求。

基本操作

  • info replication: 可以查看复制节点的主从关系和配置信息
  • replicaof: 主库IP和端口号,一般写进redis.conf配置文件里面
  • slaveof: 主库IP和端口号
  • slaveof no one: 使当前数据库停止和其他数据库的数据同步,转为主数据库,自立为王

一个主数据库(端口6379),两个从数据库(端口6380和6381):

  1. 拷贝多份redis.conf文件,redis6379.conf(主)、redis6380.conf(从)、redis6381.conf(从)

  2. 修改配置文件redis6379.conf以及其它从机

    开启deamonize yes

    deamonize yes

    注释掉绑定ip

    bind 127.0.0.1

    关闭保护模式

    protected-mode no

    指定端口

    port 6379

    指定当前工作目录dir

    dir /myredis

    修改文件进程id名字

    pidfile /var/run/redis_6379.conf

    修改日志文件名字

    logfile "/myredis/6379.log"

    配置密码

    requirepass 123456

    配置rdb文件名

    dbfilename dump6379.rdb

    (可选)是否开启AOF

    appendonly no

  3. 配置从机redos6380.conf和redis.6381.conf

    从机访问主机的通行密码masterauto,必须(从机需要配置,主机不用)

    masterauth “123456”

    replicaof 主机IP 端口号

  4. 启动主机:

    redis-server /myredis/redis6379.conf

    redis-cli -a 123456 p 6379

  5. 从机连接主机:

    redis-server /myredis/redis6380.conf

    redis-cli -a 123456 p 6380

    redis-server /myredis/redis6381.conf

    redis-cli -a 123456 p 6381

相关问题

  1. 从机是否可以执行写命令?--> 不能,从机只能读,不能写(读写分离)

  2. 主机shutdown后,从机会上位吗? --> 主机挂了,但数据不会丢,从机依旧能访问的到,从机也不会成为主机上位,等到主机回归,主机从新回来后,主机仍然是它

  3. 注意,上一个从机可以使下一个从机的主机,类似于面向对象语言中的继承概念。从机也可以接收其它从机的连接和同步请求,那么该从机也可以作为链条中的下一个主机,这可以有效减轻主机的写压力。

  4. 即使是充当主机的从机,仍然不具备写操作权限(徒有虚名,没有实权)。

复制原理和工作流程

  1. 从机在第一次启动成功后会发送一个sync命令,把主机的所有数据全部同步到自身从机。
  2. 主机收到从机的同步请求之后,会将自己的RDB快照文件和所有的缓存命令一同发送给从机,以完成一次性同步。而从机收到数据后,将其加载到内存中,从而完成复制初始化。
  3. 当有从机与主机建立连接之后,主机会每隔10s向从从机发送一个心跳包,以此来保持通信。
  4. 主机继续将新的所有命令自动依次的传给从机,完成同步。
  5. 由于主机内部维护着一个日志文件backlog.log,该日志用于记录当前主机与各个从机的数据传输跟踪,当从机下线再次上线后,主机会依据日志文件从断点处重新向从机传输未传输的数据(类似断点传输)。

复制的缺点

  1. 复制延时,信号衰减:由于所有的写操作是在主机上进行的,然后同步到其下面的各个从机,所有从主机同步到从机会有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,从机数量越多延迟会越严重。

  2. 当主机挂了,默认情况下从机并不会自动担任主机的角色,此时需要人为的干预委派一个从机充当主机。(比较麻烦)--> 提出redis哨兵和redis集群机制

标签:13,主机,数据库,redis,从机,复制,conf
From: https://www.cnblogs.com/lilyflower/p/18078482

相关文章

  • [redis] 基于Docker安装Redis
    0序环境信息OS:CENTOS7.9Docker:25.0.4Redis:7.2.47.2.4版本比较新,也可尝试6.0.8等版本1安装步骤Step0安装docker略。可参见:[Docker]基于CENTOS7安装Docker环境-博客园/千千寰宇基于Docker安装MYSQL/Step1安装docker环境-博客园/千千......
  • 【洛谷 P8602】[蓝桥杯 2013 省 A] 大臣的旅费 题解(图论+深度优先搜索+树的直径+链式
    [蓝桥杯2013省A]大臣的旅费题目描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同......
  • 20231325贾罗祁 2023-2024-2《Python程序设计》实验一报告
    20231325贾罗祁2023-2024-2《Python程序设计》实验一报告课程:《Python程序设计》班级:2313姓名:贾罗祁学号:20231325实验教师:王志强实验日期:2024年3月13日必修/选修:公选课1.实验内容熟悉Python的操作学会调试程序编译循环的剪刀石头布游戏创建gitee账户并推送上传......
  • PTA L2-013 红色警报
    战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出......
  • 【转载】Redis -- IO多路复用及redis6的多线程
    都知道redis是通过单线程+io多路复用来避免并发问题的,然后在redis6的时候redis引入了多线程,这里就来详细说说IO多路复用模型以及redis的多线程。Redis的I/O多路复用模型有效的解决单线程的服务端,使用不阻塞方式处理多个client端请求问题。在看I/O多路复用知识之前,我们先来......
  • 奇怪的回溯增加了 | leetcode131分割回文串
    题目要求:给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]示例2:输入:s="a"输出:[["a"]]上述为常规做法,这里回溯的时候是i+1的,就很正常 这是我第一次做的时候自己憋出来......
  • 插入数据库遇到中文无插入的问题 Error 1366 (HY000): Incorrect string value: ‘\x
    项目场景:beego登录注册过程中将信息写入到MYSQL数据库中问题描述字段写入过程中数据出现无法写入的情况,出现报错:Error1366(HY000):Incorrectstringvalue:‘\xE7\x94\xB7’forcolumn‘sex’atrow1原因分析:根据控制台收到的打印信息我发现数据正确从前......
  • 3.13毕设
    Aop(AspectOrientedProgramming),面向切面编程,这是对面向对象思想的一种补充。面向切面编程,就是在程序运行时,不改变程序源码的情况下,动态的增强方法的功能,常见的使用场景非常多:1.日志 2.事务 3.数据库操作这些操作中,无一例外,都有很多模板化的代码,而解决模板化代码,消除臃肿......
  • Redis(持续更新)
    1、安装安装太麻烦了直接使用宝塔的一键部署密码是bt_redis2、jedis1、引入依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency&g......
  • 135. 分发糖果c
    intmax(inti,intj){if(i>j)returni;returnj;}intcandy(int*ratings,intratingsSize){int*left=(int*)malloc(sizeof(int)*ratingsSize);int*right=(int*)malloc(sizeof(int)*ratingsSize);for(inti=0;i<ratingsSize;i++){......