Ansible Playbooks for Confluent Platform の構成¶
このトピックでは、Ansible Playbooks for Confluent Platform の一般的な構成方法について説明します。
Ansible ホスト変数の設定¶
インベントリファイルでホストを構成し、接続を確認したら、必要な Confluent Platform 構成を記述する変数をインベントリに設定します。
Review the commented out variables with the example inventory,
hosts_example.yml
, at the root of the cp-ansible source code. For a full list of
supported variables, see Ansible variable file.
各変数は、すべてのホストに適用することも、特定のホストに適用することもできます。
次の例では、すべてのホストに変数 ssl_enabled=true
を設定します。
all:
vars:
ssl_enabled: true
次の例では、1 つの Kafka ブローカーホストに変数 broker_id
を設定します。
kafka_broker:
hosts:
ip-192-24-10-207.us-west.compute.internal:
broker_id: 0
一般的には、各ホストが Confluent Platform の全般の構成を認識できるように、変数は all
グループで適用することをお勧めします。
インベントリファイルと同じ階層にある group_vars
ディレクトリと host_vars
ディレクトリを使用して変数を渡すこともできます。Ansible のディレクトリのレイアウト を参照してください。
また、重要な変数を上記構成の中のそれぞれの変数ファイル内に保存するとともに、Ansible Vault を使用して変数ファイルを暗号化することをご検討ください。
このドキュメントの以降の部分では、Ansible 変数を使用した Confluent Platform の構成方法について説明します。
Confluent Platform ソフトウェアのインストール方法の設定¶
Ansible Playbooks for Confluent Platform では、Confluent Platform ソフトウェアをホストマシンにインストールするために以下の方法がサポートされています。
- packages.confluent.io でホストされるパッケージを使用したパッケージインストール
- デフォルトではこの方法が使用されます。インターネット経由ですべてのホストが
packages.confluent.io
に接続できる必要があります。この方法では、インベントリ変数は使用されません。 - 独自の RPM または DEB パッケージリポジトリでホストされるパッケージを使用したパッケージインストール
この方法は、インターネットに接続していないホストでも使用できます。Confluent Platform パッケージをダウンロードして、別途用意したリポジトリに配置する必要があります。
この方法を使用するには、インベントリファイルに以下を設定します。
パッケージが RHEL または Centos のホスト上にある場合
all: vars: repository_configuration: custom custom_yum_repofile_filepath: /tmp/my-repo.repo
パッケージが Debian のホスト上にある場合
all: vars: repository_configuration: custom custom_apt_repo_filepath: /tmp/my-source.list
- packages.confluent.io でホストされる tarball を使用した Tar インストール
インターネット経由ですべてのホストが packages.confluent.io に接続できる必要があります。
この方法を使用するには、インベントリファイルに以下を設定します。
all: vars: installation_method: archive
- 独自のウェブサーバーでホストされる tarball を使用した Tar インストール
この場合、インターネットへの接続は必要ありませんが、tarball をダウンロードしてウェブサーバーでホストする必要があります。
この方法を使用するには、インベントリファイルに以下を設定します。
all: vars: installation_method: archive confluent_archive_file_source: http://packages.confluent.io/archive/7.0/confluent-7.0.1.tar.gz
- Ansible コントロールノード上の tarball を使用した Tar インストール
この場合、インターネットへの接続は必要ありませんが、tarball をダウンロードしてコントロールノードにコピーする必要があります。
この方法を使用するには、インベントリファイルに以下を設定します。
all: vars: installation_method: archive confluent_archive_file_source: /path/to/confluent-7.0.1.tar.gz confluent_archive_file_remote: false
カスタムコンポーネントプロパティの設定¶
構成設定が Ansible Playbooks for Confluent Platform によって直接的にサポートされていない場合は、カスタムプロパティ機能を使用して Confluent Platform コンポーネントを構成します。
Before you set a custom property variable, first check the Ansible variable file for an existing variable. If you find an existing variable that directly supports the setting, use the variable in the inventory file instead of using a config override.
以下の辞書を使用して、Ansible インベントリファイル hosts.yml
にカスタムプロパティを構成します。
zookeeper_custom_properties
kafka_broker_custom_properties
schema_registry_custom_properties
kafka_rest_custom_properties
kafka_connect_custom_properties
ksql_custom_properties
control_center_custom_properties
kafka_connect_replicator_custom_properties
kafka_connect_replicator_consumer_custom_properties
kafka_connect_replicator_producer_custom_properties
kafka_connect_replicator_monitoring_interceptor_custom_properties
次の例では、initLimit
プロパティと syncLimit
プロパティが ZooKeeper プロパティファイル に設定され、num.io.threads
プロパティが Kafka プロパティファイル に設定されます。さらに、confluent.controlcenter.ksql.default.advertised.url
プロパティが Confluent Control Center プロパティファイル に設定されます。confluent.controlcenter.ksql.default.advertised.url
プロパティのデフォルト値は、ksqlDB クラスターを特定するために Control Center が使用する名前であることに注意してください。
all:
vars:
zookeeper_custom_properties:
initLimit: 6
syncLimit: 3
kafka_broker_custom_properties:
num.io.threads: 15
control_center_custom_properties:
confluent.controlcenter.ksql.default.advertised.url: http://ksql-external-dns:1234,http://ksql-external-dns:2345
特定ホストのカスタムプロパティの設定¶
特定のホストに個別にプロパティを設定することができます。ホストの直下に一連のコンポーネントプロパティを直接追加します。
次の例では、ホスト ip-192-24-10-207.us-west.compute.internal
に対して、broker.rack
プロパティが us-west-2a
に設定されます。
kafka_broker:
hosts:
ip-192-24-10-207.us-west.compute.internal:
kafka_broker_custom_properties:
broker.rack: us-west-2a
Confluent ライセンスの追加¶
Confluent Platform コンポーネントの Confluent ライセンスキーを追加するには、次のように hosts.yml
ファイル内で各 Confluent Platform コンポーネントのカスタムプロパティを使用します。
all:
vars:
kafka_broker_custom_properties:
confluent.license:
schema_registry_custom_properties:
confluent.license:
kafka_connect_custom_properties:
confluent.license:
control_center_custom_properties:
confluent.license:
kafka_rest_custom_properties:
confluent.license:
ksql_custom_properties:
confluent.license:
コネクターにライセンスを追加するには、hosts.yaml
ファイル内で以下の構成を使用します。
all:
vars:
kafka_connect_connectors:
- name: sample-connector
config:
confluent.license:
次の例では、Kafka および Schema Registry のライセンスキーを追加しています。この例では、ライセンスキー用の変数を作成し、カスタムプロパティでその変数を使用しています。
vars:
confluent_license: asdfkjkadslkfjaslkdf
kafka_broker_custom_properties:
confluent.license: "{{ confluent_license }}"
schema_registry_custom_properties:
confluent.license: "{{ confluent_license }}"
JMX Exporter の有効化¶
デフォルトでは JMX Exporter は無効になっています。有効にすると、インターネット経由で JMX Exporter の jar ファイルがダウンロードされ、すべての Confluent Platform コンポーネントと Confluent Control Center で有効になります。
JMX Exporter は、次のようにして hosts.yml
で有効にします。
all:
vars:
jmxexporter_enabled: true
JMX Exporter のしくみと、JMX データを使用して Prometheus および Grafana で Kafka クラスターをモニタリングする方法の詳細については、「Monitoring Your Event Streams: Integrating Confluent with Prometheus and Grafana」を参照してください。
Jolokia の有効化¶
Ansible Playbooks for Confluent Platform によってインストールされた場合、Confluent Platform コンポーネントの Jolokia モニタリングはデフォルトで無効になっています。
Jolokia は、次のようにして hosts.yml
で有効にします。
all:
vars:
jolokia_enabled: true
Confluent Server または Kafka のデプロイ¶
Confluent Platform では Confluent Server がデフォルトでデプロイされます。代わりに Kafka をインストールするには、hosts.yml
ファイルに次のプロパティを設定します。
all:
vars:
confluent_server_enabled: false
スキーマ検証の構成¶
Confluent Server を実行している場合には、Kafka ブローカーで Schema Validation を構成することができます。hosts.yml
ファイルに以下のプロパティを設定します。
all:
vars:
confluent_server_enabled: true
kafka_broker_schema_validation_enabled: true
ホストへのファイルのコピー¶
Ansible でファイルをホストにコピーするには、Ansible コントロールノードにファイルを配置し、以下の変数を設定します。
all:
vars:
zookeeper_copy_files:
- source_path: /path/to/file.txt
destination_path: /tmp/file.txt
kafka_broker_copy_files:
- source_path: /path/to/file.txt
destination_path: /tmp/file.txt
kafka_rest_copy_files:
- source_path: /path/to/file.txt
destination_path: /tmp/file.txt
kafka_connect_copy_files:
- source_path: /path/to/file.txt
destination_path: /tmp/file.txt
schema_registry_copy_files:
- source_path: /path/to/file.txt
destination_path: /tmp/file.txt
ksql_copy_files:
- source_path: /path/to/file.txt
destination_path: /tmp/file.txt
control_center_copy_files:
- source_path: /path/to/file.txt
destination_path: /tmp/file.txt
各リスト内のファイルが、各グループのすべてのホストにコピーされます。つまり、各ファイルはすべての Kafka ホストに配信されます。
カスタム Java 引数の追加¶
Ansible で各コンポーネントの Java プロセスにカスタムの Java 引数を追加するには、インベントリファイルで以下の変数を使用します。
all:
vars:
zookeeper_custom_java_args:
kafka_broker_custom_java_args:
kafka_rest_custom_java_args:
kafka_connect_custom_java_args:
schema_registry_custom_java_args:
ksql_custom_java_args:
control_center_custom_java_args:
次の例では、引数 -javaagent
を ZooKeeper の Java プロセスに追加します。
all:
vars:
zookeeper_custom_java_args: "-javaagent:/path/to/javaagent.jar"
環境変数の設定¶
Ansible で Confluent Platform コンポーネントのプロセスに環境変数を設定するには、インベントリファイルで以下の辞書型変数を使用します。
all:
vars:
zookeeper_service_environment_overrides:
kafka_broker_service_environment_overrides:
kafka_rest_service_environment_overrides:
kafka_connect_service_environment_overrides:
schema_registry_service_environment_overrides:
ksql_service_environment_overrides:
control_center_service_environment_overrides:
たとえば、以下のスニペットは、KAFKA_JMX_OPTS
環境変数を Kafka ブローカーサービスに設定します。
all:
vars:
kafka_broker_service_environment_overrides:
KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false"
リスナーの構成¶
Ansible Playbooks for Confluent Platform では、ブローカー上に 2 つのリスナーが構成されます。
- ブローカー間リスナー(ポート 9091)
- Confluent Platform の他のコンポーネントと外部クライアントのリスナー(ポート 9092)
これら 2 つのリスナーにはデフォルトで、ssl_enabled
( 暗号化)および sasl_protocol
( 認証)で構成したセキュリティ設定が継承されます。
リスナーが 1 つしか必要ない場合は、hosts.yml
ファイルに次の変数を追加します。
all:
vars:
kafka_broker_configure_multiple_listeners: false
hosts.yml
ファイルに変数 kafka_broker_custom_listeners
を追加すれば、最初から用意されているリスナーをカスタマイズできます。
次の例では、ブローカーリスナー、内部リスナー、およびクライアントリスナーすべてに個別のセキュリティ設定があります。複数のクライアントリスナーを追加で構成できますが、ブローカーリスナーと内部リスナーの辞書キーである broker
と internal
は変更しないでください。
all:
vars:
kafka_broker_custom_listeners:
broker:
name: BROKER
port: 9091
ssl_enabled: false
ssl_mutual_auth_enabled: false
sasl_protocol: none
internal:
name: INTERNAL
port: 9092
ssl_enabled: true
ssl_mutual_auth_enabled: false
sasl_protocol: scram
client_listener:
name: CLIENT
port: 9093
ssl_enabled: true
ssl_mutual_auth_enabled: false
sasl_protocol: plain
アドバタイズリスナーホスト名の追加¶
複数のネットワークインターフェイスを使用する複雑なネットワーク構成を使用している場合は、クライアントが正常に接続できるように、アドバタイズリスナーを外部アドレス(ホストまたは IP)にセットアップする必要があります。
特定のリスナーにアドバタイズリスナーホスト名を構成するには、以下のようにして、アドバタイズリスナーを作成し([1])、各ホストに変数を設定します([2] と [3])。
all:
vars:
kafka_broker_custom_listeners:
client_listener: -------------------------- [1]
name: CLIENT
port: 9093
kafka_broker:
hosts:
ip-172-31-43-14.us-west-2.compute.internal:
kafka_broker_custom_listeners:
client_listener: -------------------------- [1]
hostname: ec2-34-209-19-18.us-west-2.compute.amazonaws.com --- [2]
ip-172-31-43-15.us-west-2.compute.internal:
kafka_broker_custom_listeners: -------------------------- [1]
client_listener:
hostname: ec2-34-209-19-19.us-west-2.compute.amazonaws.com --- [3]
上記の例では、インターフェイス経由で接続するクライアントのアドバタイズリスナー([1])に AWS の外部 DNS ホスト名([2] と [3])を設定しています。
機密性の保持の構成¶
Confluent Platform の シークレット 機能を使用すれば、機密情報を安全に保存し管理できます。
機密性の保持は、Confluent Platform のコンポーネント(Confluent Server、Schema Registry、Connect、ksqlDB、REST Proxy、Confluent Control Center)で動作します。
機密性の保持は ZooKeeper やコミュニティバージョンの Kafka ではサポートされません。
Ansible Playbooks for Confluent Platform でコンポーネントプロパティファイルに対して機密性の保持を使用するには、インベントリファイルに次の変数を設定します。
all:
vars:
secrets_protection_enabled: true
secrets_protection_enabled
を true
に設定すると、マスターキーが Ansible で生成され、すべての Confluent Platform コンポーネントで password
などのすべてのプロパティが暗号化されます。
生成済みの独自のマスターキーとベースシークレットを Ansible で使用するには、以下を追加します。
all: vars: secrets_protection_enabled: true secrets_protection_masterkey: <masterkey> secrets_protection_security_file: <base secret file path>
以下に例を示します。
all: vars: secrets_protection_enabled: true secrets_protection_masterkey: "UWQYODNQVqwbQeFgytYYoMr+FjK9Q6I0F6r16u6Y0EI=" secrets_protection_security_file: "/tmp/security.properties"
マスク対象のプロパティをより細かく制御するには、
<component>_secrets_protection_encrypt_passwords
変数と<component>_secrets_protection_encrypt_properties
変数を使用します。<component>_secrets_protection_encrypt_passwords
がfalse
に設定されるとpassword
などのプロパティがマスクされなくなります。暗号化する変数のリストを
<component>_secrets_protection_encrypt_properties
に設定します。たとえば、Kafka のプロパティである
advertised.listeners
とbroker.id
のみをマスクするには、以下を設定します。all: vars: secrets_protection_enabled: true kafka_broker_secrets_protection_encrypt_passwords: false kafka_broker_secrets_protection_encrypt_properties: [advertised.listeners, broker.id]