Redis进阶:Redis的主从复制机制

主从复制机制介绍

单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备份。

配置一主多从

准备配置文件

本文示例是在同一台机器上启动3个Redis实例。实现一主多从,多个IP地址方式也一样,只需求修改配置文件的maste的ip地址和端口就行,这里就不在赘述了。

# 复制配置文件Redis6379.conf
[root@localhost redis-5.0.7]# cp redis6379.conf redis6380.conf
[root@localhost redis-5.0.7]# cp redis6379.conf redis6381.conf

至此我们准备了3个配置文件,供后面使用。

修改配置文件

修改主配置文件

# 修改Redis6379配置文件
[root@localhost redis-5.0.7]# vi redis6379.conf
# 修改如下部分增加密码验证
# requirepass foobared
requirepass enjoyitlife

修改从服务配置文件。

# 修改redis6380.conf配置文件
[root@localhost redis-5.0.7]# vi redis6380.conf
# 修改端口
port 6380
# 修改日志文件
logfile "redis6380.log"
# 修改pidfile
pidfile /var/run/redis_6380.pid
# 配置主服务的地址和端口 关键配置
replicaof 127.0.0.1 6379
#主开启密码验证时 从服务器也需要配置验证密码
masterauth enjoyitlife

redis6381.conf 也要按照上面的配置配置一遍。将上面的6380修改为6381即可。

启动服务

# 启动主服务 和 从服务
[root@localhost redis-5.0.7]# src/redis-server redis6379.conf
[root@localhost redis-5.0.7]# src/redis-server redis6380.conf
[root@localhost redis-5.0.7]# src/redis-server redis6381.conf # 查看进程
[root@localhost redis-5.0.7]# ps -ef | grep redis
root 7684 1 0 10:55 ? 00:00:07 srcredis-server 127.0.0.1:6379
root 7689 1 0 10:55 ? 00:00:07 srcredis-server 127.0.0.1:6380
root 7762 1 0 11:41 ? 00:00:00 srcredis-server 127.0.0.1:6381
root 7767 7721 0 11:44 pts/2 00:00:00 grep --color=auto redis

此时,我们的Redis主从复制服务已经搭建完成,6379为主服务,6380、6381为从服务。这里需要注意是,从服务只支持读操作,只有主服务节点才支持写、更新、删除操作。

这是通过配置的方式,还有一种方式是直接在从节点客户端输入指令:replicaof 127.0.0.1 6379 ,这种方式也可以实现主从复制,但是这种方式服务Redis重启后就会失效。

另外之前的Redis的主从复制指令是通过slaveof ,现在已经替换为replicaof ,主要是因为slave有奴隶的意思,Redis的开发者们觉得不大友好,所以用replicaof 来替换了原来的指令。建议以后直接使用replicaof指令。

功能验证

可以通过info relication指令,查看主从配置信息。

# 功能验证 连接主服务客户端 输入如下指令
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2 # 可以看到当前已经上线了2个从服务节点
slave0:ip=127.0.0.1,port=6380,state=online,offset=126,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=126,lag=1
master_replid:76d6f75c4b5a59baf39473dc3f94352bebc9158f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126 # 在从节点 输入指令
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1204
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:76d6f75c4b5a59baf39473dc3f94352bebc9158f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1204
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1204

在主服务节点 设置一个属性,然后在从节点进行查询。

# 主节点设置属性
127.0.0.1:6379> set name "hello Redis Replication"
OK #从节点 获取属性
127.0.0.1:6380> get name
"hello Redis Replication"
127.0.0.1:6381> get name
"hello Redis Replication"

主从复制关键点

  • Redis使用异步复制,主节点和从节点是异步地处理的数据流的同步。
  • 一个主服务可以有N个从节点。
  • 从节点可以继续有从节点,形成复制链。
  • Redis的复制在主节点是非阻塞的,可以在同步的同时处理其他请求。
  • 复制在从节点也是非阻塞的,但如果是初次同步大数据量时,从节点会有一个窗口期,此时会阻塞从节点的对其他请求的处理。
  • 如果主节点没开启持久化,一旦主节点重启,从节点和主节点都会丢失数据。所以建议主节点和从节点都启用持久化,同时要配置实例防止重置后自动重启。

Redis主从复制工作流程

  1. 从节点连接上主节点。通PING指令访问主节点。
  2. 主从节点通过PSYNC指令发送旧的replicationID和偏移量。
  3. 主节点通过该方式发送从节点需要的增量数据。如果从节点没有历史记录的replicationID和偏移量,就会进行一个全量同步。

全量复制流程:

  1. 主节点服务启动,开启持久化,产生RDB文件。
  2. 主节点接受客户端的操作指令,并进行缓冲数据。
  3. 主节点保存完成数据时, 主节点将数据集文件传输给从节点。
  4. 从节点将保存接受到的数据集文件在磁盘上,然后加载文件到内存。实现主从复制。

主从复制有一定的窗口期,可以通过下面的参数进行配置:

