Cassandra ドキュメント

バージョン

プレリリースバージョンのドキュメントを表示しています。

cassandra.yaml パラメータ名の単位からの分離

目的

CASSANDRA-15234の一部として、3つの大きな変更が行われました。

1) cassandra.yamlのパラメータ名をnoun_verb形式に変更。

2) cassandra.yamlのパラメータを単位(DataStorage、DataRate、Duration)から分離し、パラメータごとに一時的な最小許容単位を導入(DataStorage と Duration のみ)。

3) 次のメジャーリリースまで、古い名前と単位サポートの不足をサポートするための後方互換性フレームワーク。

名前が変更されたパラメータ

コミュニティは、オペレータが期間、データストレージ、データレートのタイプのCassandraパラメータの単位を指定できるようにすることを決定しました。特定の単位(ほとんどの場合、名前のサフィックスとして追加)を持つすべてのパラメータは、[value][unit] の形式を使用して設定できるようになりました。単位サフィックスは名前から削除されました。サポートされている単位

パラメータの種類 サポートされている単位

期間

d、h、m、s、ms、us、µs、ns

データストレージ

B、KiB、MiB、GiB

データレート

B/s、MiB/s、KiB/s

:

古い名前と値の形式

permissions_update_interval_ms: 0

新しい名前と可能な値の形式

permissions_update_interval: 0ms
permissions_update_interval: 0s
permissions_update_interval: 0d
permissions_update_interval: 0us
permissions_update_interval: 0µs

CASSANDRA-15234での作業は既に非常に大きかったため、期間とデータストレージパラメータについて、パラメータごとに許可される最小単位の概念を導入することにしました。これはどういう意味ですか?Cassandra の内部では、パラメータに対して古い単位が引き続き使用されます。たとえば、内部的に秒が使用されている場合でも、ナノ秒の値をcassandra.yamlに追加しようとすると、次の情報を含む設定例外が発生します。

Accepted units: seconds, minutes, hours, days.

なぜこれが必要だったのですか?精度問題が発生する可能性があるためです。この問題に対する完全な解決策は、Cassandra でサポートされている最小単位を使用して操作するために、内部的にすべてのパラメータの値を変換することです。パラメータの最小単位を評価し、移行する(段階的に、CASSANDRA-15234以降)一連のチケットが今後公開されます。

旧名 新名 サポートされている最小単位

permissions_validity_in_ms

permissions_validity

ms

permissions_update_interval_in_ms

permissions_update_interval

ms

roles_validity_in_ms

roles_validity

ms

roles_update_interval_in_ms

roles_update_interval

ms

credentials_validity_in_ms

credentials_validity

ms

credentials_update_interval_in_ms

credentials_update_interval

ms

max_hint_window_in_ms

max_hint_window

ms

native_transport_idle_timeout_in_ms

native_transport_idle_timeout

ms

request_timeout_in_ms

request_timeout

ms

read_request_timeout_in_ms

read_request_timeout

ms

range_request_timeout_in_ms

range_request_timeout

ms

write_request_timeout_in_ms

write_request_timeout

ms

counter_write_request_timeout_in_ms

counter_write_request_timeout

ms

cas_contention_timeout_in_ms

cas_contention_timeout

ms

truncate_request_timeout_in_ms

truncate_request_timeout

ms

streaming_keep_alive_period_in_secs

streaming_keep_alive_period

s

cross_node_timeout

internode_timeout

-

slow_query_log_timeout_in_ms

slow_query_log_timeout

ms

memtable_heap_space_in_mb

memtable_heap_space

MiB

memtable_offheap_space_in_mb

memtable_offheap_space

MiB

repair_session_space_in_mb

repair_session_space

MiB

internode_max_message_size_in_bytes

internode_max_message_size

B

internode_send_buff_size_in_bytes

internode_socket_send_buffer_size

B

internode_socket_send_buffer_size_in_bytes

internode_socket_send_buffer_size

B

internode_socket_receive_buffer_size_in_bytes

internode_socket_receive_buffer_size

B

internode_recv_buff_size_in_bytes

internode_socket_receive_buffer_size

B

internode_application_send_queue_capacity_in_bytes

internode_application_send_queue_capacity

B

internode_application_send_queue_reserve_endpoint_capacity_in_bytes

internode_application_send_queue_reserve_endpoint_capacity

B

internode_application_send_queue_reserve_global_capacity_in_bytes

internode_application_send_queue_reserve_global_capacity

B

internode_application_receive_queue_capacity_in_bytes

internode_application_receive_queue_capacity

B

internode_application_receive_queue_reserve_endpoint_capacity_in_bytes

internode_application_receive_queue_reserve_endpoint_capacity

B

internode_application_receive_queue_reserve_global_capacity_in_bytes

internode_application_receive_queue_reserve_global_capacity

