3.2. ZooKeeper クラスターの設定

多くの実稼働環境では、複製された ZooKeeper インスタンスのクラスターをデプロイすることが推奨されます。信頼性の高い ZooKeeper サービスでは、ZooKeeper クラスターの安定性および高可用性が重要になります。ZooKeeper クラスターは ensembles とも呼ばれ ます

ZooKeeper クラスターは、通常最適なノード数で構成されます。ZooKeeper では、クラスター内のノードの大半が稼働している必要があります。以下に例を示します。

  • 3 つのノードで構成されるクラスターでは、最低でも 2 つのノードが稼働している必要があります。つまり、1 つのノードが停止していることを意味します。
  • クラスターでは、5 つのノードで構成されるクラスターでは、3 つ以上のノードが利用可能でなければなりません。これは、2 つのノードが停止していることを意味します。
  • 7 つのノードで構成されるクラスターでは、4 つ以上のノードが利用可能である必要があります。つまり、ダウンしている 3 つのノードを許容できることを意味します。

ZooKeeper クラスターでより多くのノードがあると、クラスター全体の回復性および信頼性が向上します。

ZooKeeper は、偶数のノードを使用してクラスターで実行することができます。ただし、追加のノードはクラスターの回復性を増やしません。4 つのノードで構成されるクラスターでは、少なくとも 3 つのノードが利用可能必要があり、1 つのノードのみを許容できます。そのため、3 つのノードのみを持つクラスターと同じ回復性があります。

理想的には、異なる ZooKeeper ノードは、異なるデータセンターまたはネットワークセグメントに配置する必要があります。ZooKeeper ノードの数を増やすと、クラスター同期で費やされたワークロードが増加します。ほとんどの Kafka ユースケースでは、3、5、または 7 のノードで構成される ZooKeeper クラスターで十分です。

警告

3 つのノードで構成される ZooKeeper クラスターは、1 つの利用できないノードのみを許容できます。つまり、ZooKeeper クラスターの別のノードでメンテナンスを実施している間にクラスターノードがクラッシュすると、ZooKeeper クラスターが利用できないことになります。

複製された ZooKeeper 設定は、スタンドアロン設定でサポートされるすべての設定オプションをサポートします。クラスタリング設定の追加オプションが追加されます。

initLimit
フォロワーがクラスターリーダーに接続および同期できるようにする時間。この時間は多数のティックとして指定されます(詳細は、timeTick オプション を使用します)。
syncLimit
フォロワーがリーダーの背後にある時間。この時間は多数のティックとして指定されます(詳細は、timeTick オプション を使用します)。
reconfigEnabled
動的再設定 を有効または無効にします。サーバーを ZooKeeper クラスターに追加または削除するには、有効にする必要があります。
standaloneEnabled
1 台のサーバーでのみ ZooKeeper を実行するスタンドアロンモードを有効または無効にします。

上記のオプションに加え、すべての設定ファイルに ZooKeeper クラスターのメンバーである必要があるサーバーのリストが含まれている必要があります。サーバーレコードは server.id=hostname:port1:port2 の形式で指定する必要があります。

id
ZooKeeper クラスターノードの ID。
hostname
ノードが接続をリッスンするホスト名または IP アドレス。
port1
イントラクラスター通信に使用されるポート番号。
port2
リーダーの選択に使用するポート番号。

以下は、3 つのノードで構成される ZooKeeper クラスターの設定ファイルの例になります。

timeTick=2000
dataDir=/var/lib/zookeeper/
initLimit=5
syncLimit=2
reconfigEnabled=true
standaloneEnabled=false

server.1=172.17.0.1:2888:3888:participant;172.17.0.1:2181
server.2=172.17.0.2:2888:3888:participant;172.17.0.2:2181
server.3=172.17.0.3:2888:3888:participant;172.17.0.3:2181
注記

ZooKeeper 3.5.7 では、使用する前に 4 文字の単語 コマンドを許可リストに追加する必要があります。詳細は、ZooKeeper ドキュメント を参照してください。

myid files

ZooKeeper クラスターの各ノードには一意の ID を割り当てる必要があります。各ノードの IDmyid ファイルで設定して、/var/lib/zookeeper/ などの dataDir フォルダーに保存する必要があります。myid ファイルには、ID がテキストとして書き込まれた 1 行のみ含まれている必要があります。ID には、1 から 255 までの任意の整数を使用できます。このファイルは、各クラスターノードに手動で作成する必要があります。このファイルを使用して、各 ZooKeeper インスタンスは設定ファイルの対応する server. 行の設定を使用してそのリスナーを設定します。また、その他すべての server. 行を使用して、他のクラスターメンバーも特定します。

上記の例では、3 つのノードがあるため、それぞれに 12、および 3 の値がそれぞれ異なる myid があります。