آموزش الستیک سرچ (Elastic Search) نصب و اجرا

در این مبحث به آموزش الستیک سرچ (Elastic Search) میپردازیم. ElasticSearch یا (ES) یک موتور جستجو و تحلیل منعطف، قدرتمند، متن باز، توزیع شده­، دسترسی بالا[1] و بلادرنگ می­باشد که هسته شاخص­ گذار آن کتابخانه Lucene می­ باشد.گاهی از موتور جستجو به عنوان یک پایگاه داده مبتنی بر سند نیز یاد می شود.

موتور جستجوی الستیک سرچ (Elastic Search)

الاستیک سرچ یک موتور جستجوی متن با امکانات فراوان از قبیل راحتی استفاده، مقیاس پذیری بالا، فیلترهای متنوع جستجو، تحلیلگرهای اختصاصی و سفارشی برای متون فارسی قبل از ایندکس و ذخیره در دیتابیس، دسته بندی نتایج و امکان گروه بندی و فیلتر ثانویه روی آنها، جستجوی فازی و تقریبی و مانند آنها را دارد. از ابتدا به منظور استفاده در محیط­ های توزیع شده پیاده سازی شده است ،جایی که اتکاپذیری و مقیاس پذیری باید وجود داشته باشد،ES  توانایی حرکت آسان ماوراء جستجوی کاملا متنی ساده را به شما می­دهد و رابط­ه ای اکثر زبان­های برنامه نویسی معروف را ارائه می دهد­،ES  وعده ­های بی­ حد و حصر استفاده از فناوری جستجو را ارائه می­کند. علاوه بر قابلیت ­های مذکور قابلیت ­هایی دیگری نیز قابل ذکر است از قبیل:

  • چندین شاخصی[2] : یک خوشه می­تواند میزبان چند شاخصی که جدا از هم و یا به صورت یک گروه می­باشند،باشد.
  • مبتنی بر سند[3] : ذخیره سازی موجودیت­های پیچیده دنیای واقعی به صورت اسناد JSON انجام می­گیرد. تمام فیلدها به صورت پیش فرض شاخص­گذاری می­شوند و تمام شاخص­ها در یک درخواست می­توانند استفاده شوند.
  • مدیریت مغایرت[4] : یک کنترل کننده نسخه­ به منظور ممانعت از نابودی اطلاعات در زمان تغییرات همزمان
  • رابطRESTful : استفاده از رابط RESTful به گونه­ ای که از JSON بر روی پروتکل HTTP استفاده می­کند.
  • ماندگاری در هر عملیات[5] : برای ES در ابتدا امنیت داده مهم است. تغییرات اسناد در گزارش­های تراکنش­ها در چندین نود در خوشه مورد نظر ثبت می­شود تا امکان از دست رفتن داده به حداقل برسد.
  • عدم استفاده از قالب ثابت[6] : ES به صورت اتوماتیک ساختار داده مورد نظر را از اسناد JSON استخراج کرده و پس از شاخص­گذاری آن را قابل جستجو قرار می­دهد. سپس بعدها با اعمال دانش خاص منظوره داده­ های شما، نحوه شاخص­گذاری داده ­های شما را تعیین می­کند.

الاستیک سرچ یکی از بهترین بانکهای اطلاعاتی سندگرا و همچنین جزء بهترین کتابخانه های جستجوی متن است که بر پایه کتابخانه معروف لوسین بنا شده است و علاوه بر سرعت بسیار بالا در پاسخگویی به انواع پرس و جوهای موردنیاز، توزیع شوندگی راحت در شبکه و سهولت بسیار زیاد در ورود داده، امروزه با افزودن داشبورد مدیریتی کیبانا و امکانات یادگیری ماشین و نیز ماژول هایی مانند LogStash و HeartBeat که به جمع آوری اطلاعات و لاگ ها از سرورهای مختلف می پردازد به یک گزینه بسیار ایده آل برای ذخیره و پردازش و مانیتورینگ داده های در جریان سیستم های عملیاتی معاصر تبدیل شده است. اگر به لیست بانکهای اطلاعاتی برتر دنیا هم در سایت db-engines نگاهی بیندازید، این بانک را جزء ده بانک اطلاعاتی مطرح امروزین خواهید یافت.

بیت، لاگ اسلش، کیابنا، الستیک
بیت، لاگ اسلش، کیابنا، الستیک

موتور شاخص گذار Lucene

