zoukankan      html  css  js  c++  java
  • redis主从复制

    一、redis主从复制原理

    1、从服务器向主服务器发送SYNC命令;
    2、当主服务器收到SYNC命令后,执行BGSAVE命令,在后台生成RDB文件,使用缓冲区记录从现在开始执行的所有写命令;当主服务器的BGSAVE命令执行完成后,主服务器将BGSAVE命令生成的RDB文件发送给从服务器,从服务器接收并载入RDB文件,将自己的数据库状态更新至主服务器执行BGSAVE命令时的数据库状态。
    3、主服务器将记录在缓冲区里所有的写命令发送给从服务器,从服务器执行这些命令,将自己的数据库状态更新至主服务器数据库当前所处状态;

    11:01:19.231675 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 780:819, ack 29, win 229, options [nop,nop,TS val 1113163530 ecr 849387959], length 39: RESP "REPLCONF" "ACK" "237147"
    11:01:19.232150 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 819, win 235, options [nop,nop,TS val 849388964 ecr 1113163530], length 0
    11:01:20.100528 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [P.], seq 29:73, ack 819, win 235, options [nop,nop,TS val 849389833 ecr 1113163530], length 44: RESP "set" "name4" "hello,world1!"
    #这是redis主从复制的抓包过程,0.91是从库,0.183是主库;
    第一条是从库向主库发送SYNC命令(REPLCONF);
    第二条是主库向从库发送RDB文件;
    第三条是主库向从库发送写命令(set name4 hello,world!);

    二、具体配置方法

    1、环境介绍

    操作系统:CentOS7.6
    Redis版本:redis-5.0.12
    主库:192.168.0.183
    从库:192.168.0.91

    2、配置

    2.1、主库配置

    #主库配置一个认证密码
    requirepass 123.com

    2.2、从库配置

    # replicaof <masterip> <masterport>
    replicaof 192.168.0.183 6379
    # masterauth <master-password>
    masterauth 123.com

    3、验证

    3.1、在主库插入数据

    [root@master]# redis
    127.0.0.1:6379> auth 123.com
    OK
    127.0.0.1:6379> set name7 hello,world7!
    OK
    127.0.0.1:6379> set name8 hello,world8!
    OK
    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.0.91,port=6379,state=online,offset=254937,lag=0
    master_replid:4c33dba5cd92bf97ec4a023d759d82e6ab7080d3
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:254937
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:254937

    3.2、在从库查看

    [root@node1 bin]# redis
    127.0.0.1:6379> get name7
    "hello,world7!"
    127.0.0.1:6379> get name8
    "hello,world8!"
    127.0.0.1:6379> info replication
    # Replication
    role:slave
    master_host:192.168.0.183
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:7
    master_sync_in_progress:0
    slave_repl_offset:254895
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:4c33dba5cd92bf97ec4a023d759d82e6ab7080d3
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:254895
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:17852
    repl_backlog_histlen:237044

    注意:

      redis主从同步配置完成后,默认从库是只读的,之所以这样是为了保持主从之间数据的一致性;

    三、redis的心跳探测

    14:44:19.953848 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 156:195, ack 1, win 229, options [nop,nop,TS val 1126544252 ecr 862768673], length 39: RESP "REPLCONF" "ACK" "255945"
    14:44:19.954432 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 195, win 235, options [nop,nop,TS val 862769683 ecr 1126544252], length 0
    14:44:20.962297 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 195:234, ack 1, win 229, options [nop,nop,TS val 1126545261 ecr 862769683], length 39: RESP "REPLCONF" "ACK" "255945"
    14:44:20.962717 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 234, win 235, options [nop,nop,TS val 862770692 ecr 1126545261], length 0
    14:44:21.645281 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [P.], seq 1:15, ack 234, win 235, options [nop,nop,TS val 862771374 ecr 1126545261], length 14: RESP "PING"
    14:44:21.645381 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [.], ack 15, win 229, options [nop,nop,TS val 1126545944 ecr 862771374], length 0
    14:44:21.970501 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 234:273, ack 15, win 229, options [nop,nop,TS val 1126546269 ecr 862771374], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:21.970996 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 273, win 235, options [nop,nop,TS val 862771700 ecr 1126546269], length 0
    14:44:22.979998 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 273:312, ack 15, win 229, options [nop,nop,TS val 1126547278 ecr 862771700], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:22.980590 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 312, win 235, options [nop,nop,TS val 862772709 ecr 1126547278], length 0
    14:44:23.989624 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 312:351, ack 15, win 229, options [nop,nop,TS val 1126548288 ecr 862772709], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:23.990111 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 351, win 235, options [nop,nop,TS val 862773719 ecr 1126548288], length 0
    14:44:24.998048 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 351:390, ack 15, win 229, options [nop,nop,TS val 1126549297 ecr 862773719], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:24.998808 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 390, win 235, options [nop,nop,TS val 862774727 ecr 1126549297], length 0
    14:44:26.007953 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 390:429, ack 15, win 229, options [nop,nop,TS val 1126550306 ecr 862774727], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:26.008612 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 429, win 235, options [nop,nop,TS val 862775737 ecr 1126550306], length 0
    14:44:27.014995 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 429:468, ack 15, win 229, options [nop,nop,TS val 1126551313 ecr 862775737], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:27.015458 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 468, win 235, options [nop,nop,TS val 862776744 ecr 1126551313], length 0
    14:44:28.021899 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 468:507, ack 15, win 229, options [nop,nop,TS val 1126552320 ecr 862776744], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:28.022414 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 507, win 235, options [nop,nop,TS val 862777751 ecr 1126552320], length 0
    14:44:29.029020 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 507:546, ack 15, win 229, options [nop,nop,TS val 1126553327 ecr 862777751], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:29.029532 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 546, win 235, options [nop,nop,TS val 862778758 ecr 1126553327], length 0
    14:44:30.036071 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 546:585, ack 15, win 229, options [nop,nop,TS val 1126554335 ecr 862778758], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:30.036570 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 585, win 235, options [nop,nop,TS val 862779765 ecr 1126554335], length 0
    14:44:31.042853 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 585:624, ack 15, win 229, options [nop,nop,TS val 1126555341 ecr 862779765], length 39: RESP "REPLCONF" "ACK" "255959"
    14:44:31.043525 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 624, win 235, options [nop,nop,TS val 862780772 ecr 1126555341], length 0
    14:44:31.730521 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [P.], seq 15:29, ack 624, win 235, options [nop,nop,TS val 862781459 ecr 1126555341], length 14: RESP "PING"
    14:44:31.730616 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [.], ack 29, win 229, options [nop,nop,TS val 1126556029 ecr 862781459], length 0
    14:44:32.050120 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 624:663, ack 29, win 229, options [nop,nop,TS val 1126556349 ecr 862781459], length 39: RESP "REPLCONF" "ACK" "255973"
    14:44:32.050578 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 663, win 235, options [nop,nop,TS val 862781779 ecr 1126556349], length 0
    14:44:33.056403 IP 192.168.0.91.53232 > 192.168.0.183.6379: Flags [P.], seq 663:702, ack 29, win 229, options [nop,nop,TS val 1126557355 ecr 862781779], length 39: RESP "REPLCONF" "ACK" "255973"
    14:44:33.056918 IP 192.168.0.183.6379 > 192.168.0.91.53232: Flags [.], ack 702, win 235, options [nop,nop,TS val 862782786 ecr 1126557355], length 0

      通过抓包,可以看到,一旦主从同步完成,主库会每隔10s发起一次PING包,来探测从库是否存活;

      配置文件中,心跳机制的时间是由repl-ping-replica-period参数来控制的,默认10s;

  • 相关阅读:
    Atitit fms Strait (海峡) lst 数据列表目录1. 4大洋 12. 著名的海大约40个,总共约55个海 13. 海区列表 23.1. 、波利尼西亚(Polynesia,
    Atitit trave islands list 旅游资源列表岛屿目录1. 东南亚著名的旅游岛屿 21.1. Cjkv 日韩 冲绳 琉球 济州岛 北海道 21.2. 中国 涠洲岛 南澳
    Atitit Major island groups and archipelagos 主要的岛群和群岛目录资料目录1. 岛群 波利尼西亚(Polynesia, 美拉尼西亚(Melanesia,
    Atitit glb 3tie city lst 三线城市列表 数据目录1. 全球范围内约90个城市 三线 12. 世界性三线城市全球共
    Atitit glb 1tie 2tie city lst 一二线城市列表数据约50个一线城市Alpha ++ 阿尔法++,,London 伦敦,,New York 纽约,,Alpha +
    Attit 现代编程语言重要特性目录第一章 类型系统 基本三大类型 2第一节 字符串 数字 bool 2第二节 推断局部变量 2第三节 动态类型 2第二章 可读性与开发效率 简单性 2
    Atitit 未来数据库新特性展望目录1. 统一的翻页 21.1. 2 Easy Top-N
    使用Chrome DevTools(console ande elements panel)进行xpath/css/js定位
    chrome -console妙用之定位xpath/js/css
    表达式树之构建Lambda表达式
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/14517062.html
Copyright © 2011-2022 走看看