加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

一文带你揭开Redis复制原理的神秘面纱

发布时间:2019-09-17 14:37:54 所属栏目:编程 来源:陈龙
导读:Redis作为一个非布局化的内存数据库,在某些应用场景具备响应上风,在现实的场景计划中也获得普及的存眷和行使。可是,大部门企业的Redis数据库架构为单机运行,没有计划容灾复制,这样对付Redis的容错特征没有施展出来,并且无耐久化环境下,数据存在丢失

主库产生RDB以及缓存呼吁到从库:

  1. 33565:M 26 Aug 2019 11:54:48.918 * Replica 127.0.0.1:6380 asks for synchronization 
  2. 33565:M 26 Aug 2019 11:54:48.918 * Partial resynchronization not accepted: Replication ID mismatch (Replica asked for 'fc71b19242e8145254ba7751d346a8f4bb4c53c6', my replication IDs are '1e531f295fc2dcf986a18889e8f8c3b6e6fdc7b6' and '0000000000000000000000000000000000000000') 
  3. 33565:M 26 Aug 2019 11:54:48.918 * Starting BGSAVE for SYNC with target: disk 
  4. 33565:M 26 Aug 2019 11:54:48.919 * Background saving started by pid 33574 
  5. 33574:C 26 Aug 2019 11:54:48.929 * DB saved on disk 
  6. 33574:C 26 Aug 2019 11:54:48.929 * RDB: 4 MB of memory used by copy-on-write 
  7. 33565:M 26 Aug 2019 11:54:49.002 * Background saving terminated with success 
  8. 33565:M 26 Aug 2019 11:54:49.003 * Synchronization with replica 127.0.0.1:6380 succeeded 

场景二,间断后同步

假如因为某种妨碍导致了从数据库停息了与主数据库的同步后,从数据库从头毗连到主数据库,主数据库只必要将间断时代执行的呼吁传送到从库(基于呼吁记录名目),这样就可以继承举办同步,保持数据同等性。

注:该殊效在Redis 2.8版本后实现,2.6版本之前均必要从头初始化。

浅显进程如下:

(1) 模仿从库间断,将其kill掉

  1. [redis@albert src]$ ps -ef | grep redis 
  2. redis     33565  33500  0 11:54 pts/4    00:00:01 ./redis-server *:6379 
  3. redis     33570  33476  0 11:54 pts/5    00:00:01 ./redis-server 127.0.0.1:6380 
  4. redis     33744  33688  0 12:03 pts/0    00:00:00 ./redis-server 127.0.0.1:6382 
  5. [redis@albert src]$ 
  6. [redis@albert src]$ kill -9 33744 

(2) 主库吸取到间断信息

  1. 33565:M 26 Aug 2019 12:03:17.736 * Replica 127.0.0.1:6382 asks for synchronization 
  2. 33565:M 26 Aug 2019 12:03:17.736 * Partial resynchronization request from 127.0.0.1:6382 accepted. Sending 714 bytes of backlog starting from offset 1. 
  3. 33565:M 26 Aug 2019 12:13:43.494 # Connection with replica 127.0.0.1:6382 lost. 

(3) 按照偏移量举办同步

  1. 33565:M 26 Aug 2019 12:14:12.019 * Replica 127.0.0.1:6382 asks for synchronization 
  2. 33565:M 26 Aug 2019 12:14:12.019 * Partial resynchronization request from 127.0.0.1:6382 accepted. Sending 436 bytes of backlog starting from offset 1315. 

场景三,增量复制

因为Redis同步的是呼吁荟萃,主数据库记录那些对本身状态产生改观的指令记录到当地内存buffer中,通过异步的方法将buffer中的指令同步到从数据库,从数据库操作这些指令执行,以保持与主数据库一样的状态,也等于通过应用呼吁的偏移量反馈到主数据库,让主数据库不绝发送buffer指令。

偏移量的查察:

  1. role:master 
  2. connected_slaves:2 
  3. slave0:ip=127.0.0.1,port=6380,state=online,offset=3724,lag=1 
  4. slave1:ip=127.0.0.1,port=6382,state=online,offset=3724,lag=1 
  5. master_replid:b9e0f41a523e078a6a88ae274f204777775ab4dc 
  6. master_replid2:0000000000000000000000000000000000000000 
  7. master_repl_offset:3724 
  8. second_repl_offset:-1 
  9. repl_backlog_active:1 
  1. role:slave 
  2. master_host:127.0.0.1 
  3. master_port:6379 
  4. master_link_status:up 
  5. master_last_io_seconds_ago:7 
  6. master_sync_in_progress:0 
  7. slave_repl_offset:3752 
  8. slave_priority:100 
  9. slave_read_only:1 

四、数据同等性验证

Redis提供了两种数据同步模式,以保持主数据库与从数据库的同等性。

  • 完备性同步
  • 部门同步

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

部门同步,对应着上文说起的增量复制,即只将部门数据发送到从数据库。

1. 测试验证

增进从库实例

  1. [redis@albert src]$ cp redis.conf6380 redis.conf6382 

调解设置文件

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读