3.2. ZooKeeper クラスターの設定
ほとんどの実稼働環境では、レプリケートされた ZooKeeper インスタンスのクラスターをデプロイすることが推奨されます。安定した高可用性 ZooKeeper クラスターの実行は、信頼できる ZooKeeper サービスにとって重要です。ZooKeeper クラスターは、アンサンブル とも呼ばれます。
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 の構成は、スタンドアロン設定でサポートされるすべての設定オプションをサポートします。クラスタリング設定にさらにオプションが追加されます。
initLimit
-
フォロワーがクラスターリーダーに接続して同期できるようにする時間。時間はティック数として指定されます (詳細は
timeTick
オプション を参照してください)。 syncLimit
-
フォロワーがリーダーの背後にいられる時間。時間はティック数として指定されます (詳細は
timeTick
オプション を参照してください)。 reconfigEnabled
- 動的再設定 を有効または無効にします。サーバーを ZooKeeper クラスターに追加または削除するには、有効にする必要があります。
standaloneEnabled
- ZooKeeper が 1 つだけのサーバーで実行されるスタンドアロンモードを有効または無効にします。
上記のオプションの他に、すべての設定ファイルに 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
ファイル
ZooKeeper クラスターの各ノードには、一意の ID
を割り当てる必要があります。各ノードの ID
は myid
ファイルで設定し、/var/lib/zookeeper/
などの dataDir
フォルダーに保存する必要があります。myid
ファイルには、テキストとして ID
が記述された単一行のみが含まれている必要があります。ID
には、1 から 255 までの任意の整数を指定することができます。このファイルは、各クラスターノードに手動で作成する必要があります。このファイルを使用すると、各 ZooKeeper インスタンスは設定ファイルの対応する server.
行の設定を使用して、そのリスナーを設定します。また、他の server.
行すべてを使用して、他のクラスターメンバーを特定します。
上記の例では、3 つのノードがあるので、各ノードは値がそれぞれ 1
、2
、および 3
の異なる myid
を持ちます。