2013-08-28 19:24:34 -04:00
|
|
|
[[index-modules-translog]]
|
|
|
|
== Translog
|
|
|
|
|
2015-05-05 16:01:58 -04:00
|
|
|
Changes to Lucene are only persisted to disk during a Lucene commit,
|
2015-05-05 15:32:41 -04:00
|
|
|
which is a relatively heavy operation and so cannot be performed after every
|
2015-05-05 16:01:58 -04:00
|
|
|
index or delete operation. Changes that happen after one commit and before another
|
|
|
|
will be lost in the event of process exit or HW failure.
|
2015-05-05 15:32:41 -04:00
|
|
|
|
|
|
|
To prevent this data loss, each shard has a _transaction log_ or write ahead
|
2015-05-05 16:01:58 -04:00
|
|
|
log associated with it. Any index or delete operation is written to the
|
|
|
|
translog after being processed by the internal Lucene index.
|
2015-05-05 15:32:41 -04:00
|
|
|
|
|
|
|
In the event of a crash, recent transactions can be replayed from the
|
|
|
|
transaction log when the shard recovers.
|
|
|
|
|
2015-05-05 16:01:58 -04:00
|
|
|
An Elasticsearch flush is the process of performing a Lucene commit and
|
|
|
|
starting a new translog. It is done automatically in the background in order
|
|
|
|
to make sure the transaction log doesn't grow too large, which would make
|
|
|
|
replaying its operations take a considerable amount of time during recovery.
|
|
|
|
It is also exposed through an API, though its rarely needed to be performed
|
|
|
|
manually.
|
|
|
|
|
2015-05-05 15:32:41 -04:00
|
|
|
[float]
|
|
|
|
=== Flush settings
|
|
|
|
|
|
|
|
The following <<indices-update-settings,dynamically updatable>> settings
|
|
|
|
control how often the in-memory buffer is flushed to disk:
|
|
|
|
|
|
|
|
`index.translog.flush_threshold_size`::
|
|
|
|
|
|
|
|
Once the translog hits this size, a flush will happen. Defaults to `512mb`.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-05-05 15:32:41 -04:00
|
|
|
[float]
|
|
|
|
=== Translog settings
|
2014-07-31 08:06:06 -04:00
|
|
|
|
2015-06-30 13:08:31 -04:00
|
|
|
The data in the transaction log is only persisted to disk when the translog is
|
|
|
|
++fsync++ed and committed. In the event of hardware failure, any data written
|
|
|
|
since the previous translog commit will be lost.
|
2015-05-05 15:32:41 -04:00
|
|
|
|
2016-01-27 06:28:38 -05:00
|
|
|
By default, Elasticsearch ++fsync++s and commits the translog every 5 seconds if `index.translog.durability` is set
|
|
|
|
to `async` or if set to `request` (default) at the end of every <<docs-index_,index>>, <<docs-delete,delete>>,
|
2015-07-07 10:08:10 -04:00
|
|
|
<<docs-update,update>>, or <<docs-bulk,bulk>> request. In fact, Elasticsearch
|
2015-06-30 13:08:31 -04:00
|
|
|
will only report success of an index, delete, update, or bulk request to the
|
|
|
|
client after the transaction log has been successfully ++fsync++ed and committed
|
|
|
|
on the primary and on every allocated replica.
|
|
|
|
|
|
|
|
The following <<indices-update-settings,dynamically updatable>> per-index settings
|
2015-05-05 15:32:41 -04:00
|
|
|
control the behaviour of the transaction log:
|
2014-07-31 08:06:06 -04:00
|
|
|
|
2015-03-27 05:18:09 -04:00
|
|
|
`index.translog.sync_interval`::
|
2014-07-31 08:06:06 -04:00
|
|
|
|
2015-06-30 13:08:31 -04:00
|
|
|
How often the translog is ++fsync++ed to disk and committed, regardless of
|
2016-01-27 06:28:38 -05:00
|
|
|
write operations. Defaults to `5s`. Values less than `100ms` are not allowed.
|
2014-07-31 08:06:06 -04:00
|
|
|
|
2015-06-30 13:08:31 -04:00
|
|
|
`index.translog.durability`::
|
|
|
|
+
|
|
|
|
--
|
|
|
|
|
|
|
|
Whether or not to `fsync` and commit the translog after every index, delete,
|
|
|
|
update, or bulk request. This setting accepts the following parameters:
|
2015-05-05 15:32:41 -04:00
|
|
|
|
2015-06-30 13:08:31 -04:00
|
|
|
`request`::
|
2015-05-05 15:32:41 -04:00
|
|
|
|
2015-06-30 13:08:31 -04:00
|
|
|
(default) `fsync` and commit after every request. In the event
|
|
|
|
of hardware failure, all acknowledged writes will already have been
|
2015-10-26 16:43:25 -04:00
|
|
|
committed to disk.
|
2015-06-30 13:08:31 -04:00
|
|
|
|
|
|
|
`async`::
|
|
|
|
|
|
|
|
`fsync` and commit in the background every `sync_interval`. In
|
|
|
|
the event of hardware failure, all acknowledged writes since the last
|
|
|
|
automatic commit will be discarded.
|
2016-08-02 17:43:14 -04:00
|
|
|
--
|
|
|
|
|
|
|
|
[float]
|
|
|
|
[[corrupt-translog-truncation]]
|
|
|
|
=== What to do if the translog becomes corrupted?
|
|
|
|
|
|
|
|
In some cases (a bad drive, user error) the translog can become corrupted. When
|
|
|
|
this corruption is detected by Elasticsearch due to mismatching checksums,
|
|
|
|
Elasticsearch will fail the shard and refuse to allocate that copy of the data
|
|
|
|
to the node, recovering from a replica if available.
|
|
|
|
|
|
|
|
If there is no copy of the data from which Elasticsearch can recover
|
|
|
|
successfully, a user may want to recover the data that is part of the shard at
|
|
|
|
the cost of losing the data that is currently contained in the translog. We
|
|
|
|
provide a command-line tool for this, `elasticsearch-translog`.
|
|
|
|
|
|
|
|
[WARNING]
|
|
|
|
The `elasticsearch-translog` tool should *not* be run while Elasticsearch is
|
|
|
|
running, and you will permanently lose the documents that were contained only in
|
|
|
|
the translog!
|
|
|
|
|
|
|
|
In order to run the `elasticsearch-translog` tool, specify the `truncate`
|
|
|
|
subcommand as well as the directory for the corrupted translog with the `-d`
|
|
|
|
option:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
$ bin/elasticsearch-translog truncate -d /var/lib/elasticsearchdata/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/
|
|
|
|
Checking existing translog files
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
! WARNING: Elasticsearch MUST be stopped before running this tool !
|
|
|
|
! !
|
|
|
|
! WARNING: Documents inside of translog files will be lost !
|
|
|
|
! !
|
|
|
|
! WARNING: The following files will be DELETED! !
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
--> data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/translog-41.ckp
|
|
|
|
--> data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/translog-6.ckp
|
|
|
|
--> data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/translog-37.ckp
|
|
|
|
--> data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/translog-24.ckp
|
|
|
|
--> data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/translog-11.ckp
|
|
|
|
|
|
|
|
Continue and DELETE files? [y/N] y
|
|
|
|
Reading translog UUID information from Lucene commit from shard at [data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/index]
|
|
|
|
Translog Generation: 3
|
|
|
|
Translog UUID : AxqC4rocTC6e0fwsljAh-Q
|
|
|
|
Removing existing translog files
|
|
|
|
Creating new empty checkpoint at [data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/translog.ckp]
|
|
|
|
Creating new empty translog at [data/nodes/0/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/translog-3.tlog]
|
|
|
|
Done.
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
You can also use the `-h` option to get a list of all options and parameters
|
|
|
|
that the `elasticsearch-translog` tool supports.
|