7

"Guide to Scaling Web Databases with MySQL Cluster"によると、MySQL Cluster 7.3 は、同期更新レプリケーションを使用しながら 99,999% の可用性を達成できます。これは、分散システムでは完全な可用性 (99,999% と見なすことができますよね?) と一貫性は達成できないと述べているCAP 定理に対するアンチテーゼです。

レプリカを担当するデータノードに到達できない場合、クラスターは更新に対してどのように反応しますか? 同期更新レプリケーションの場合、ブロックする必要があり、可用性に影響します。

ガイドには次のように記載されています。

  • データ ノード内のデータは、ノード グループ内のすべてのノードに同期的に複製されます。データ ノードに障害が発生した場合、同じ情報を格納している他のデータ ノードが少なくとも 1 つ存在します。
  • データ ノードに障害が発生した場合、MySQL サーバーまたはアプリケーション ノードは、ノード グループ内の他のデータ ノードを使用してトランザクションを実行できます。アプリケーションはトランザクションを再試行するだけで、残りのデータ ノードは要求を正常に満たします。

しかし、ノード グループが 2 つのノードで構成され、1 つのノードがクラッシュした場合 (例はこちら)、これはどのように機能するのでしょうか? 私が理解している限り、同期更新レプリケーションを使用しているときに更新を失敗させるものに更新をレプリケートするノードはありませんか?! レプリカを書き込むノードが存在しない間、レプリケーションは一時停止されていますか?

4

2 に答える 2

0

あなたの質問例では、問題にはpartitionが含まれていません。分割とは、データの半分が一方のノードに残り、残りの半分が他方のノードに残ることを意味します (50% の半分である必要はありませんが、データを複数のノードに分割する必要があります)。


また、質問の例では、ノードの1つがクラッシュしても、もう1つはまだ機能しています。したがって、可用性があります。また、ノードの 1 つが他のノードのレプリカであるため、一貫性に問題はありません。

更新が失敗したからといって、データに一貫性がないわけではありません。クラスターからデータにアクセスしようとすると、デッド ノードから一貫性のないデータを取得できないため、一貫性のあるデータが得られます。

つまり、クラスターに対してクエリを実行し、再試行されたデータに一貫性がない場合にのみ、データに一貫性がなくなります。

于 2013-07-03T11:51:04.847 に答える