面试题答案
一键面试检测网络故障
- 心跳检测:
- Sentinel 通过定期向主从服务器发送 PING 命令来检测连接状态。默认情况下,Sentinel 每 10 秒会对主服务器和从服务器执行一次 INFO 命令,在 INFO 命令执行间隙,每 1 秒会向主从服务器发送 PING 命令。如果在一定时间内(可配置,如
down - after - milliseconds
参数)没有收到回复,就认为服务器主观下线(Subjectively Down,SDOWN)。 - 例如,配置
sentinel down - after - milliseconds mymaster 30000
,表示如果 Sentinel 在 30000 毫秒(30 秒)内没有收到名为mymaster
的主服务器的回复,就将其标记为主观下线。
- Sentinel 通过定期向主从服务器发送 PING 命令来检测连接状态。默认情况下,Sentinel 每 10 秒会对主服务器和从服务器执行一次 INFO 命令,在 INFO 命令执行间隙,每 1 秒会向主从服务器发送 PING 命令。如果在一定时间内(可配置,如
- 多 Sentinel 交互检测:
- 多个 Sentinel 之间会相互通信,交换关于主从服务器的状态信息。当一个 Sentinel 认为某个服务器主观下线后,会询问其他 Sentinel 的意见。如果达到一定数量(可配置,如
sentinel quorum mymaster 2
,表示至少 2 个 Sentinel 都认为mymaster
下线,才会判定为主观下线)的 Sentinel 都认为该服务器下线,那么就会将其标记为客观下线(Objectively Down,ODOWN)。
- 多个 Sentinel 之间会相互通信,交换关于主从服务器的状态信息。当一个 Sentinel 认为某个服务器主观下线后,会询问其他 Sentinel 的意见。如果达到一定数量(可配置,如
故障恢复后确保数据一致性
- 自动故障转移:
- 当主服务器被判定为客观下线后,Sentinel 会从从服务器中选举一个作为新的主服务器。选举过程如下:
- 每个 Sentinel 会向其他 Sentinel 发送
SENTINEL is - master - down - by - addr
命令,表明自己认为某个主服务器已经下线,并请求其他 Sentinel 支持自己进行故障转移。 - Sentinel 会根据从服务器的优先级(可通过
slave - priority
配置,值越低优先级越高)、复制偏移量(复制的进度,偏移量越大表示数据越新)、运行 ID 等因素来选举新的主服务器。例如,优先级为 100 的从服务器优先于优先级为 200 的从服务器被选举为新主。 - 选举出的新主服务器会向其他从服务器发送
SLAVEOF NO ONE
命令,使其成为自己的从服务器,重新建立主从关系。
- 每个 Sentinel 会向其他 Sentinel 发送
- 当主服务器被判定为客观下线后,Sentinel 会从从服务器中选举一个作为新的主服务器。选举过程如下:
- 数据同步:
- 新主服务器选举完成后,其他从服务器会通过
SYNC
或PSYNC
命令与新主服务器进行数据同步。如果从服务器之前已经与主服务器有过同步,并且复制偏移量在主服务器的复制积压缓冲区(可通过repl - backlog - size
配置)内,就会使用PSYNC
进行部分同步,只同步缺失的数据;否则使用SYNC
进行全量同步,从主服务器完整地复制数据。 - 例如,配置
repl - backlog - size 1mb
,表示复制积压缓冲区大小为 1MB,如果从服务器的偏移量与主服务器相差的数据量在这个 1MB 范围内,就可以进行部分同步。
- 新主服务器选举完成后,其他从服务器会通过
- Sentinel 相关配置:
sentinel monitor <master - name> <ip> <port> <quorum>
:用于配置要监控的主服务器,<master - name>
是主服务器的名称,<ip>
和<port>
是主服务器的地址和端口,<quorum>
是判定主服务器客观下线所需的 Sentinel 数量。sentinel down - after - milliseconds <master - name> <milliseconds>
:设置判定服务器主观下线的时间。sentinel failover - timeout <master - name> <milliseconds>
:设置故障转移的超时时间,如果在这个时间内故障转移没有完成,Sentinel 会尝试重新进行故障转移。sentinel parallel - syncs <master - name> <num>
:设置在故障转移后,同时与新主服务器进行同步的从服务器数量,避免过多从服务器同时同步对新主服务器造成过大压力。例如,设置为 1 表示依次进行同步。