Email: info@developit.ir
نمایش ۱ تا ۶ مورد از کل ۶ مورد.

تهیه snapshot و بازگردانی آن در elasticsearch

ایمیل یکی از دوستانم مبنی بر اینکه هنگام کار با elasticsearch تمام اطلاعاتشُ از دست داده و دنبال راه حلی برای بازگردانی اونها بود یادم انداخت که بارها این اتفاق برای خودمم افتاده.

حقیقتش روشی برای بازگردانی اطلاعات در صورتی که snapshot یا backup از elasticsearch نداریم بلد نیستم. من تا الان همیشه از elasticsearch در محیط های تست استفاده کردم و از دست دادن اطلاعاتم(که زیاد هم اتفاق افتاده چون همه چیز رو دستکاری میکنم) اهمیت چندانی نداشته.

ماژول snapshot در elasticsearch این امکان رو به شما میده تا از یک شاخص تکی یا تمام مجموعه کلاستر با استفاده از مخزن(repository)که میتونه فایل سیستم اشتراکی، S3 یا HDFS باشه snapshot تهیه کنید. snapshot گزینه ی خوبی برای تهیه نسخه پشتیبان هست چون خیلی سریع تهیه یا بازگردانی میشه اما به عنوان آرشیو یا ابزاری برای انتقال اطلاعات مناسب نیست چون:

- snapshot تهیه شده در نسخه 2 رو میتونید در نسخه 5 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو میتونید در نسخه 2 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو نمیتونید در نسخه 5 بازگردانی کنید.

برای اینکه snapshot نسخه 1 رو به 5 ببرید میتونید اول اون رو به 2 بازگردانی و بعدش با استفاده از reindex-from-remote اون رو برای 5 بازسازی کنید که خب با توجه به اینکه ممکنه دیتای شما زیاد باشه کار زمانبری هست.

بیشتر بخوانید

نصب و راه اندازی elasticsearch در docker

فقط یه نکته ی کوچیک برای این مورد وجود داره و سایر کارهایی که انجام میدیم با مطالعه مطالب قبلی که در مورد docker نوشتم قابل انجام هست.

اول وارد docker hub میشیم و elasticsearch رو جستجو میکنیم. مخزن اصلی elasticsearch به این آدرس هست و داخلش توضیحات کاملی نوشته شده.

elasticsearch رو دریافت میکنیم:

docker pull elasticsearch

همونطور که توضیح داده elasticsearch به طور پیشفرض هم برای http و هم برای transport از localhost استفاده میکنه و همچنین http.host اون روی 0.0.0.0 تنظیم شده.

نکته مهم اینجاست، زمانی که شما docker رو نصب میکنید خودش سه تا network connection میسازه. برای اینکه لیستشون رو ببینید از دستور زیر استفاده کنید:

$ docker network ls

NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

به طور پیشفرض از docker0 استفاده میشه که از نوع bridge هستش:

$ ifconfig

docker0   Link encap:Ethernet  HWaddr 02:42:47:bc:3a:eb
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:47ff:febc:3aeb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1100 (1.1 KB)  TX bytes:648 (648.0 B)

فکر میکنم تا الان دیگه متوجه نکته شده باشید

بیشتر بخوانید

فشرده سازی درخواست ها در elasticsearch

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

ممکنه درخواست های زیادی هم سمت سرور ارسال بشه و چقدر خوبه این درخواست ها به نحوی فشرده و کوچکتر بشن تا انتقال اطلاعات سریعتر انجام بشه مخصوصا داخل elasticsearch که به صورت real time کار میکنه.

به این منظور مشغول پیاده سازی ماژول msgpack برای elasticsearch شدم اما زمانی که ازش استفاده کردم دو مشکل وجود داشت:

1) افت کارایی، نه به خاطر encode/decode کردن JSON. به این دلیل که اصل scripting در elasticsearch کاهش سرعت رو به همراه داره مخصوصا زمانی که کد شما قرار هست به ازای هر درخواست اجرا بشه.

2) منسوخ شدن برخی از روش های scripting در آینده، مخصوصا javascript! ظاهرا scripting در نسخه های بعدی دچار تغییرات زیادی خواهد شد در حدی که elastic.co پیشنهاد میکنه از painless scripting language استفاده کنیم.

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

