Redis进阶:Redis的主从复制机制
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主从复制工作流程
- 从节点连接上主节点。通PING指令访问主节点。
- 主从节点通过PSYNC指令发送旧的replicationID和偏移量。
- 主节点通过该方式发送从节点需要的增量数据。如果从节点没有历史记录的replicationID和偏移量,就会进行一个全量同步。
全量复制流程:
- 主节点服务启动,开启持久化,产生RDB文件。
- 主节点接受客户端的操作指令,并进行缓冲数据。
- 主节点保存完成数据时, 主节点将数据集文件传输给从节点。
- 从节点将保存接受到的数据集文件在磁盘上,然后加载文件到内存。实现主从复制。
主从复制有一定的窗口期,可以通过下面的参数进行配置:
min-replicas-to-write 复制到写<number of replicas>
min-replicas-max-lag 最小复制最大延迟<number of seconds>
主从复制的数据过期问题
- 从节点不会主动触发过期的Key的删除工作,而是在主节点进行删除过期数据,然后在同步到从节点上。
- 在执行Lua脚本时,不会执行任何Key的过期操作。这可以防止 key 在脚本中间过期,保证将相同的脚本发送到从节点 ,从而在使主从节点的数据集保持一致。
故障转移
当主节点在出现故障后,此时就需要提升从节点升级为主节点,这时就需要手动切换,而且存在较大的风险,同时还要改一堆的程序配置,Redis提供了哨兵机制进行自动故障转移,下期我们在具体介绍。
以上就是Redis中主从复制操作的相关介绍了,更多其他指令可以参考官网,Redis官网,谢谢阅读,希望对你有所帮助。
Redis进阶:Redis的主从复制机制的更多相关文章
- Redis进阶:Redis的持久化机制
Redis进阶:Redis的持久化机制 Redis的持久化机制目前包括RBD和AOF两种方式. RDB持久化 RDB持久化方式是在指定的时间间隔对数据进行快照存储.过期的键值不会被存储到快照中.如果恢 ...
- Redis进阶:Redis的哨兵模式搭建
Redis进阶:Redis的哨兵模式搭建 哨兵机制介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备 ...
- 解密Redis的持久化和主从复制机制
Redis持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执 ...
- Redis的持久化和主从复制机制
Redis持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot) AOF 持久化记录服务器执行 ...
- 深入分析Redis的主从复制机制
一.前言 最近由于疫情影响,时间比较多,所以开始学习之前一直想学,但是却没时间学的Redis.这两天研究了一下Redis的持久化以及主从复制机制,现在已经很晚了,就不多废话了.这篇博客就来谈一谈R ...
- Redis主从复制机制详解
Redis主从复制机制详解 Redis有两种不同的持久化方式,Redis服务器通过持久化,把Redis内存中持久化到硬盘当中,当Redis宕机时,我们重启Redis服务器时,可以由RDB文件或AOF文 ...
- Redis 主从复制机制(集群)与 哨兵机制
1,什么是redis 主从复制 支持多个数据库之间的数据同步.只能一个主数据库(master),可以一个或者多个从数据库(slave) 主数据库,可以读写 从数据库,只可以读 当主数据库,做写的操作的 ...
- Redis进阶实践之十 Redis主从复制的集群模式
一.引言 Redis的基本数据类型,高级特性,与Lua脚本的整合等相关知识点都学完了,说是学完了,只是完成了当前的学习计划,在以后的时间还需继续深入研究和学习.从今天开始来讲一下有关Re ...
- Redis进阶实践之十八 使用管道模式加速Redis查询
一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...
随机推荐
- vue 中一些API 或属性的常见用法
prop 官方解释:Prop 是你可以在组件上注册的一些自定义特性.当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性. 通俗点讲就是:prop是父组件用来传递数据的一个自定义 ...
- 微信小程序-饮食日志_开发记录03
这段时间主要是收尾阶段. 美化界面,排版分部等. 并进行上传,审核. 环境部署一直出现问题,所以测试版食物查找查找不到. 主要问题是:https://的网页证书没有通过审核. 所以现在推行开发,调试版 ...
- jvm——class类文件的结构
class类文件并不一定以磁盘的形式存在,也可以是由类加载器直接生成的二进制流,他其实是一种数据结构,类似于c语言结构体,这种数据结构只有两种数据类型:无符号数和表. 1.魔数:类似于文件拓展名,CA ...
- 目标检测 | OHEM
参考:https://blog.csdn.net/app_12062011/article/details/77945600 参考:http://www.cnblogs.com/sddai/p/102 ...
- 容器————unordered_map
#include < unordered_map > map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此ma ...
- 【Leetcode】买卖股票-贪心算法
题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必 ...
- vue-cli 构建的 Vue 项目用 localhost 加 端口 能访问,但是切换到 ip 加 端口 就不能访问
问题出在 webpack 的配置 在 config 文件夹下, 找到 index.js 目录, 找到如下代码 host: 'localhost', // can be overwritten by p ...
- MySQL的启动关闭及登录退出
1启动和关闭: (1)此电脑->管理->搜索服务->查看本地服务->找到MySQL57然后选择启动 (2)同样步骤进行关闭 作为程序员,打开和关闭的方式当然要更多一点,打开cm ...
- 激活navicat premium12
按Win键和R键打开运行并输入cmd并回车或Win10 开始菜单右键,打开命令提示符或者命令提示符(管理员) ,建议使用命令提示符(管理员) 最为稳妥. 1.首先使用cd命令切换到当前Navicat ...
- Oracle数据库锁表查询
--查看数据库最大连接数 select value from v$parameter where name = 'processes'; --更改数据库连接数 alter system scope = ...