redis复制(redis多机功能篇)

复制

扩展系统处理读请求的能力,并提高系统的可用性
创建具有相同数据库的拷贝服务器

Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。
主从服务器两者拥有相同的数据库数据:只要主从服务器之间的网络连接正常,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。
在这里插入图片描述
左图展示了一个拥有一个从服务器的主服务器。
右图展示了一个拥有三个从服务器的主服务器。

使用从服务器来处理读命令请求

Redis 允许从服务器执行客户端发送的读命令,比如 GET 、LRANGE、SMEMBERS、HGET、ZRANGE 等等。

因为主从服务器拥有相同的数据库数据,所以从服务器在执行客户端发送的读命令时,获得的结果与主服务器执行相同的读命令所获得的结果是一样的。因此,用户可以将原本由主服务器负责处理的一部分(甚至全部)读命令请求转交给从服务器处理,从而降低主服务器在处理读命令请求方面的负载, 并扩展整个系统处理读命令请求的能力。
在这里插入图片描述

通过复制来扩展系统处理读请求的能力

通过添加从服务器可以线性地扩展整个系统处理读命令请求的能力。

下表列出了主从服务器在硬件条件相同的情况下,从服 务器数量与系统能够处理的读命令请求的数量之间的关系。
在这里插入图片描述

从服务器的创建与使用

使用 SLAVEOF 命令或者 slaveof 选项

创建从服务器的方法

Redis 提供了两种方法来为某个主服务器创建从服务器:

  1. 使用 SLAVEOF 命令,比如向一个服务器发送 SLAVEOF 127.0.0.1 6379 ,可以让接收到该命令的服务器变为 127.0.0.1:6379 的从服务器。在将一个服务器设置成从服务器之后,可以通过向它发送 SLAVEOF no one 来让它变回一个主服务器(数据库已有的数据会被保留)。

  2. 在启动服务器时,通过设置 slaveof 配置选项来让服务器成为指定服务器的从服务器。

举个例子,如果客户端对服务器 127.0.0.1:6380 发送命令 SLAVEOF 127.0.0.1 6379 ,那么127.0.0.1:6380 将成为 127.0.0.1:6379 的从服务器。
在这里插入图片描述

主从服务器操作示例
127.0.0.1:6379> SET msg “hello world”
OK
127.0.0.1:6379> INCR counter
(integer) 1
127.0.0.1:6379> INCR counter
(integer) 2
127.0.0.1:6379> RPUSH lst 1 3 5 7 9
(integer) 5

127.0.0.1:6380> GET msg
“hello world”
127.0.0.1:6380> GET counter
“2”
127.0.0.1:6380> LRANGE lst 0 -1
1)“1”
2)“3”
3)“5”
4)“7”
5)“9”

处理服务器下线

主服务器或者从服务器下线了,怎么办?!

服务器在复制时遭遇下线

在实际的世界中,因为故障而导致服务器下线的情况总是不可避免的。

在一个由主服务器和从服务器组成的系统中,主服务器或者从服务器都有可能会下线,但是不同服务器下线带来的影响并不相同:

  • 如果下线的是从服务器,那么整个系统处理读请求的性能将有所下降,但 整个系统仍然可以继续处理写请求和读请求,所以这种下线不会导致系统停机;
  • 另一方面,因为在整个系统里面,只有主服务器一个能够处理写请求,所以如果下线的是主服务器,那么整个系统将只能处理读请求而无法处理写请求,导致系统停机。
从服务器下线示例

在这里插入图片描述
从服务器 B 下线,导致客户端 C 的访 问失败,但只要客户端 C 改为访问其他在线的服务器,就可以解决这个问 题。

主服务器下线示例

在这里插入图片描述
主服务器下线导致主从服务器的连接中断,并使得整个系 统无法再执行写命令。

这时从服务器还是可以继续处理读请求的,但是从服务器的数据会因为主服务器下线而没办法再得到更新。

让系统重新上线的方法(1/3)

为了让系统能够回到正常上线状态(也即是,让系统中的服务器既能够处理读请求,又能够处理写请求),用户需要向系统中的某一个从服务器发送 SLAVEOF no one 命令,让它变为新的主服务器,并向其他从服务器发送 SLAVEOF 命令,让它们去复制新的从服务器。
在这里插入图片描述

让系统重新上线的方法(2/3)

在这里插入图片描述

让系统重新上线的方法(3/3)

在这里插入图片描述
现在系统有了新的主服务器,以及一个从服务器,客户端可以继续使 用这个系统来处理读请求和写请求了。

因为有一台服务器下线了的缘故,所以重新上线的系统在性能方面可能比不上原有的系统,但这种恢复操作可以避免整个系 统停机。(如果不想系统恢复之后的性能被影响,可以添加 额外的从服务器,用作冗余服务器。)

虽然上面介绍的方法可以让系统重新上线,但手动来执行这些操作实在太麻烦了,为此,Redis 提供了 Sentinel 程序,用户可以使用
Sentinel 来自动检测主从服务器的状态,并在主服务器下线时,自动 执行故障转移操作(failover),让系统重新上线。

发布了252 篇原创文章 · 获赞 151 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104283099