单机环境存在的问题:

  1、机器故障,直接凉凉

  2、容量瓶颈

  3、QPS瓶颈

主从复制

  对于可拓展平台来说,复制(replication)是必不可少的。replication可以让其他服务器slave拥有一个不断更新的数据副本,slave可以用

来处理客户端的读请求。

1.1、特点

  1、一个master可以有多个slave,slave下层也可以有slave

  2、一个slave只能有一个master

  3、数据流是单向的,只能从master到slave

1.2、主从复制实现方式

命令方式(异步):

  slaveof host port就会将当前Redis数据复制过去,slaveof no one就会断开复制,不会将已复制的数据清除,一个节点被设置成slave,数

据就会被清除

配置方式:

  1. slaveof 127.0.0.1 6379
  2. slave-read-only yes //从节点只能做读操作,如果slave进行写操作,而master是不知道的,无法进行数据同步

对比:

  命令配置不需要重启Redis,但是不方便统一管理,一般在第一次使用Redis的时候,就统一配置,重启Redis的可能不多

run_id:

  Redis启动就会产生一个run_id作为唯一标识符

  1. [root@iZ2zecuwoxm5hmeaqo33dfZ redis-4.0.2_2]# redis-cli -p 6379 info server | grep run
  2. run_id:58f6366dec43291630996fae04bd6face91e894d
  3. [root@iZ2zecuwoxm5hmeaqo33dfZ redis-4.0.2_2]# redis-cli -p 6379 info server
  4. # Server
  5. redis_version:4.0.2
  6. redis_git_sha1:00000000
  7. redis_git_dirty:0
  8. redis_build_id:f2cb6376684139ef
  9. redis_mode:standalone
  10. os:Linux 3.10.0-693.2.2.el7.x86_64 x86_64
  11. arch_bits:64
  12. multiplexing_api:epoll
  13. atomicvar_api:atomic-builtin
  14. gcc_version:4.8.5
  15. process_id:23689
  16. run_id:58f6366dec43291630996fae04bd6face91e894d
  17. tcp_port:6379
  18. uptime_in_seconds:10300775
  19. uptime_in_days:119
  20. hz:10
  21. lru_clock:14904472
  22. executable:/usr/local/redis/redis-4.0.2_1/redis-server
  23. config_file:/usr/local/redis/redis-4.0.2_1/./redis_6379.conf

run_id发生变动,或者master节点启动,就会发生全量复制

偏移量:

在写数据的时候,偏移量就会发生变化

  1. [root@iZ2zecuwoxm5hmeaqo33dfZ redis-4.0.2_2]# redis-cli -p 6379 info replication
  2. # Replication
  3. role:master
  4. connected_slaves:0
  5. master_replid:ce82c6b4c71e606ccded8486c5f72e2b04be5dea
  6. master_replid2:0000000000000000000000000000000000000000
  7. master_repl_offset:0
  8. second_repl_offset:-1
  9. repl_backlog_active:0
  10. repl_backlog_size:1048576
  11. repl_backlog_first_byte_offset:0
  12. repl_backlog_histlen:0

master_repl_offset就是偏移量,只不过我这里没开启master-slave

全量复制

  将master之前的数据,和同步过程产生的数据,都会同步到slave

过程:

  首先将RDB文件同步给slave,在同步的过程中发生的写命令记录下来,然后对比master和slave的偏移量,将这期间写入的数据也同步到slave,

最终完成全量复制

 

全量复制开销:

  1、bgsave时间

  2、RDB文件传输时间

  3、从节点数据清空时间

  4、从节点加载RDB文件的时间

  5、可能存在的AOF重写:load RDB之后,如果AOF开启,就会进行AOF重写保证是最新状态

全量复制存在的问题:

   如果master和slave之间发生网络波动,就会丢失数据,在Redis V2.8版本之前,只能再进行一次全量复制,这样开销很大,V2.8版本,出现

部分复制

部分复制V2.8

主从复制常见问题:

1、读写分离:将读流量分摊在slave上

读写分离的问题:

  1).复制数据延迟,如果节点发生阻塞,可能出现数据不一致,但是一般不考虑这个

  2).读到过期数据,和处理过期数据策略有关

  3).slave故障

2、主从配置不一致

  master和slave的maxmemory配置不一致,全量复制过大,slave maxmemory不够,就会触发删除规则(优先删除过期数据),就会发生

数据丢失,master发生故障,slave升为master,就会有问题