B

internode_tcp_connect_timeout_in_ms

internode_tcp_connect_timeout

ms

internode_tcp_user_timeout_in_ms

internode_tcp_user_timeout

ms

internode_streaming_tcp_user_timeout_in_ms

internode_streaming_tcp_user_timeout

ms

native_transport_max_frame_size_in_mb

native_transport_max_frame_size

MiB

max_value_size_in_mb

max_value_size

MiB

column_index_size_in_kb

column_index_size

KiB

column_index_cache_size_in_kb

column_index_cache_size

KiB

batch_size_warn_threshold_in_kb

batch_size_warn_threshold

KiB

batch_size_fail_threshold_in_kb

batch_size_fail_threshold

KiB

compaction_throughput_mb_per_sec

compaction_throughput

MiB/s

compaction_large_partition_warning_threshold_mb

compaction_large_partition_warning_threshold

MiB

min_free_space_per_drive_in_mb

min_free_space_per_drive

MiB

stream_throughput_outbound_megabits_per_sec

stream_throughput_outbound

MiB/s

inter_dc_stream_throughput_outbound_megabits_per_sec

inter_dc_stream_throughput_outbound

MiB/s

commitlog_total_space_in_mb

commitlog_total_space

MiB

commitlog_sync_group_window_in_ms

commitlog_sync_group_window

ms

commitlog_sync_period_in_ms

commitlog_sync_period

ms

commitlog_segment_size_in_mb

commitlog_segment_size

MiB

periodic_commitlog_sync_lag_block_in_ms

periodic_commitlog_sync_lag_block

ms

max_mutation_size_in_kb

max_mutation_size

KiB

cdc_total_space_in_mb

cdc_total_space

MiB

cdc_free_space_check_interval_ms

cdc_free_space_check_interval

ms

dynamic_snitch_update_interval_in_ms

dynamic_snitch_update_interval

ms

dynamic_snitch_reset_interval_in_ms

dynamic_snitch_reset_interval

ms

hinted_handoff_throttle_in_kb

hinted_handoff_throttle

KiB

batchlog_replay_throttle_in_kb

batchlog_replay_throttle

KiB

hints_flush_period_in_ms

hints_flush_period

ms

max_hints_file_size_in_mb

max_hints_file_size

MiB

trickle_fsync_interval_in_kb

trickle_fsync_interval

KiB

sstable_preemptive_open_interval_in_mb

sstable_preemptive_open_interval

MiB

key_cache_size_in_mb

key_cache_size

MiB

row_cache_size_in_mb

row_cache_size

MiB

counter_cache_size_in_mb

counter_cache_size

MiB

networking_cache_size_in_mb

networking_cache_size

MiB

file_cache_size_in_mb

file_cache_size

MiB

index_summary_capacity_in_mb

index_summary_capacity

MiB

index_summary_resize_interval_in_minutes

index_summary_resize_interval

m

gc_log_threshold_in_ms

gc_log_threshold

ms

gc_warn_threshold_in_ms

gc_warn_threshold

ms

tracetype_query_ttl

trace_type_query_ttl

s

tracetype_repair_ttl

trace_type_repair_ttl

s

prepared_statements_cache_size_mb

prepared_statements_cache_size

MiB

enable_user_defined_functions

user_defined_functions_enabled

-

enable_scripted_user_defined_functions

scripted_user_defined_functions_enabled

-

enable_materialized_views

materialized_views_enabled

-

enable_transient_replication

transient_replication_enabled

-

enable_sasi_indexes

sasi_indexes_enabled

-

enable_drop_compact_storage

drop_compact_storage_enabled

-

enable_user_defined_functions_threads

user_defined_functions_threads_enabled

-

enable_legacy_ssl_storage_port

legacy_ssl_storage_port_enabled

-

user_defined_function_fail_timeout

user_defined_functions_fail_timeout

ms

user_defined_function_warn_timeout

user_defined_functions_warn_timeout

ms

cache_load_timeout_seconds

cache_load_timeout

s

別のTODOは、新しいフォーマットをサポートするJMXメソッドを追加することです。ただし、近い将来に仮想テーブルが設定変更をサポートする場合は、これを廃止する可能性があります。

