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