>  기사  >  데이터 베이스  >  Redis 클러스터에서 데이터가 손실되나요?

Redis 클러스터에서 데이터가 손실되나요?

藏色散人
藏色散人앞으로
2021-09-21 17:09:172107검색

Redis 클러스터는 강력한 일관성을 보장하지 않습니다. 일부 특수한 시나리오에서는 클라이언트가 쓰기 확인을 받더라도 여전히 데이터가 손실될 수 있습니다.

시나리오 1: 비동기 복제

Redis 클러스터에서 데이터가 손실되나요?

  • 클라이언트가 마스터 B에 쓰기
  • 마스터 B가 OK라고 응답함
  • 마스터 B가 슬레이브 B1 B2 B3

B와 동기화 B1 B2 B3의 확인을 기다리지 않고 클라이언트에 응답 슬레이브 동기화가 완료되기 전에 마스터가 다운되면 슬레이브 중 하나가 마스터로 선택되고 클라이언트가 이전에 작성한 데이터는 손실됩니다.

wait 명령은 이 시나리오에서 데이터 보안을 강화할 수 있습니다. wait 命令可以增强这种场景的数据安全性。

wait 会阻塞当前 client 直到之前的写操作被指定数量的 slave 同步成功。

wait 可以提高数据的安全性,但并不保证强一致性。

因为即使使用了这种同步复制方式,也存在特殊情况:一个没有完成同步的 slave 被选举为了 master。

场景2:网络分区

6个节点 A, B, C, A1, B1, C1,3个master,3个slave,还有一个client,Z1

Redis 클러스터에서 데이터가 손실되나요?

发生网络分区之后,形成了2个区,A, C, A1, B1, C1B Z1

Redis 클러스터에서 데이터가 손실되나요?

这时 Z1 还是可以向 B 写入的,如果短时间内分区就恢复了,那就没问题,整个集群继续正常工作,但如果时间一长,B1 就会成为所在分区的 master,Z1 写入 B 的数据就丢了。

maximum window(最大时间窗口) 可以减少数据损失,可以控制 Z1 向 B 写入的总数:

过去一定时间后,分区的多数边就会进行选举,slave 成为 master,这时分区少数边的 master 就会拒绝接收写请求。

这个时间量是非常重要的,称为节点过期时间

一个 master 在达到过期时间后,就被认为是故障的,进入 error 状态,停止接收写请求,可以被 slave 取代。

小结

Redis Cluster 不保证强一致性,存在丢失数据的场景:

  • 异步复制

在 master 写成功,但 slave 同步完成之前,master 宕机了,slave 变为 master,数据丢失。

wait

wait는 이전 쓰기 작업이 지정된 슬레이브 수에 의해 성공적으로 동기화될 때까지 현재 클라이언트를 차단합니다.
  • wait는 데이터 보안을 향상할 수 있지만 강력한 일관성을 보장하지는 않습니다.
이 동기 복제 방법을 사용하더라도 특별한 상황이 있습니다. 동기화가 완료되지 않은 슬레이브가 마스터로 선출됩니다.

시나리오 2: 네트워크 파티션

6개 노드 A, B, C, A1, B1, C1, 3개의 마스터, 3개의 슬레이브 및 1개의 클라이언트, Z1 code> .

Redis 클러스터에서 데이터가 손실되나요?네트워크 분할 후 2개의 영역이 형성되었습니다. A , C, A1, B1, C1 및 B Z1.

🎜Redis 클러스터에서 데이터가 손실되나요?🎜🎜🎜현재 Z1은 여전히 ​​질문할 수 있습니다. B 서면, 단기간 내인 경우 파티션이 복원되면 문제가 없습니다. 전체 클러스터는 계속 정상적으로 작동합니다. 그러나 시간이 지나면 B1이 해당 파티션의 마스터가 되고 Z1이 쓴 데이터는 다음과 같습니다. B는 길을 잃을 것이다. 🎜🎜최대 창(최대 시간 창)은 데이터 손실을 줄이고 Z1에서 B로의 총 쓰기 수를 제어할 수 있습니다. 🎜
일정 기간이 지나면 대부분의 파티션이 선출, 슬레이브가 마스터가 됩니다. 이때 파티션의 소수 측 마스터는 쓰기 요청 수신을 거부합니다.
🎜이 🎜시간🎜은 매우 중요하며 이를 🎜노드 만료 시간🎜이라고 합니다. 🎜🎜마스터가 만료 시간에 도달하면 결함이 있는 것으로 간주되어 오류 상태가 되고 쓰기 요청 수신이 중지되며 슬레이브로 교체될 수 있습니다. 🎜🎜요약🎜🎜Redis 클러스터는 강력한 일관성을 보장하지 않으며 데이터 손실 시나리오가 있습니다. 🎜🎜🎜비동기 복제🎜🎜🎜마스터가 성공적으로 기록되었지만 슬레이브 동기화가 완료되기 전에 마스터가 다운되고, 슬레이브가 마스터가 되고 데이터가 손실됩니다. 🎜🎜wait 명령은 동기 복제에 사용할 수 있지만 데이터가 손실되지 않는다는 것을 완전히 보장할 수 없으며 성능에 영향을 미칩니다. 🎜🎜🎜네트워크 파티션🎜🎜🎜파티션 후에도 마스터는 계속해서 쓰기 요청을 받습니다. 파티션 복구 후에도 마스터는 슬레이브가 될 수 있으며 이전에 작성된 데이터는 손실됩니다. 🎜🎜파티셔닝 중에 마스터가 수신하는 쓰기 수를 줄이고 데이터 손실 비용을 줄이기 위해 노드 만료 시간을 설정할 수 있습니다. 🎜🎜🎜🎜추천 학습: "🎜redis 튜토리얼🎜"🎜🎜🎜

위 내용은 Redis 클러스터에서 데이터가 손실되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제