این روژه در سال ۱۹۹۹ نوشته شدو در سایت source forge به صورت متن باز ارائه شد و بعدها به بنیاد آپاچی ملحق شد . این نرم افزار یک کتابخانه نرم افزاری بازیابی اطلاعات می باشد . این نرم افزار توسط java نوشته شده است . این نرم افزار به زبان های برنامه نویسی دیگر از جمله دلفی، پرل، C #، C + +، پایتون، روبی و PHP  پورت شده است. این نرم افزار برای هر نرم افزاری که نیاز به شاخص گذاری و جستجوی متن به صورت کامل داشته باشد بسیار مفید خواهد بود . Lucene به صورت گسترده ای مورد قبول واقع شده و در موتور جستجوهای اینترنتی و محلی و جستجوی تک سایت مورد استفاده قرار می گیرد. .

در معماری منطقی هسته Lucene ایده ای نهفته است . این ایده متذکر می شود که یک سند حاوی فیلدهایی از متن هستند . این انعطاف پذیری به API های این نرم افزار اجازه می دهد که مستقل از فرمت فایل باشند . متن از هر فرمت WORD،HTML،Open Document و … می تواند استخراج شده و شاخص گذاری شود . این عمل بر روی تصاویر غیر قابل ممکن است .

Lucene شامل توابع و کتابخانه هایی برای خزش و پارس نمودن فایل های Html نمی باشد ولی پروژه های دیگری این قابلیت ها را به ارائه نموده اند.

آشنایی با مفاهیم و معماری الستیک سرچ (Elastic Search)

همانطور که گفتیم الاستیک سرج یک موتور منبع باز[7] ، جستجوی کامل متن[8] و تجزیه و [9]تحلیل بسیار مقیاس[10] پذیر است. و به شما امکان ذخیره، جستجو و آنالیز حجم عظیمی از داده ها را در زمان اندکی می­دهد. در ادامه چند اصطلاح پرکاربرد در ES را معرفی و شرح می­دهیم که برای شروع کار با این موتور الزامی است :

Near RealTime(nrt)

ES  یک پلتفرم جستجوی نزدیک به زمان واقعی است این بدان معنی است که مدت زمانی که طول می­کشد که یک سند از مرحله ایندکس به مرحله جستجو برسد بسیار ناچیز (Refresh Time)  است.

Cluster

یک کلاستر مجموعه­ ای از یک یا تعداد بیشتری نود (Server) می­باشد که این نود­ها در کنار یکدیگر کل داده­

ها را نگه داری می­کنند و امکان جستجو و ایندکس فدرالی را روی تمام نود­ها فراهم می­کنند. یک کلاستر توسط نام خود شناسایی می­شود و در حالت پیش فرص در ES نام کلاستر ElasticSearch  می­باشد. این نام بسیار مهم است زیرا یک نود تنها با داشتن نام کلاستر مورد نظر میتواند به آن متصل شود و روشن است که روی یک بستر شبکه، نام کلاسترها باید متمایز از دیگری باشد.

Node

هر نود می­تواند یک سیستم جدا باشد که قسمتی از یک کلاستر را تشکیل می­دهد­. نود­ها محل ذخیره داده ها هستند و عملیات Search  و Index بروی آنها انجام می­شود­. نود­ها هم مانند کلاستر توسط نام خود شناسایی می­شوند و در حالت پیش فرض اگر نام نود توسط کاربر تعیین نشود ES از یک نام به صورت تصادفی از بین اسامی افراد و شخصیت­های مشهور به آن نسبت می­دهد و نام هر نود در شناسایی آن ضروری است و در حالت پیشفرض تمام نود­های ایجاد شده به کلاستر پیش فرض ES یعنی ElasticSearch اضافه می­شوند.

معماری الستیک سرچ
معماری الستیک سرچ

Index

هر ایندکس، مجموع ه­ای از اسناد است که دارای ویژگی­های تقریبا مشابه هستند و می­توانیم روی یک کلاستر تنها به تعداد دلخواه ایندکس داشته باشیم و هر ایندکس توسط نام خود شناسایی و تعیین می­شود و برای انجام عملیات ایندکس،­ جستجو، حذف وبروزرسانی دانستن نام ایندکس ضروری است.

یک ایندکس می­تواند حجم عظیمی از داده را ذخیره کند که از محدودیت­های سخت افزاری یک سرور تجاوز می­کند. بطور مثال یک ایندکس شامل یک ملیارد سند، به فضایی در حدود 1TB جهت ذخیره سازی نیاز دارد که ممکن است بیشتر از ظرفیت یک سرور باشد و یا اگر هم امکان ذخیره سازی این حجم از داده را داشته باشد مدت زمان پاسخ به درخواست­های جستجو را به مراتب افزایش و در نتیجه باعث کاهش کارایی کلاستر می­شود. لذا جهت رفع این مشکل ES توانایی تقسیم ایندکس­ها به چندین قسمت را دارد که هر قسمت یا تکه Shard نامیده می­شود و در زمان تعریف ایندکس براحتی می­توان تعداد shard های مورد نیاز را تعیین کرد و هر Shard کاملا کاربردی و مستقل عمل می­کند و می­تواند روی هر نود کلاستر قرار بگیرد.

