redis 主从复制
redis 主从复制 https://lanjingling.github.io/2015/11/17/redis-mast-slaveof/ Redis中,用户可以使用slaveof命令或者slaveof配置项,让一个服务器去复制另一个服务器。进行复制中的主从服务器双方的数据库将保存相同的数据 (一致性) 。 通过命令: 127.0.0.1:6380> slaveof 127.0.0.2 6379 上面的命令表示: 端口为6380的服务器 开始复制 端口为6379的服务器。 通过配置文件: 主服务器不用做任何修改,在从服务器的配置文件中作如下修改: slaveof 192.168.0.100 6379 (映射到主服务器上) 如果master设置了验证密码,还需配置masterauth。楼主的master设置了验证密码为admin,所以配置masterauth admin。配置完之后启动slave的Redis服务,OK,主从配置完成。 在master和slave分别执行info命令,查看结果如下, 主服务器: 9 Replication role:master connected_slaves:1 slave0:ip=127.0.0.2,port=6380,state=online,offset=10394,lag=0 master_repl_offset:10394 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:10393 从服务器: 16 Replication role:slave master_host:127.0.0.2 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:10436 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 注: 当从服务器执行了slaveof命令后,从服务器中原来的数据将清空,重新加载主服务器中的数据。 Redis2.8版本之前使用了旧版复制功能,2.8之后开始使用新版本的功能。 旧版复制: 旧版复制实现: 复制功能分为同步和命令传播两个步骤: 同步: 将从服务器的数据库状态更新成主服务器当前的数据库状态; 命令传播: 当主服务器的数据库状态被修改,导致主从服务器状态不一致,让主从服务器数据库状态重新回到一致状态; 同步: 当客户端向从服务器发送slaveof命令后,要求从服务器复制主服务器时,从服务器首先要执行同步操作,具体为从服务器向主服务器发送SYNC命令,步骤如下: 从服务器向主服务器发送SYNC命令; 收到SYNC命令的主服务器开始执行bgsave,在后台生成一个rdb文件;并用一个缓冲区记录从现在开始执行的所有写命令; 主服务器bgsave执行完毕后,将rdb文件发送给从服务器;从服务器收到后载入该rdb文件,将从数据库状态更新成主服务器执行bgsave时的状态; 主服务器将记录在缓冲区中的写命令发送给从服务器;从服务器执行这些命令,将其状态更新成主服务器当前的妆台; 命令传播: 在同步操作完毕后,主从服务器达到了一致的状态,但这种状态不是一成不变的。当主服务器执行了写操作后,主服务器会对从服务器执行命令传播操作,将相应的写命令发送给从服务器,从服务器执行该命令,从而达到一致性。 缺陷: 旧版复制过程中,如果主从服器出现断线,当从服务器重新连接上后,这时,由于主从服务器状态不一致,所以从服务器向主服务器发送SYNC命令。这时,主服务器会按照上面的步骤执行bgsave….操作。 ...