10 Ağustos 2017 Perşembe

Elasticsearch "Unassigned Shard" Çözümü


Elasticsearch, son dönemde çok fazla popüler olmayan başlayan "Lucene" tabanlı full text search özelliği sağlayan bir veri tabanı sistemi. Büyük boyutlarda, çok sayıda json formatındaki verilerinizi buraya atıp, içeriklerinizi kolaylıkla indexleyip çok çeşitli uygulamalar geliştirebilirsiniz.

Son dönemde yaptığı atılımlara Elasticsearch adı altında bir çok özelliği barındıran başarılı bir veri tabanı sistemine evrilmiş durumda. Sağladığı başarılı REST API ile yönetimi ve monitor edilmesi oldukça kolay. Uygulamanıza text tabanlı arama özelliği katmak, büyük doküman verileri indexlemek istiyorsanız Apache Solr ile birlikte harika bir çözüm, hem de bedava indirerek hemence kullanabilirsiniz.

Kısa bir özetten sonra karşılaştığım bir soruna bulduğumuz basit ama etkili bir çözümü anlatalım. Elastic'de verileri "index" dediğimiz bloklar halinde tutar. Data kaybını ve sorgulamalarda hızını artırmak adına bu verimizi "replica" dediğimiz farklı sunucularda tutar. Biz de verimizi varsayılan olarak 2 kopya olarak tutuyoruz. Bazı indexlerimiz "unassigned shard" uyarı mesajı ile cluster'ımızı uyarı durumuna düşürdü. Bunun çözümü için farklı çözümler internette var. Benim işimi çözemese de onları inceleyebilirsiniz.

Benim bulduğum çözüm oldukça basit ve gayet güzel çalıştı :)

Öncelikle aşağıdaki kod ile sorunlu indexin replika sayısını yeniden set ederek yeni bir shard allocation başlattım. Bu işlem yeni uygun bir node üzerinde bu index'in yeni bir kopyasının oluşturulması demek.

PUT [index adı]/_settings
{
  "settings" : {"number_of_replicas": 2}
}

Daha sonra kopyalama işlemi bittiğinde "unassigned" olarak kalan shard'ın cluster'da uyarı olarak kalmasını önlemek için replika sayısnı 1 azaltarak her şeyi YEŞİL yaptım :) Bu işlem ile sorunlu görülen "unassigned" shard Elastic tarafından silindi. Benim sorunumu çözdü belki sizin de işinize yarar.

PUT [index adı]/_settings
{
  "settings" : {"number_of_replicas": 1}
}

Hiç yorum yok:

Yorum Gönder