locp.cassandra
ansible-role-cassandra
Ansibleロールは、Apache Cassandraをインストールして設定するためのものです。
必要条件
OSファミリーの識別
Ansibleプレイブックは、ansible_os_family
変数を設定するために十分な情報を収集する必要があります。
Pythonモジュール
Debianシステムでcassandra_configure_apache_repo
をTrueに設定する場合、
apt_repository
モジュールが使用されるため、以下の要件が必要です。
- python-apt (python 2)
- python3-apt (python 3)
ロール変数
cassandra_15770_workaround
: (デフォルト: False) CASSANDRA-15770 の影響を受けるDebian 10およびUbuntu 20.04に関するもので、3.0.21、3.11.7、4.0のバージョンで修正されました。現在のテストは3.11.6で実行しているため、これをTrueに設定すると/etc/init.d/cassandra
の修正が適用されます。cassandra_2356_workaround
: (デフォルト: False) CASSANDRA-2356 の影響を受けるCassandraバージョン4.0未満のdebパッケージに関するものです。cassandra_cms_heap_new_size_mb
: Concurrent Mark Sweep (CMS) Collectorを使用する際にHEAP_NEWSIZEを設定するのに適した値(MB)を返すカスタムファクトです。詳しくはTuning Java resources を参照してください。cassandra_memtotal_mb
とcassandra_processor_vcpus
ファクトが設定されている必要があります。cassandra_cms_max_heapsize_mb
: Concurrent Mark Sweep (CMS) Collectorを使用する際にMAX_HEAP_SIZEを設定するのに適した値(MB)を返すカスタムファクトです。詳しくはTuning Java resources を参照してください。cassandra_memtotal_mb
ファクトが設定されている必要があります。cassandra_configuration
(デフォルト: なし): Cassandraの設定です。以下の例のプレイブックを参照してください。cassandra_configuration_directory
(デフォルト: RedHatでは/etc/cassandra/default.conf
、 Debianでは/etc/cassandra
): Cassandra設定のディレクトリです。cassandra_configuration_file
(デフォルト: RedHatでは/etc/cassandra/default.conf/cassandra.yaml
、 Debianでは/etc/cassandra/cassandra.yaml
): Cassandra設定ファイルの場所です。cassandra_configuration_templ
(デフォルト:cassandra.yaml.j2
): Cassandra設定のためのテンプレートファイルの名前です。cassandra_configure_apache_repo
(デフォルト: False): Apache Cassandraリポジトリを設定するかどうか。詳細:
cassandra_repo_apache_release
を参照してください。cassandra_dc
: 定義されている場合、cassandra-rackdc.properties
にDatacenterを設定します。このオプションは非推奨で、将来のリリースで削除されます。
cassandra_regex_replacements
を使用してください。cassandra_directories
: 定義されている場合、パッケージがインストールされた後(したがって、cassandraユーザーが利用可能になった後)にディレクトリを作成しますが、Cassandraが設定される前に行われます。詳細は例のプレイブックを参照してください。cassandra_join_cluster
オプションと一緒に使用された場合、ここで指定されたパスは削除(すべての内容と共に)され、ノードがクラスタに正しく参加できるように再作成されます。cassandra_heap_new_size_mb
: HEAP_NEWSIZEを設定するための適した値(MB)を返すカスタムファクトです。詳しくはTuning Java resources を参照してください。cassandra_memtotal_mb
とcassandra_processor_vcpus
ファクトが設定されている必要があります。cassandra_install_packages
(デフォルト: True): このAnsibleロールがパッケージをインストールしようとするかどうかを示すブール値です。Falseに設定すると、Cassandraの設定だけを行うことができ、インストールは試みられません(例: ソースコードからインストールしている場合)。cassandra_join_cluster
(デフォルト: False): これは実験的な機能であり、注意が必要です!Trueに設定され、ノードのcassandra_node_count
が1である場合、そのノードの設定前に以下のアクションが行われます:- Cassandraが停止します
- Cassandraのデータディレクトリがすべてのデータでクリアされます。
処理が完了したら、ノードが再構成され、クラスタに参加します(クラスタは1つのノードよりも大きい必要があります)。
cassandra_max_heapsize_mb
: MAX_HEAP_SIZEを設定するための適した値(MB)を返すカスタムファクトです。詳しくはTuning Java resources を参照してください。cassandra_memtotal_mb
ファクトが設定されている必要があります。cassandra_memtotal_mb
(デフォルト: 設定されている場合はansible_memtotal_mb
):cassandra_cms_max_heapsize_mb
、cassandra_max_heapsize_mb
、cassandra_cms_heap_new_size_mb
、およびcassandra_heap_new_size_mb
を計算するために使用されます。cassandra_path
この変数はバージョン1.4.0で導入されましたが、文書化されていませんでした。指摘された通り、定義されている場合、変数が設定され、ディレクトリが削除されると再作成されません。この変数は現在、cassandra_directories
に取って代わられました。cassandra_node_count
: クラスタ内のノード数を含むことを試みる読み取り専用変数です。cassandra_join_cluster
がTrue
に設定された場合のみ設定されます。cassandra_package
(デフォルト:cassandra
): Cassandraを提供するためにインストールされるパッケージの名前です。cassandra_processor_vcpus
(デフォルト: 設定されている場合はansible_processor_vcpus
):cassandra_cms_heap_new_size_mb
とcassandra_heap_new_size_mb
を計算するために使用されます。cassandra_rack
: 定義されている場合、cassandra-rackdc.properties
にラックを設定します。このオプションは非推奨で、将来のリリースで削除されます。
cassandra_regex_replacements
を使用してください。cassandra_regex_replacements
(デフォルト: []):cassandra_configuration_directory
に対して相対的なpath
、ファイル内を検索するための正規表現regexp
、およびファイル内の置換内容line
を説明するハッシュのリストです。詳細は例のプレイブックを参照してください。cassandra_repo_apache_release
(デフォルト: なし): リリースシリーズの名前(40x、311x、または30xのいずれか)で、cassandra_configure_apache_repo
がTrueに設定されている場合、これを設定する必要があります。cassandra_service_enabled
(デフォルト: yes): Cassandraサービスを有効にするべきか(yesまたはno)。cassandra_service_restart
(デフォルト: True): Trueに設定された場合、Cassandra設定ファイルまたはデータディレクトリの変更は、変更後にCassandraサービスが更新されることを保証します。このフラグをfalseに設定すると、この動作は無効になり、変更を行うことができますが、サービスを再起動するタイミングはユーザーが制御できます。cassandra_systemd_enabled
(デフォルト: False): Cassandraサービスがsystemdを介して有効にされるべきかどうか。Trueに設定すると、テンプレートcassandra_systemd_template
から作成されたユニットファイルがcassandra_systemd_path
に配置されます。cassandra_systemd_path
(デフォルト:/usr/lib/systemd/system/cassandra.service
): Cassandra用のユニットファイルへのパス。この変数は、cassandra_systemd_enabled
がFalseの場合は無視されます。cassandra_systemd_template
(デフォルト:"systemd/system/cassandra.service.j2"
): Cassandra用のユニットファイルを作成するためのテンプレートのパス。この変数は、cassandra_systemd_enabled
がFalseの場合は無視されます。cassandra_task_delay
(デフォルト: 10): ネットワーク接続に依存するAnsibleタスク(例えば、apt
、apt_key
、apt_repository
、package
、yum
)は高いレイテンシの影響を受ける可能性があるため、これらのタスクは再試行の設定がされています。このパラメータは試行間の待機時間です。cassandra_task_retries
も参照してください。cassandra_task_retries
(デフォルト: 5): ネットワーク接続に依存するAnsibleタスク(例えば、apt
、apt_key
、apt_repository
、package
、yum
)は高いレイテンシの影響を受ける可能性があるため、これらのタスクは再試行の設定がされています。このパラメータは試行回数を示します。cassandra_task_delay
も参照してください。
例のプレイブック
このプレイブックは、非常に基本的なCassandraの設定を行うために十分です:
---
- name: locp.cassandraロールの例のプレイブック
hosts: cassandra
remote_user: root
vars:
cassandra_configuration:
authenticator: PasswordAuthenticator
cluster_name: MyCassandraCluster
commitlog_directory: /data/cassandra/commitlog
commitlog_sync: periodic
commitlog_sync_period_in_ms: 10000
data_file_directories:
- /data/cassandra/data
endpoint_snitch: GossipingPropertyFileSnitch
hints_directory: "/data/cassandra/hints"
listen_address: "{{ ansible_default_ipv4.address }}"
# num_tokensに適した値については、以下を参照してください。
# https://cassandra.apache.org/doc/latest/getting_started/production.html#tokens
num_tokens: 4
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
saved_caches_directory: /data/cassandra/saved_caches
seed_provider:
- class_name: "org.apache.cassandra.locator.SimpleSeedProvider"
parameters:
# これは、Ansibleグループの最初のノードをシードとして設定します。
- seeds: "{{ hostvars[groups['cassandra'][0]]['ansible_default_ipv4'].address }}"
start_native_transport: true
cassandra_configure_apache_repo: true
# Cassandraデータ用の代替ディレクトリ構造を作成します。
# この例では、root所有の/dataというディレクトリと
# rwxr-xr-xの権限があります。以下のサブディレクトリがすべて
# cassandraユーザーによってデフォルトで所有されており、権限は
# rwx------となります。
cassandra_directories:
root:
group: root
mode: "0755"
owner: root
paths:
- /data
data:
paths:
- /data/cassandra
- /data/cassandra/commitlog
- /data/cassandra/data
- /data/cassandra/hints
- /data/cassandra/saved_caches
cassandra_regex_replacements:
- path: cassandra-env.sh
line: 'MAX_HEAP_SIZE="{{ cassandra_max_heapsize_mb }}M"'
regexp: '^#MAX_HEAP_SIZE="4G"'
- path: cassandra-env.sh
line: 'HEAP_NEWSIZE="{{ cassandra_heap_new_size_mb }}M"'
regexp: '^#HEAP_NEWSIZE="800M"'
- path: cassandra-rackdc.properties
line: 'dc=DC1'
regexp: '^dc='
- path: cassandra-rackdc.properties
line: 'rack=RACK1'
regexp: '^rack='
cassandra_repo_apache_release: 40x
roles:
- role: locp.cassandra
テストで使用されるプレイブックについては、testingを参照してください。または、molecule/default/converge.yml とmolecule/combine_cluster/converge.yml を見てください。
ライセンス
著者情報
League of Crafty Programmers Ltd.によって開発されました。
問題を提起するか、貢献を行うには、https://github.com/locp/ansible-role-cassandra/issues に行ってください。