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