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_period
、row_cache_save_period
、counter_cache_save_period
の3つのパラメータで、これらは新しい値形式で1回だけ表示されます。古い名前と値形式は、少なくとも次のメジャーリリースまでは使用できます。起動時に非推奨警告が出力されます。パラメータが期間、データレート、またはデータストレージの型である場合、新しい名前を使用する際には、その値に単位を付ける必要があります。 -
新しい設定パラメータを追加する際には、
名詞_動詞
の新しい形式に従ってください。 -
Cassandraでサポートされている最小単位で新しいパラメータを追加することを検討してください。新しい型は、必要に応じてlong型とinteger型のの上限もサポートしています。設定パラメータの型のすべてのオプションは、3つの主要な抽象クラス(
DurationSpec
、DataStorageSpec
、DataRateSpec
)にネストされたクラスです。 -
何らかの理由で、新しいパラメータの最小単位がCassandraでサポートされている単位ではないと考える場合は、
DurationSpec
、DataStorageSpec
内の他のネストされたクラスを使用できます。最小許容単位は、プロパティに対して内部的に使用している単位であるため、より大きな単位への変換を行う必要がなくなり、精度に関する問題が発生しません。これは、DurationSpec
とDataStorageSpec
でのみ問題となります。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_period
、row_cache_save_period
、counter_cache_save_period
は、-Dcassandra.allow_duplicate_config_keys
のみに影響を受けることに注意してください。