redis主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致;且实现Redis的主从复制非常简单。
redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。

过程:
1:当一个从数据库启动时,会向主数据库发送sync命令,

2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来

3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。

4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。

注意:redis2.8之前的版本:当主从数据库同步的时候从数据库因为网络原因断开重连后会重新执行上述操作,不支持断点续传。
redis2.8之后支持断点续传,推荐安装最新版;

配置
Redis主从结构支持一主多从
主节点:172.17.11.35
从节点:172.17.11.36
注意:所有从节点的配置都一样

手动修改配置文件
只需要修改从节点中redis的配置文件中的slaveof属性启动redis节点即可

slaveof 172.17.11.35 6379

运行redis-cli 登录控制台info后可看到信息:

redis-cli 
127.0.0.1:6379> INFO
# Replication
role:slave
master_host:172.17.11.35
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:21490
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d5370a33ed6b49a24111ebac3e5d8f0a56a8a4aa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:21490
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:21490

当然也可以动态设置
通过redis-cli 连接到从节点服务器,执行下面命令即可。

slaveof 172.17.11.35 6379

演示结果和手动方式一致。
同理在Master上用redis-cli登录控制台,使用info查看

# Replication
role:master
connected_slaves:1
slave0:ip=172.17.11.36,port=6379,state=online,offset=21644,lag=0
master_replid:d5370a33ed6b49a24111ebac3e5d8f0a56a8a4aa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:21644
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:21644

注意事项
如果使用主从复制,那么要确保master激活了持久化,或者确保它不会在当掉后自动重启。
原因:
slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。
在配置redis复制功能的时候如果主数据库设置了密码,需要在从数据的配置文件中通过masterauth参数设置主数据库的密码,这样从数据库在连接主数据库时就会自动使用auth命令认证了。相当于做了一个免密码登录。

带符号 * 的表示必填项