min-replicas-to-write 复制到写<number of replicas>
min-replicas-max-lag 最小复制最大延迟<number of seconds>

主从复制的数据过期问题

  • 从节点不会主动触发过期的Key的删除工作,而是在主节点进行删除过期数据,然后在同步到从节点上。
  • 在执行Lua脚本时,不会执行任何Key的过期操作。这可以防止 key 在脚本中间过期,保证将相同的脚本发送到从节点 ,从而在使主从节点的数据集保持一致。

故障转移

当主节点在出现故障后,此时就需要提升从节点升级为主节点,这时就需要手动切换,而且存在较大的风险,同时还要改一堆的程序配置,Redis提供了哨兵机制进行自动故障转移,下期我们在具体介绍。

以上就是Redis中主从复制操作的相关介绍了,更多其他指令可以参考官网,Redis官网,谢谢阅读,希望对你有所帮助。

Redis进阶:Redis的主从复制机制的更多相关文章

  1. Redis进阶:Redis的持久化机制

    Redis进阶:Redis的持久化机制 Redis的持久化机制目前包括RBD和AOF两种方式. RDB持久化 RDB持久化方式是在指定的时间间隔对数据进行快照存储.过期的键值不会被存储到快照中.如果恢 ...

  2. Redis进阶:Redis的哨兵模式搭建

    Redis进阶:Redis的哨兵模式搭建 哨兵机制介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备 ...

  3. 解密Redis的持久化和主从复制机制

    Redis持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执 ...

  4. Redis的持久化和主从复制机制

    Redis持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot) AOF 持久化记录服务器执行 ...

  5. 深入分析Redis的主从复制机制

    一.前言   最近由于疫情影响,时间比较多,所以开始学习之前一直想学,但是却没时间学的Redis.这两天研究了一下Redis的持久化以及主从复制机制,现在已经很晚了,就不多废话了.这篇博客就来谈一谈R ...

  6. Redis主从复制机制详解

    Redis主从复制机制详解 Redis有两种不同的持久化方式,Redis服务器通过持久化,把Redis内存中持久化到硬盘当中,当Redis宕机时,我们重启Redis服务器时,可以由RDB文件或AOF文 ...

  7. Redis 主从复制机制(集群)与 哨兵机制

    1,什么是redis 主从复制 支持多个数据库之间的数据同步.只能一个主数据库(master),可以一个或者多个从数据库(slave) 主数据库,可以读写 从数据库,只可以读 当主数据库,做写的操作的 ...

  8. Redis进阶实践之十 Redis主从复制的集群模式

    一.引言        Redis的基本数据类型,高级特性,与Lua脚本的整合等相关知识点都学完了,说是学完了,只是完成了当前的学习计划,在以后的时间还需继续深入研究和学习.从今天开始来讲一下有关Re ...

  9. Redis进阶实践之十八 使用管道模式加速Redis查询

    一.引言             学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...

随机推荐

  1. Spring的概述

    1 Spring是什么? Spring是分层的Java SE/EE应用的full-stack的轻量级开源框架,以IOC(控制反转)和AOP(面向切面编程)为内核,提供了展现层SpringMVC和持久层 ...

  2. re模块和正则

    正则表达式:就是用来筛选字符串中特定内容的一串具有某种逻辑规则的字符组成.正则表达式不是Python独有的,而是一门独立的技术,它在所有的编程语言中都有使用,在Python中使用就必须依赖于re模块. ...

  3. 【shell】sed后向引用替换文本

    要求如下: 原文 <server name="92服" port="10092" os="android" hidden=" ...

  4. 对promise.all底层的实现的研究

    1.Promise.all(iterable)返回一个新的Promise实例,此实例在iterable参数内素有的Promise都fulfilled或者参数中不包含Promise时,状态变成fulfi ...

  5. Java多级文件夹上传

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...

  6. QML 与 C++ 交互

    前言 文档如是说,QML旨在通过C ++代码轻松扩展.Qt QML模块中的类使QML对象能够从C ++加载和操作,QML引擎与Qt元对象系统集成的本质使得C ++功能可以直接从QML调用.这允许开发混 ...

  7. selenium+常见操作

    1.多窗口操作 有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 句 ...

  8. 突破css选择器的局限,实现一个css地址选择器?

    首先看一个效果,注意地址栏的变化 然后思考一下,用css如何实现? css选择器的局限 选择器是css中的一大特色,用于选择需要添加样式的元素. 选择器的种类有很多,比如 元素选择器 p {color ...

  9. Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

    if first time to install docker, be noted the docker engine started as root copied from: http://blog ...

  10. 一个蒟蒻的解题过程记录——洛谷P1003 铺地毯

    这到题算是我“火线回归”后码的第一道题,病好了心情不错,发篇博客分享一下 目录: ·题目描述 ·题目分析 ·解题思路 ·代码实现 ·总结 ·题目描述: 为了准备一场特殊的颁奖典礼,组织者在会场的一片矩 ...