3、规避全量复制

  1).第一次全量复制无法避免,可以使用小分片将maxmemory设置小一点,或者在低峰(夜间)进行处理

  2).节点run_id不匹配,master重启,run_id发生改变,可以使用故障转移

  3).repl_back_buffer不足,实际上是个队列,通过rel_backlog_size将缓冲区设置大一点,默认1M,可设置10M,以实际需求为准

Redis系列(五)--主从复制的更多相关文章

  1. Redis系列(五):Redis的过期键删除策略

    本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略. 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数 ...

  2. 四、redis系列之主从复制与哨兵机制

    1. 绪言 在现实应用环境中,出于数据容量.容灾.性能等因素的考虑,往往不会只使用一台服务器,而是使用集群的方式.Redis 中也有类似的维持一主多从的方式提高 Redis 集群的高可用性的方案,而其 ...

  3. Redis系列七 主从复制(Master/Slave)

    主从复制(Master/Slave) 1.是什么 也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主. 2 ...

  4. redis系列:主从复制

    1 简介 这篇文章主要讲述Redis的主从复制功能.会依次从环境搭建.功能测试和原理分析几个方面进行介绍. 2 准备工作 服务器架构图如下 启动主服务器101,使用info replication命令 ...

  5. redis系列之------主从复制

    什么是主从复制 Redis的主从复制机制是指可以让从服务器(slave)能精确复制主服务器(master)的数据,如下图所示: 或者    主从复制的方式和工作原理 工作方式: Redis主从复制主要 ...

  6. Redis系列五 - 哨兵、持久化、主从

    问:骚年,都说Redis很快,那你知道这是为什么吗? 答:英俊潇洒的面试官,您好.我们可以先看一下 关系型数据库 和 Redis 本质上的区别. Redis采用的是基于内存的,采用的是单进程单线程模型 ...

  7. Redis系列(五)-Opserver的监控

    阅读目录: 基本介绍 使用配置 部署实例 面板属性 基本介绍 Opserver是Stack Exchange的一个开源监控系统,基于Net.MVC开发,所以Net程序员可以轻松基于它二次开发.它主要监 ...

  8. Redis系列五:redis键管理和redis数据库管理

    一.redis键管理 1 键重命名 rename oldKey newkey //格式rename oldKey newKey //若oldKey之前存在则被覆盖set name james :set ...

  9. Redis系列五 Redis持久化

    Redis持久化 一.RDB(Redis DataBase) 1.介绍 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Red ...

随机推荐

  1. ubuntu双网卡绑定配置

    1,安装bonding需要的软件 sudo apt-get install ifenslave 2,在/etc/modules中加入: bonding mode= miimon= 3,在/etc/ne ...

  2. ios7 UIBarButtonItem 默认蓝色

    [self.navigationItem setLeftBarButtonItem:leftButton]; 这样设置在ios7上button默认是蓝色 解决方法: leftButton.tintCo ...

  3. HDU 4445 数学-抛物运动

                                                          D - Crazy Tank                                 ...

  4. 【bzoj1150】[CTSC2007]数据备份Backup

    将k对点两两相连,求最小长度 易证得,最优方案中,相连的办公楼一定是取相邻的比取不相邻的要更优 然后就可以用贪心来做这道题了.. 将初始所有的线段放进堆里 每次取最短的线段进行连接,且ans+=a[i ...

  5. centos7 tengine2.1.2 编译安装 防火墙设置

    安装 pcre 和 openssl yum -y install pcre pcre-devel yum -y install openssl openssl-devel wget http://te ...

  6. 电脑的系统盘只有10G了

    软件也是缓存多了,准备把一些让家人卸载,昨天开始布置培训任务就是有一个电报的程序,把流程说了下,从今天开始就会指导,错误点分析.

  7. Runtime ----- 带你上道

    在IOS开发和学习过程中,我们经常会接触到一个词: Runtime  .很多开发者对之既熟悉又陌生,基本都是浅尝辄止,达不到灵活使用的水平(话说开发中也确实不经常用..)本文和大家一起研究一下,Run ...

  8. 洛谷P3400 仓鼠窝(单调栈)

    P3400 仓鼠窝 题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子 ...

  9. springboot(三)配置日志

    github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-serviceSLF ...

  10. 倒计时,短信发送后倒计时效果js

    <div class="input-group-addon"><a style="width: 100%;height: 100%" href ...