Saya perlu mengganti nama beberapa indeks dalam sebuah cluster (nama mereka harus diubah, saya tidak dapat menggunakan alias ).
Saya melihat bahwa tidak ada cara yang didukung untuk melakukan itu, yang paling dekat yang saya temukan adalah mengganti nama direktori indeks , saya mencoba ini di cluster.
Kluster memiliki 3 mesin A
, B
dan C
pecahannya direplikasi pada masing-masing mesin. Aku menutup elasticsearch pada A
, nama /var/lib/elasticsearch/security/nodes/0/indices/oldindexname
untuk /var/lib/elasticsearch/security/nodes/0/indices/newindexname
dan restart A
.
Status cluster berwarna kuning dan elasticsearch melakukan sihir untuk memulihkan status yang benar. Setelah beberapa waktu saya berakhir dengan
oldindexname
tersedia dan direplikasi sepenuhnya (dipulihkan dariB
danC
saya kira)newindexname
sedang tersedia (saya dapat mencarinya) tetapi plugin head menunjukkan bahwa shard-nya berada dalam status "Belum ditetapkan" dan berwarna abu-abu (tidak direplikasi)
Selama pemulihan security.log
menunjukkan pesan berikut:
[2015-02-20 11:02:33,461][INFO ][gateway.local.state.meta ] [A.example.com] dangled index directory name is [newindexname], state name is [oldindexname], renaming to directory name
Meskipun newindexname
dapat dicari, ini tentu tidak dalam keadaan normal.
Saya memutar kembali ke keadaan sebelumnya dengan menghapus newindexname
. Cluster kembali menjadi hijau tanpa entri "Belum ditetapkan".
Mengingat itu, bagaimana saya bisa mengganti nama oldindexname
menjadi newindexname
dalam sebuah cluster?
Catatan: solusi pamungkas yang ada dalam pikiran saya adalah menggulir-salin oldindex
ke newindex
dan menghapus oldindex
sesudahnya. Ini akan memakan waktu, jadi jika ada solusi yang lebih langsung, itu akan bagus.
sumber
_source: {enabled: false}
?_reindex
gunakan_source
sebagai data dokumen asli.twitter
kenew_twitter
.Untuk mengganti nama indeks Anda, Anda dapat menggunakan modul Elasticsearch Snapshot.
Pertama, Anda harus mengambil snapshot dari indeks Anda. Saat memulihkannya, Anda dapat mengganti nama indeks Anda.
rename_replacement: -Nama indeks baru di mana Anda ingin membuat cadangan data Anda.
sumber
_source
diaktifkan di indeks. Saya telah mengganti nama beberapa indeks multi-TB dengan cara ini tanpa masalah.Karena itu tidak ada metode langsung untuk menyalin atau mengganti nama indeks di ES (saya melakukan pencarian ekstensif untuk proyek saya sendiri)
Namun pilihan yang sangat mudah adalah dengan menggunakan alat migrasi populer [Elastic-Exporter].
http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/
[NB: ini bukan blog saya, baru saja menemukan dan menganggapnya bagus]
Dengan demikian Anda dapat menyalin indeks / tipe dan kemudian menghapus yang lama.
sumber
Jika Anda tidak dapat REINDEX, solusinya adalah dengan menggunakan alias . Dari dokumentasi resmi :
API di elasticsearch menerima nama indeks saat bekerja pada indeks tertentu, dan beberapa indeks jika berlaku. API alias indeks memungkinkan untuk membuat alias indeks dengan nama, dengan semua API secara otomatis mengubah nama alias menjadi nama indeks sebenarnya. Alias juga dapat dipetakan ke lebih dari satu indeks, dan saat menentukannya, alias secara otomatis akan diperluas ke indeks alias. Alias juga dapat dikaitkan dengan filter yang secara otomatis akan diterapkan saat mencari, dan nilai rute. Alias tidak boleh memiliki nama yang sama dengan indeks.
Ketahuilah bahwa solusi ini tidak berfungsi jika Anda menggunakan fitur Lainnya Seperti Ini. https://github.com/elastic/elasticsearch/issues/16560
sumber
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).
Oleh @WoJalias
mengharuskan Anda merencanakan ke depan dan membuat nama indeks aslias an alias
ke indeks asli. Kemudian Anda dapat membuat nama alias baru dan menggunakan kembali nama alias lama untuk sesuatu yang lain. Tetapi Anda kehilangan akses ke old_data jika Anda hanya memiliki real_index, membuat alias, menghapus real_index lama. Alias itu sekarang tidak menunjukkan apa-apa.Cara lain yang berbeda untuk mengganti nama atau mengubah pemetaan untuk indeks adalah dengan mengindeks ulang menggunakan logstash. Berikut adalah contoh konfigurasi logstash 2.1:
sumber
Seperti yang ditunjukkan dalam referensi Elasticsearch untuk modul snapshot ,
sumber
Kalau-kalau ada yang masih membutuhkannya. Cara yang berhasil, tidak resmi, untuk mengganti nama indeks adalah:
Jika Anda mendapatkan kesalahan ini "nama direktori indeks menjuntai", hapus folder indeks di semua node master (bukan node data), dan restart salah satu node data.
sumber