ZooKeeper FAQ から:
_Reliability:
A single ZooKeeper server (standalone) is essentially a coordinator with
no reliability (a single serving node failure brings down the ZK service).
A 3 server ensemble (you need to jump to 3 and not 2 because ZK works
based on simple majority voting) allows for a single server to fail and
the service will still be available.
So if you want reliability go with at least 3. We typically recommend
having 5 servers in "online" production serving environments. This allows
you to take 1 server out of service (say planned maintenance) and still
be able to sustain an unexpected outage of one of the remaining servers
w/o interruption of the service.
_
3サーバーのアンサンブルでは、1つのサーバーがローテーションから外れ、1つのサーバーで予期しない停止が発生した場合でも、サービスが中断されないようにするサーバーが1つ残っています。では、なぜ5台のサーバーが必要なのでしょうか。それとも、検討されているのはサービスの中断だけではありませんか?
更新:
クォーラムの維持に関係していることを指摘してくれた@sbridgesに感謝します。そして、ZKがクォーラムを定義する方法はceil(N/2)
です。ここで、N
はアンサンブル内のoriginal数です(そして現在利用可能なセットだけではありません)。
現在、GoogleでZKクォーラムを検索すると、HBaseブックでこれが見つかります ZKの章 :
ZooKeeperでは、偶数のピアがサポートされていますが、奇数サイズのアンサンブルが必要とするよりも偶数サイズのアンサンブルが比例してクォーラムを形成するために多くのピアを必要とするため、通常は使用されません。たとえば、4つのピアを持つアンサンブルではクォーラムを形成するために3が必要ですが、5を持つアンサンブルでもクォーラムを形成するには3が必要です。したがって、5のアンサンブルでは2つのピアが失敗してもクォーラムを維持できるため、1つのダウンピアしか許可しない4のアンサンブルよりもフォールトトレラントです。
そして、このエドワードJ.ユンのWikipediaの言い換え blog :
通常、これはそこにいると予想される人々の過半数ですが、多くの組織はより低いまたはより高いクォーラムを持っている可能性があります。
Zookeeperでは、サーバーのクォーラムが稼働している必要があります。クォーラムはceil(N/2)
です。 3サーバーのアンサンブルでは、2つのサーバーがいつでも稼働している必要があります。5サーバーのアンサンブルでは、3つのサーバーがいつでも稼働している必要があります。