乐趣区

关于redis:redis-主从高性能

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

简略配置

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

port 6380
slaveof 127.0.0.1 6379

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

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

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

local6380:0>info replication
"# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:194
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
"

如果想让 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。

退出移动版