国内最专业的IT技术学习网

Mysql数据库

当前位置:主页 > Mysql数据库 >

银河官网:一文带你揭开Redis复制原理的神秘面纱

发布时间:2019/09/17标签:   数据库      Redis      复制    点击量:

原标题:银河官网:一文带你揭开Redis复制原理的神秘面纱

33570:S 26 Aug 2019 11:54:48.918 * MASTER <-> REPLICA sync started 

部分同步

master_replid:b9e0f41a523e078a6a88ae274f204777775ab4dc 

18828:S 04 Aug 2019 10:52:27.746 * Master replied to PING, replication can continue... 

18661:M 04 Aug 2019 10:52:27.747 * Background saving started by pid 18832 

master_last_io_seconds_ago:6 

2) "2" 

repl_backlog_size:1048576 

# 2) Redis replicas are able to perform a partial resynchronization with the 

34781:M 26 Aug 2019 13:24:06.544 * Replica 127.0.0.1:6380 asks for synchronization 

connected_slaves:2 

场景二,中断后同步

master_repl_offset:252 

9) "redisfast" 

# another Redis server. A few things to understand ASAP about Redis replication. 

33570:S 26 Aug 2019 11:54:49.003 * MASTER <-> REPLICA sync: Flushing old data 

  .-`` .-```.  ```\/    _.,_ ''-._                                    

33570:S 26 Aug 2019 13:23:41.429 * MASTER <-> REPLICA sync started 

#    and resynchronize with them. 

备注:仅在从库上进行设置

# 1) Redis replication is asynchronous, but you can configure a master to 

33574:C 26 Aug 2019 11:54:48.929 * RDB: 4 MB of memory used by copy-on-write 

34781:M 26 Aug 2019 13:34:39.562 * Replica 127.0.0.1:6382 asks for synchronization 

部分同步,对应着上文提及的增量复制,即只将部分数据发送到从数据库

 |    `-._   `._    /     _.-'    |     PID: 18828 

master_sync_in_progress:0 

当从数据库重新连上主数据库时,从数据库会通过PSYNC命令将自己的复制偏移量offset发送给主数据库,主数据库会根据这个复制偏移量来决定对从数据库执行何种同步操作。以达到所有数据库的偏移量一致。

34781:M 26 Aug 2019 13:24:06.544 * Starting BGSAVE for SYNC with target: disk 

注:该特效在Redis 2.8版本后实现,2.6版本之前均需要重新初始化。

33570:S 26 Aug 2019 13:24:06.544 * Master replied to PING, replication can continue... 

6) "kebo" 

图1,Redis架构类型

second_repl_offset:-1 

主库从状态:

重启主数据库后,开始向两个发送同步数据,建立连接

3) "d" 

 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6380 

34781:M 26 Aug 2019 13:24:06.601 * Background saving terminated with success 

 |`-._`-._    `-.__.-'    _.-'_.-'|                                  

34781:M 26 Aug 2019 13:24:06.701 * Synchronization with replica 127.0.0.1:6382 succeeded 

5) "test" 

Redis在主从数据库之间的复制是异步的,这意味着,主数据库执行完客户端请求的命令后会立即将命令发送给请求的客户端,并同步到从数据库,而不会等待从数据库接收到命令后再返回给客户端,因此该情况就会存在一定的数据不一致性风险,也就是Redis不保证强一致性,而是通过从库策略追赶与主数据库的数据差异,以保障主从状态一直。在Redis中也可以设置参数来强行让从库数据同步后,主库才能继续写入,这样的配置对主库访问要求较高,因此会影响主库的性能。

      `-._    `-.__.-'    _.-'                                       

connected_slaves:0 

在主从同步中,如果出现数量差异较大,Redis会根据从库的offset进行选择全量、增量的恢复。

1. 测试验证

34781:M 26 Aug 2019 13:24:06.701 * Background saving terminated with success 

master_replid:fc71b19242e8145254ba7751d346a8f4bb4c53c6 

33744:C 26 Aug 2019 12:03:17.731 # Redis version=5.0.4, bits=64commit=00000000modified=0pid=33744, just started 

OK 

完整性同步,也就是上文说到的数据初始化过程,将主数据库中所存储的所有数据全部发送到从数据库。

(1) 整理conf配置文件

second_repl_offset:-1 

# Replication 

简易过程如下:

127.0.0.1:6380> 

33570:S 26 Aug 2019 13:23:41.429 # Error condition on socket for SYNC: Connection refused 

33565:M 26 Aug 2019 12:13:43.494 # Connection with replica 127.0.0.1:6382 lost. 

4) "4" 

33570:S 26 Aug 2019 13:23:47.478 * Connecting to MASTER 127.0.0.1:6379 

34781:M 26 Aug 2019 13:34:39.562 * Partial resynchronization request from 127.0.0.1:6382 accepted. Sending 56 bytes of backlog starting from offset 888. 

127.0.0.1:6380> get kebo 

33570:S 26 Aug 2019 11:54:48.918 * Trying a partial resynchronization (request fc71b19242e8145254ba7751d346a8f4bb4c53c6:2533). 

 |    `-._   `._    /     _.-'    |     PID: 33744 

127.0.0.1:6380> get slavetest 

slave_priority:100 

33570:S 26 Aug 2019 11:54:49.004 * MASTER <-> REPLICA sync: Finished with success 

127.0.0.1:6380> INFO replication 

7) "slavetest" 

slave0:ip=127.0.0.1,port=6380,state=online,offset=6986,lag=1 

34781:M 26 Aug 2019 13:24:06.602 * Synchronization with replica 127.0.0.1:6380 succeeded 

[redis@albert src]$ ps -ef | grep redis 

18828:S 04 Aug 2019 10:52:27.788 * MASTER <-> REPLICA sync: Flushing old data 

四、数据一致性验证

master_sync_in_progress:0 

  `-._    `-._`-.__.-'_.-'    _.-'                                   

#    network partition replicas automatically try to reconnect to masters 

8) "b" 

版权信息Copyright © 银河官网 版权所有    ICP备案编号:鲁ICP备09013610号