اگر از http module استفاده میکنید، elasticsearch از فشرده سازی در صورتی که ممکن باشد با استفاده از Accept-Encoding پشتیبانی میکند. مقدار http.compression در بخش network settings به طور پیشفرض true است. سطح فشرده سازی درخواست ها در elasticsearch قابل تغییر است. سطوح فشرده سازی از 1(حداقل فشرده سازی) شروع شده و نهایتا تا 9(حداکثر فشرده سازی) قابل تغییر میباشد. در network settings فشرده سازی روی سطح 3 تنظیم شده با این وجود میتوانید مقدار آن را با استفاده از http.compression_level کم یا زیاد کنید.

Elasticsearch-Hadoop، جستجو و تحلیل real time دادهای Hadoop

در کنار داده های بسیار زیادی که در hadoop دارید میتونید یک موتور جستجو و تحلیل گر real-time هم داشته باشید.

با استفاده از کتابخانه هایی که elasticsearch برای این موضوع آماده کرده امکان اتصال hadoop و elasticsearch فراهم شده.

با ادغام elasticsearch و یکی از component های hadoop داده ها به طور مستقیم در elasticsearch شاخص گذاری(index) میشوند و همچنین میتوان از HDFS به عنوان یک archive بلند مدت برای elasticsearch استفاده کرد.

در hadoop امکان جستجو یا تجزیه و تحلیل محتوا وجود داره اما سریع ترین روش نیست. ES-Hadoop با فراهم کردن شاخص گذاری داده های hadoop در elasticsearch سریعتر از همیشه این کارُ انجام میده.

قابلیت ادغام با محبوب ترین component های hadoop وجود داره، hadoop پیوسته در حال توسعه است و ES-Hadoop با component های برگزیده و محبوب آن تعامل داره و خواهد داشت.

برای data visualization(مصورسازی داده ها)  elasticsearch از kibana استفاده میکنه.

مدیریت اشخاصی که به اطلاعات شما دسترسی دارن و جلوگیری از جاسوسی برای حفظ محرمانگی اطلاعات انجام میشه. امنیت ES-Hadoop شامل احراز هویت HTTP، پشتیبانی از SSL/TLS برای ارتباط بین elasticsearch و hadoop clusters، کار کردن با Kerberos فعال در hadoop و X-Pack قابل استفاده در elasticsearch cluster میشه.

و در آخر، با هر گونه از توزیع های hadoop مانند Cloudera، Mapr، Hortonworks، Databricks و ... به خوبی کار میکنه.

اصطلاحات پایه در elasticsearch

تعدادی اصطلاح در elasticsearch وجود دارد که دانستن آنها در ابتدا به فرایند یادگیری بسیار کمک میکند.

 Near Realtime (NRT)

 elasticsearch یک بستر جستجوی نزدیک به زمان واقعی است، به این معنی که از زمان شاخص گذاری یک سند تا قابلیت جستجو در آن تاخیر کمی وجود دارد(معمولا یک ثانیه).

cluster

یک cluster مجموعه ای از یک یا چند node است(server) که با هم تمام اطلاعات را نگه داشته و شاخص گذاری و قابلیت جستجو را در بین تمام node فراهم میکنند.

node

یک node یک server تکی و قسمتی از cluster میباشد. که در ذخیره سازی داده های خود و شاخص گذای و فراهم کردن قابلیت جستجو شرکت میکند.

index

یک index مجموعه ای از document است که تا حدودی دارای ویژگی های مشابهی هستند، به عنوان مثال شما میتوانید یک index برای اطلاعات مشتریان، یک index از فهرست محصولات و یک index از اطلاعات سفارشات داشته باشید.

index به وسیله ی نام خود شناخته میشود، که باید حروف لاتین کوچک باشد. این نام در زمان شاخص گذاری، جستجو، ویرایش و حذف مورد استفاده قرار میگیرد.

در یک cluster تکی شما میتوانید هر چقدر index نیاز دارید تعریف کنید. 

بیشتر بخوانید

elasticsearch چیست؟ آموزش نصب elasticsearch در لینوکس


elasticsearchelasticsearch، یک موتور جستجو و تحلیلگر توزیع شده است که برای تعامل با آن از restful api استفاده میکنیم.

قالب ارسال و دریافت اطلاعات در این موتور جستجو json میباشد.

اولین نسخه از elasticsearch در سال 2010 عرضه شد و در حال حاضر نسخه 5.0.1 آن هم در دسترس میباشد.

elasticsearch  با جاوا توسعه داده شده، یک پروژه متن باز است و تحت مجوز ASL منتشر شده.

 

بیشتر بخوانید
عضویت در خبرنامه
جهت اطلاع از آخرین فعالیت های من لطفا در خبرنامه عضو شوید