TTL 2038年問題による期限切れデータの回復
サポートされている最大TTL日より後のTTLタイムスタンプが原因で削除されたデータを回復します。
5.1.XシリーズのDataStax Enterpriseバージョン5.1.7および5.0.Xシリーズの5.0.12以前では、TTL有効期限のタイムスタンプがストレージエンジンが表すことができる最大日付(2038-01-19T03:14:06+00:00
)より後である場合、INSERTSに対する保護はありませんでした。5.1.7または5.0.12以前では、有効期限タイムスタンプとしてそれより後の日付が挿入された場合、日付計算がオーバーフローしてデータが即時に期限切れになりました。オーバーフローによって期限切れになったレコードは照会できず、コンパクション後に恒久的に削除されます。この問題は、TTL値の期間が最大値630720000秒(20年)に近いような長いINSERTでのみ発生します。有効期限タイムスタンプの最も早い日付オーバーフローは、2018-01-19T03:14:06+00:00
です。時間が経過して、日付2038-01-19T03:14:06+00:00
に近づくにつれて、最大サポートTTLは徐々に減少します。
バックアップされた、または圧縮されていないSSTableからオーバーフローしたタイムスタンプを使用してデータを回復するには、--reinsert-overflowed-ttl
オプションを使用します。
min local deletion time
フィールドの値が負のエントリーを探します。この状態のSSTableのデータはコンパクション中に失われる可能性があるため、直ちにバックアップしてください。cassandra.yaml
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/cassandra/cassandra.yaml |
tarボール・インストール | installation_location/resources/cassandra/conf/cassandra.yaml |
オフラインscrub
オフラインscrubの場合は、バックアップされたSSTableからデータを回復するために、sstablescrub
コマンドに--reinsert-overflowed-ttl
パラメーターを指定します。
DSEバージョン | リンク |
---|---|
DSE 6.7 | sstablescrub --reinsert-overflowed-ttl |
DSE 6.0 | sstablescrub --reinsert-overflowed-ttl |
DSE 5.1.7以降 | sstablescrub --reinsert-overflowed-ttl |
DSE 5.0.12以降 | sstablescrub --reinsert-overflowed-ttl |
DSE 4.8.16 | sstablescrub --reinsert-overflowed-ttl |
オンラインscrub
オンラインscrubの場合は、コンパクションが完了していないテーブルからデータを回復するために、nodetool scrub
コマンドに--reinsert-overflowed-ttl
パラメーターを指定します。
DSEバージョン | リンク |
---|---|
DSE 6.7 | nodetool --reinsert-overflowed-ttl |
DSE 6.0 | nodetool --reinsert-overflowed-ttl |
DSE 5.1.7以降 | nodetool --reinsert-overflowed-ttl |
DSE 5.0.12以降 | nodetool --reinsert-overflowed-ttl |
DSE 4.8.16 | nodetool --reinsert-overflowed-ttl |
手順
-
バックアップされたSSTableからデータを回復するには、オフラインscrubオプションを使用します。
-
コンパクションが完了していないテーブルからデータを回復するには、オンラインscrubオプションを使用します。