Document

یک سند واحد پایه اطلاعات است که می­تواند ایندکس شود و اسناد در ES قابل تبدیل شدن به فرمت JSON [11] هستند.

اضافه شدن یک سند در الستیک سرچ
اضافه شدن یک سند در الستیک سرچ

Shard & Replicas

یک ایندکس می­تواند حجم عظیمی از داده را ذخیره کند که از محدودیت­های سخت افزاری یک سرور تجاوز می­کند. بطور مثال یک ایندکس شامل یک ملیارد سند، به فضایی در حدود 1TB جهت ذخیره سازی نیاز دارد که ممکن است بیشتر از ظرفیت یک سرور باشد و یا اگر هم امکان ذخیره سازی این حجم از داده را داشته باشد مدت زمان پاسخ به درخواست­های جستجو را به مراتب افزایش و در نتیجه باعث کاهش کارایی کلاستر می­شود. لذا جهت رفع این مشکل ES توانایی تقسیم ایندکس­ها به چندین قسمت را دارد که هر قسمت یا تکه Shard نامیده می­شود و در زمان تعریف ایندکس براحتی می­توان تعداد shard های مورد نیاز را تعیین کرد و هر Shard کاملا کاربردی و مستقل عمل می­کند و می­تواند روی هر نود کلاستر قرار بگیرد.

Sharding به دو دلیل اصلی مهم است :

  • حجم داده­ های روی Shard ها کم می­شود و داده ها بین Shard ها تقسیم می­شوند.
  • امکان اجرای عملیات بصورت توزیع شده روی تمامی نود­ها فراهم می­شود که در نتیجه باعث افزایش عملکرد/توان می­شود.

در محیط­هایی مانند بستر شبکه که در آن امکان شکست و Fail شدن سیستم در هر زمان را می­توان انتظار داشت بسیار توصیه می­شود که یک مکانیزم Fialover  جهت حفظ داده ها و کارایی سیستم وجود داشته باشد. به همین دلیل ES به شما اجازه می­دهد تا یک یا چند کپی  از هر Shard را روی یک سیستم دیگر به نام Replica Shard داشته باشیم.

یکی از دلایل مهم Replication  :

  • دسترس پذیری را روی Shard های Fail شده

خلاصه این بخش:

هر ایندکس می­تواند داده های خود را روی چند Shard ذخیره کند. یک ایندکس می­تواند چند و یا صفر Shard کپی داشته باشد .تعداد Shard ها و Replica ها می­تواند در لحظه تعریف ایندکس تعیین شود و بعد از ایجاد ایندکس، فقط تعداد Replica ها قابل تغییر است. در ES و بصورت پیش فرض هر ایندکس روی   5 Shard اصلی ایجاد می­شود و هر Shard اصلی یک Replica دارد. به طور مثال اگر کلاستر مورد نظر ما 2 نود داشته باشد، ایندکس شما شامل 5 Shard اصلی و 5 Shard Replica است. (جمعا دارای  10 Shard است) .

تنظیمات مورد نیاز جهت راه­­اندازی ES

تنظیمات مورد نیاز ES در دو فایل با نام ­های elasticsearch.yml و logging.yml انجام می­شود و این دو فایل نیز در مسیر ES_HOME/config  قرار دارند.

elasticsearch.yml

فایل elasticsearch.yml تنظیمات اصلی و پرکاربرد  ES را دارا می­باشد که در ادامه به موارد مهم و پرکاربرد آن اشاره می­کنیم.

#cluster.name: elasticsearch 

نام کلاستر ES را مشخص می­کند که در حالت پیش فرض این نام elasticsearch تنظیم می­شود.

#node.name: “Franz Kafka”

نام نود مورد نظر ES را تنظیم می­کند و در حالت پیش­فرض نام یکی از شخصیت­ها را به آن انتساب می­دهد.

#node.master: true    

نود اصلی یا کپی بودن را مشخص می­کند. و در حالت پیش­فرض نود را بصورت نود اصلی ایجاد می­کند.

#node.data: true

امکان ذخیره سازی داده را به نود مربوطه می­دهد. و در حالت پیش­فرض این امکان به نود داده می­شود.

#index.number_of_shards: 5

تعداد Shard های کلاستر را تعیین می­کند که در حالت پیش­فرض هر کلاستر با 5 Shard شروع به­کار می­کند.

#index.number_of_replicas: 1

