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 設定は、スタンドアロン設定でサポートされるすべての設定オプションをサポートします。クラスタリング設定にさらにオプションが追加されます。
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 文字のコマンド を追加する必要があります。詳細は、Zoo Keeper のドキュメント を参照してください。
myid
ファイル
ZooKeeper クラスターの各ノードには、一意の ID
を割り当てる必要があります。各ノードの ID
は myid
ファイルで設定し、/var/lib/zookeeper/
のように dataDir
フォルダーに保存する必要があります。myid
ファイルには、テキストとして ID
が記述された単一行のみが含まれている必要があります。ID
には、1 から 255 までの任意の整数を指定することができます。このファイルは、各クラスターノードに手動で作成する必要があります。このファイルを使用すると、各 ZooKeeper インスタンスは設定ファイルの対応する server.
行の設定を使用して、そのリスナーを設定します。また、他の server.
行すべてを使用して、他のクラスターメンバーを特定します。
上記の例では、3 つのノードがあるので、各ノードは値がそれぞれ 1
、2
、および 3
の異なる myid
を持ちます。