Redis学习 - 主从拷贝
Redis主从拷贝的特点
- 同一个Master可以拥有多个Slaves。
- Master下的Slave还可以接受同一架构中其它slave的链接与同步请求,实现数据的级联复制,即Master->Slave->Slave模式;
- Master以非阻塞的方式同步数据至slave,这将意味着Master会继续处理一个或多个slave的读写请求;
4.Slave端同步数据也可以修改为非阻塞是的方式,当slave在执行新的同步时,它仍可以用旧的数据信息来提供查询;否则,当slave与master失去联系时,slave会返回一个错误给客户端; - 主从复制具有可扩展性,即多个slave专门提供只读查询与数据的冗余,Master端专门提供写操作;
- 通过配置禁用Master数据持久化机制,将其数据持久化操作交给Slaves完成,避免在Master中要有独立的进程来完成此操作。
Redis主从拷贝的过程
slave连接上master之后,slave发送一个SYNC命令到master,master接收到命令之后,无论是第一次同步建立的连接,还是连接断开后的重新连接,master会开启BGSAVE操作,启动一个后台进程,保存一份当前master内存快照,并且开始保存从调用BGSAVE之后的所有写命令,master生成完快照之后,发送内存快照rdb文件给slave。slave接收到master发送过来的rdb文件之后,将清空所有旧数据,加载接收到的rdb文件到内存中,发送完rdb文件给slave之后,开始发送刚刚保存的写操作日志给slave,slave执行这些写操作,至此,主从数据保存一致。发送完写日志之后,master会增量发送之后的写操作给slave,使主从一致。
ps: 当master和slave的连接断开时,slave可以自动重新建立连接。如果master同时收到多个slave发来的同步连接命令,只会使用启动一个进程来写内存快照,然后发送给所有的slave
Master write, Slave read机制
redis的主从复制,通过程序实现数据的读写分离,让master负责处理些请求,slave负责处理读请求,通过扩展slave处理更多的并发请求,减轻master端的负载。
ps:在程序中判断用户的读写请求,将write请求发送给master,read请求发送给slave处理
redis主从拷贝配置
开启主从复制,最简单的方式,连接上从机redis,执行slaveof <主机host> <主机端口>,另外也可以在从机的配置文件中加入slaveof <主机host> <主机端口>,这样从机启动的时候,就会自动连接主机,并且同步数据。
slaveof 192.168.100.126 6379 # 配置主机信息
masterauth <master-password> # 如果主机设置了密码,配置密码
slave-serve-stale-data yes # 配置当从机正在和主机进行同步的时候是否响应,如果配置是,有可能客户端会读到旧数据,如果配置否,当请求读数据的时候,将会报错SYNC with master in progress
slave-read-only yes # 从机是否只读。这边设置可写,不会同步到主机,
repl-ping-slave-period 10 # 从机发送ping命令到主机的间隔时间。
repl-timeout 60 # 主机响应超时时间,这个包括传输超时,IO超时,ping超时,注意这边时间必须大于上面的间隔时间,要不然会一直报超时错误。
repl-disable-tcp-nodelay no # 是否禁用TCP NODELAY。官方对这个配置用法的建议是:
# By default we optimize for low latency, but in very high traffic conditions
# or when the master and slaves are many hops away, turning this to “yes” may
# be a good idea.
# 默认情况下,我们优化目的是为了低延迟,但是在高传输条件或者主从机分布在路由很多跳之外的,建议禁用掉tcp-nodelay。
slave-priority 100 # 如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master
Redis学习 - 主从拷贝的更多相关文章
- redis学习主从配置
配置slave服务器只需要在配置文件中加入如下配置: slaveof 127.0.0.1 6379 即:slaveof masterip masterport
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- C# Redis学习系列三:Redis配置主从
Redis配置主从 主IP :端口 192.168.0.103 6666 从IP:端口 192.168.0.108 3333 配置从库 (1)安装服务: redis-server ...
- Redis学习二:Redis高并发之主从模式
申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 前面已经学习了Redis的持久化方式,接下来开始学习Redi ...
- 【Redis】Redis学习(三) Redis 主从模式详解
不管任何程序,只运行一个实例都是不可靠的,一旦因为网络原因导致所在机器不可达,或者所在服务器挂掉,那么这个程序将不能对外提供服务了,Redis也是一样的.不过Redis的主从并不是解决这个问题的,一些 ...
- Redis学习之路(三)之Redis主从和哨兵模式
目录 一.Redis主从配置 1.环境说明 2.修改主从的redis配置文件 3.启动主从redis 3.数据同步验证 二.Redis哨兵模式 1.Redis sentinel介绍 2.Redis S ...
- Redis 学习笔记(五)高可用之主从模式
上一节提到了 Redis 的持久性,也就是在服务器实例宕机或故障时,拥有再恢复的能力.但是在这个服务器实例宕机恢复期间,是无法接受新的数据请求.对于整体服务而言这是无法容忍的,因此我们可以使用多个服务 ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
随机推荐
- python 思维导图-linux命令
linux基础 linux关于文件/目录的终端命令 linux关于文件内容处理的终端命令
- Docker容器的启动与停止
启动docker:systemctl start docker 停止docker:systemctl stop docker 重启docker:systemctl restart docker 查看d ...
- 在HTML中引用JavaScript中的变量
和上次的代码几乎一样,但这次是引用已经写好的变量.主要功能和用法如下: document对象的getElementId方法得到HTML元素. HTML元素的value属性可以用来设置变量的值. 02. ...
- maven项目的标准目录结构
maven项目的标准目录结构如下:
- 记一次线上gc调优的过程
近期公司运营同学经常表示线上我们一个后台管理系统运行特别慢,而且经常出现504超时的情况.对于这种情况我们本能的认为可能是代码有性能问题,可能有死循环或者是数据库调用次数过多导致接口运行 ...
- 让CentOS在同一个窗口打开文件夹
http://www.linuxidc.com/Linux/2010-04/25756.htm
- Aspose.words Java基于模板生成word之纯文本内容
一,创建word模板 1.新建一个word文档 2.分别给四个参数设置域 (1)将鼠标置于想要设置域的地方 (2)设置域名 (3)设置好之后如下图所示 二,项目 1,引入maven依赖 <dep ...
- Scrum Meeting 10.25
成员 已完成任务 下一阶段任务 用时 徐越 阅读前端代码中和通信相关的部分 学习服务器配置 4h 赵庶宏 阅读前端代码中和通信相关的部分 学习服务器配置 4h 薄霖 继续做UI开发 界面优化 4h 武 ...
- Daily Scrumming* 2015.10.25(Day 6)
一.总体情况总结 1.UI今日总结:初步设计了社团详情界面 2.后端今日总结:讨论并设计数据库,表内容,属性和相互联系等,并在rails的activeRecord和activeModel中实现,同时设 ...
- java 线程的简单理解
想要实现线程可以继承Thread也可以实现接口runnable,在类中重写 run()方法在主函数调用start方法就可以开辟线程. 对于java对象都有一个wait()和notify().notif ...