تعداد کپی­ها را از اطلاعات هر نود موجود در کلاستر را تعیین می­کند که در حالت پیش­فرض از هر نود یک کپی ایجاد می­شود

#path.conf: /path/to/conf.

مسیر پوشه تنظیمات ES را مشخص می­کند.

#path.data: /path/to/data

مسیر ذخیره سازی داده های ES را مشخص می­کند.

برای اجرای ES به java 7 نیاز است که پیشنهاد خود ES، Oracle JDK Version 1.7.0 60 است و جهت بررسی نسخه جاوا میتوانید از دستور زیر در محیط ترمینال استفاده کنید:

Java –version  یا echo $JAVA HOME

می­توانید آخرین نسخه ES را از آدرس زیر دانلود کنید :

http://www.elasticsearch.org/download

برای اجرای ES میتوانید فایل elasticsearch  را از مسیر زیر اجرا کنید:

$ bin/elasticsearch

برای اجرا به صورت  background  می­توانید از روش زیر استفاده کنید:

$ bin/elasticsearch -d

در ادامه چند تنظیم ضروری ES جهت عملکرد بهتر را مورد برسی قرار می­دهیم:

/etc/security/limits.conf:

elasticsearch – nofile 65535

elasticsearch – memlock unlimited

در این قسمت Xmx و Xms  مورد نیاز ES را تعیین می­­­کنیم. که با تعیین ES_HEAP_SIZE هر دو مقدار Xms و Xmx باهم برابر می­­شوند.

/etc/default/elasticsearch:

ES_HEAP_SIZE= 6G

MAX_OPEN_FILES=65535

MAX_LOCKED_MEMORY=unlimited

در این قسمت برای جلوگیری استفاده ES، از حافظه swapped  اقدامات زیر را انجام می­دهیم

/etc/elasticsearch/elasticsearch.yml:

bootstrap.mlockall: true

در محیط ترمینال سیستم :

sudo swapoff –a            

داشبرد موتوز جستجوی الستیک سرچ (Elastic Search)
داشبرد موتوز جستجوی الستیک سرچ (Elastic Search)

البته امروزه الاستیک سرچ با ابزار گرافیکی کیبانا و نیز LogStash به یک مجموعه کامل مدیریت و مانیتورینگ لاگ ها و داده های سری زمانی هم تبدیل شده است و در نسخه های اخیر آن (نسخه ۵.۴) ، امکان استفاده از هوش مصنوعی در شناخت رفتارهای مخاطره آمیز در لاگ های ثبت شده هم به مجموعه قابلیت های آن اضافه شده است.

برای دیدن فلیم های سینماییِ مهیج و جذاب”در حوزه فناوری اطلاعات، اوسینت و هوش مصنوعی“، بر روی اینجا کلیک کنید.

آدرس کانال تلگرام سایت بیگ دیتا:

t.me/bigdata_channel

آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel

جهت دیدن سرفصل های دوره های آموزشی بر روی اینجا کلیک کنید.

جهت ثبت نام در دوره های آموزشی بر روی اینجا کلیک کنید.

[1] High Availablity

[2] Multi-Tenancy

[3] Document Oriented

[4] Conflict Management

[5] Per-Operation Persistence

[6] Scheme Free

[7] Open Source

[8] Full-Text Search

[9] Analytics

[10] Scalable

[11] Java Script Object Notation

Visits: 59128

همچنین ببینید

خزشگر crawler4j

خزشگر crawler4j و مقایسه با دیگر خزشگرها

در این نوشتار سعی داریم راه اندازی یک خزشگر وب قدرتمند را به همراه امکان …

4 دیدگاه

  1. سلام و درود
    آموزش فعال سازی token authentication کیبانا رو دارید؟ نیاز مبرم دارم!

  2. خیلی خوب و کامل بود

  3. سلام و درود بر همه مخصوصا استاد تاجبخش که خاطرات خوبی در دانشگاه صنعتی با ایشون داشتیم.

    یک سوال خیلی مهم!
    من نیاز دارم تا الستیک سرچ ۷.۳ رو کرک کنم تا بتونم از بعضی امکانات اضافیش استفاده کنم. ایا میتوانید در این زمینه کمک کنید؟

    ممنون

    اگر فقط امکان داره بصورت ایمیل به بنده اطلاع بدید . چون ممکنه لینک اینجا رو گم کنم و … ممنون

  4. سلام من دانشجوی ارشد نرم افزار هستم. مطلبی که نوشته بودین برای من مفید بود. منون از انتشار… اگر فیلم آموزشی توی این زمینه دارید ممنون میشم به اشتراک بذارین…

دیدگاهتان را بنویسید