Cassandra 開発者向けの注意事項:

  • パラメータの大部分は、CASSANDRA-15234の一部として、既に新しいフレームワークに移行されています。@Replacesアノテーションは、Configクラスとcassandra.yaml内の設定パラメータを変更し、以前のCassandraバージョンとの下位互換性を追加する場合に使用します。Convertersクラスは、下位互換性のために使用される様々なメソッドを列挙しています。IDENTITYは名前変更のみに使用されるものです。他のConvertersに関する詳細については、クラスのJavaDocを参照してください。下位互換性のために、仮想テーブルSettingsには、古いパラメータと新しいパラメータが、それぞれ古い値形式と新しい値形式で含まれています。現時点での唯一の例外は、key_cache_save_periodrow_cache_save_periodcounter_cache_save_periodの3つのパラメータで、これらは新しい値形式で1回だけ表示されます。古い名前と値形式は、少なくとも次のメジャーリリースまでは使用できます。起動時に非推奨警告が出力されます。パラメータが期間、データレート、またはデータストレージの型である場合、新しい名前を使用する際には、その値に単位を付ける必要があります。

  • 新しい設定パラメータを追加する際には、名詞_動詞の新しい形式に従ってください。

  • Cassandraでサポートされている最小単位で新しいパラメータを追加することを検討してください。新しい型は、必要に応じてlong型とinteger型のの上限もサポートしています。設定パラメータの型のすべてのオプションは、3つの主要な抽象クラス(DurationSpecDataStorageSpecDataRateSpec)にネストされたクラスです。

  • 何らかの理由で、新しいパラメータの最小単位がCassandraでサポートされている単位ではないと考える場合は、DurationSpecDataStorageSpec内の他のネストされたクラスを使用できます。最小許容単位は、プロパティに対して内部的に使用している単位であるため、より大きな単位への変換を行う必要がなくなり、精度に関する問題が発生しません。これは、DurationSpecDataStorageSpecでのみ問題となります。DataRateSpecは内部的にdouble型で処理されます。

  • 新しいパラメータは、非負の数値として追加する必要があります。過去に無効化するために-1を設定していたパラメータについては、個別のフラグパラメータまたはnull値を検討することをお勧めします。null値を使用する場合は、それを処理するためにDatabaseDescriptorに導入されたデフォルト値が、関連するすべてのsetterにも複製されていることを確認してください。

  • データストレージ、期間、データレートの型のパラメータは、Long.MAX_VALUE(以前のlong型パラメータ)とInteger.MAX_VALUE(以前のint型パラメータ)に設定できません。これらの数値は、単位間の変換中にオーバーフローが発生するのを防ぐために使用されます。

  • 名前変更で@Replacesを追加するたびに、SnakeYAMLと同じ下位互換性をサポートするために、このCCMのPython辞書にエントリを追加する必要があります。

変更をコミットした後のCCMの再タグ付け方法については、DTestリポジトリのrequirements.txtの指示に従ってください。公式のCCMを再タグ付けした後、予期せぬ事態が発生しないように、リポジトリでのタグ付けもテストすることをお勧めします。CCMはいくつかのテストスイートに影響を与えるため、変更後には必ず完全なCIを実行してください。

  • 一部の設定パラメータはcassandra.yamlでは発表されていませんが、上級ユーザー向けにConfigクラスで提供されています。これらも新しいフレームワークと命名規則を使用する必要があります。

  • 下位互換性があるため、新しい形式で設定を行うためにすべてのPython DTestを書き直す必要はなく、テスト中に下位互換性を検証しています。ただし、新しい名前と値形式を使用した新しいテストを追加することを検討してください。

  • 現時点では、JVM内アップグレードテストはバージョンごとの設定をサポートしていないため、古い名前と値形式を維持する必要があります。現在、新しいバージョンの新しい設定を使用しようとすると、サイレントに無視され、デフォルト設定が使用されます。

  • SnakeYAMLはパラメータのオーバーロードをサポートしています。つまり、cassandra.yamlに設定パラメータを複数回追加した場合、Cassandraの起動時にConfigにロードされるのは最後の設定となります。アップグレードによる中断を最小限に抑えるために、パラメータの古い名前と新しい名前をcassandra.yamlに追加することによっても、この動作を引き続きサポートしています。

  • JMXのsetter/getterは、ローカルコピーではなく、Configクラスのプロパティを更新するようにしてください。Settings仮想テーブルは、いつでもConfigクラスからロードされた設定を報告します。

:

cassandra.yamlに以下を追加した場合

hinted_handoff_enabled: true
enabled_hinted_handolff: false

Configにロードされます。

hinted_handoff_enabled: false

CASSANDRA-17379は、ユーザーエクスペリエンスを改善し、オーバーロードを非推奨とするために作成されました。デフォルトでは、同じパラメータに対して古い設定キーと新しい設定キーの両方が含まれる設定でCassandraの起動を拒否します。上書きするには、-Dcassandra.allow_new_old_config_keys=trueでCassandraを起動します。歴史的な理由から、cassandra.yaml内の重複する設定キーはデフォルトで許可されていますが、-Dcassandra.allow_duplicate_config_keys=falseでCassandraを起動してこれを許可しないようにすることができます。key_cache_save_periodrow_cache_save_periodcounter_cache_save_periodは、-Dcassandra.allow_duplicate_config_keysのみに影響を受けることに注意してください。