当并发量达到肯定水平时,web利用无奈解决这么多申请,咱们能够用nginx做负载平衡,连贯多个web利用。当数据库无奈撑持的时候,咱们做主从架构,读写拆散,分担数据库压力。在redis中,也能够用主素来分担压力。

简略配置

复制redis.windows.conf文件,批改端口,以及增加slaveof这行配置。slaveof用于指向主redis服务的ip和端口。

port 6380slaveof 127.0.0.1 6379

先启动master,再启动slave,能够看到slave曾经同步了master的数据,在master的操作,也会同步到slave中。
master的信息,能够看到他role是master,有个从服务器slave0,以及slave0的相干信息。

local:0>info replication"# Replicationrole:masterconnected_slaves:1slave0:ip=127.0.0.1,port=6380,state=online,offset=208,lag=1master_repl_offset:208repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:207"

salve的信息,能够看到他的role是slave,以及master的相干信息。

local6380:0>info replication"# Replicationrole:slavemaster_host:127.0.0.1master_port:6379master_link_status:upmaster_last_io_seconds_ago:2master_sync_in_progress:0slave_repl_offset:194slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0"

如果想让slave断开同步,则能够执行slaveof no one命令,再查看info replication时,发现他slave曾经变成了master。如果持续同步,则执行slaveof 127.0.0.1 6379,此时查看info replication,role还是slave。

原理


如果master的rdb还没生成实现,此时如果有其余slave连进来,是能够间接应用这个rdb以及缓冲区的命令的,如果曾经生成完,则会从新生成rdb文件。
尽管从库的数据能够作为备份,然而还是倡议开启主库的长久化。如果没有开启,当主库宕机重启后,主库的数据是空的,而从库就会把空的数据复制过去并清空本身的数据,则从库的数据也变成空的了。
以上流程是第一次同步的时候,redis也反对断点续传。master中记录了backlog,master和redis都记录了对应的offset,master依据这个offer进行同步数据,如果没有对应的offset,只能全量复制了。

一主多从

生成rdb时,是fork了一个子过程来解决,此时并不影响master接管客户端的命令,然而redis解决命令的效率会升高。如果咱们须要多个slave,会导致master的性能降落的重大,所以咱们能够采纳一主多从的形式来做。

当从服务器1从master同步的时候,他会断开从服务器a、b、c的连贯,同步实现后,再把数据以master的模式同步给服务器a、b、c。