ক্লাস্টারে কোনও সূচকের নামকরণ কীভাবে করবেন?


110

আমাকে একটি ক্লাস্টারে বেশ কয়েকটি সূচকের নাম পরিবর্তন করতে হবে (তাদের নাম অবশ্যই পরিবর্তন করতে হবে, আমি ডাকনাম ব্যবহার করতে পারি না )।

আমি দেখেছি যে এটি করার জন্য কোনও সমর্থিত উপায় নেই, আমি যে নিকটতমটি পেয়েছি সেটি হল সূচকের ডিরেক্টরিটির নাম পরিবর্তন করা , আমি এটি একটি ক্লাস্টারে চেষ্টা করেছি।

ক্লাস্টার 3 মেশিন হয়েছে A, Bএবং Cএবং shards তাদের প্রতিটি নেভিগেশন প্রতিলিপি করা হয়। আমি স্থিতিস্থাপক অনুসন্ধানটি বন্ধ করে দিয়েছি A, নামকরণ /var/lib/elasticsearch/security/nodes/0/indices/oldindexnameকরে /var/lib/elasticsearch/security/nodes/0/indices/newindexnameপুনরায় শুরু করেছি A

ক্লাস্টারের রাজ্য হলুদ ছিল এবং ইলাস্টিকসার্চ একটি সঠিক অবস্থা পুনরুদ্ধার করতে কিছু জাদু করছে। কিছু সময় পরে আমি শেষ

  • oldindexnameউপলব্ধ এবং সম্পূর্ণরূপে প্রতিলিপি করা হয়েছে (থেকে উদ্ধার হয়েছে Bএবং Cআমি অনুমান করি)
  • newindexname উপলভ্য (আমি এটি সন্ধান করতে পারি) তবে হেড প্লাগইন দেখায় যে এর শার্ডগুলি একটি "স্বাক্ষরিত" অবস্থায় রয়েছে এবং সেগুলি ধূসর হয়ে গেছে (প্রতিলিপি করা হয়নি)

পুনরুদ্ধারের সময় security.logনিম্নলিখিত বার্তাটি দেখিয়েছিল:

[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

যদিও newindexnameঅনুসন্ধানযোগ্য, এটি অবশ্যই কোনও স্বাভাবিক অবস্থায় নেই।

আমি মুছে ফেলে আগের অবস্থায় ফিরে এসেছি newindexname। ক্লাস্টারটি কোনও "স্বাক্ষরবিহীন" এন্ট্রি ছাড়াই সবুজতে ফিরে আসে।

যে দেওয়া, আমি নাম পরিবর্তন করতে পারেন oldindexnameকরার newindexnameএকটি ক্লাস্টার কি?

দ্রষ্টব্য: আমার মনে যে চূড়ান্ত সমাধানটি মনে আছে তা হ'ল এতে স্ক্রোল-অনুলিপি oldindexকরা newindexএবং oldindexতারপরে মুছে ফেলা । এটি সময় নিতে চলেছে তাই যদি আরও সরাসরি সমাধান হয় তবে তা দুর্দান্ত।

উত্তর:


19

ইলাস্টিকসন্ধান 7.4 দিয়ে শুরু করে, সূচকের নাম পরিবর্তনের সেরা পদ্ধতিটি সদ্য চালু হওয়া ক্লোন সূচক এপিআই ব্যবহার করে সূচিটি অনুলিপি করা , তারপরে মুছুন সূচক এপিআই ব্যবহার করে মূল সূচকটি মুছে ফেলা

একই উদ্দেশ্যে স্ন্যাপশট এপিআই বা রিইনডেক্স এপিআই ব্যবহারের ক্ষেত্রে ক্লোন সূচক এপিআইর প্রধান সুবিধাটি গতি, কারণ ক্লোন সূচক এপিআই হার্ডডলিঙ্কগুলি সূচক সূচক থেকে লক্ষ্য সূচকে বিভাগগুলিকে কোনও অংশকে পুনরায় প্রসেস না করে (চালু করে) হার্ডলিঙ্কগুলি সমর্থন করে এমন ফাইল সিস্টেমগুলি স্পষ্টতই; অন্যথায়, ফাইলগুলি ফাইল সিস্টেম পর্যায়ে অনুলিপি করা হয়, যা বিকল্পগুলির তুলনায় এখনও আরও কার্যকর) ক্লোন সূচকটিও গ্যারান্টি দেয় যে টার্গেট সূচকটি উত্স সূচকের প্রতিটি পয়েন্টে অভিন্ন (যেমন, রিইন্ডেক্স পদ্ধতির বিপরীতে ম্যানুয়ালি সেটিংস এবং ম্যাপিংগুলি অনুলিপি করার প্রয়োজন নেই), এবং কোনও স্থানীয় স্ন্যাপশট ডিরেক্টরিটি কনফিগার করার দরকার নেই ।

পার্শ্ব দ্রষ্টব্য: যদিও এই পদ্ধতিটি পূর্ববর্তী সমাধানগুলির তুলনায় অনেক দ্রুত, এটি এখনও সময়কে বোঝায়। প্রকৃত ব্যবহারের কেস রয়েছে যা সূচকগুলির নাম পরিবর্তনের ন্যায্যতা প্রমাণ করে (উদাহরণস্বরূপ, একটি বিভক্তির পদক্ষেপ হিসাবে, সঙ্কুচিত করা বা ব্যাকআপ প্রবাহ), তবে সূচকগুলির নাম পরিবর্তন করে দিনের বেলা কাজকর্মের অংশ হওয়া উচিত নয়। যদি আপনার কর্মপ্রবাহের জন্য ঘন ঘন সূচকের পুনর্নামকরণের প্রয়োজন হয় তবে তার পরিবর্তে আপনার সূচক এলিয়াসগুলি ব্যবহার করা উচিত ।

এখানে সম্পূর্ণ অপারেশনের ক্রম সূচক নামান্তর করতে একটি উদাহরণ source_indexথেকে target_index। এটি কিছু ইলাস্টিক অনুসন্ধান নির্দিষ্ট কনসোল ব্যবহার করে মৃত্যুদন্ড কার্যকর করা যেতে পারে, যেমন কিবানায় একীভূত করা । ইলাস্টিক অনুসন্ধান কনসোলের পরিবর্তে এই উদাহরণের বিকল্প সংস্করণের জন্য এই সূচকটি দেখুন curl

# Make sure the source index is actually open
POST /source_index/_open

# Put the source index in read-only mode
PUT /source_index/_settings
{
  "settings": {
    "index.blocks.write": "true"
  }
}

# Clone the source index to the target name, and set the target to read-write mode
POST /source_index/_clone/target_index
{
  "settings": {
    "index.blocks.write": null 
  }
}

# Wait until the target index is green;
# it should usually be fast (assuming your filesystem supports hard links).
GET /_cluster/health/target_index?wait_for_status=green&timeout=30s

# If it appears to be taking too much time for the cluster to get back to green,
# the following requests might help you identify eventual outstanding issues (if any)
GET /_cat/indices/target_index
GET /_cat/recovery/target_index
GET /_cluster/allocation/explain

# Delete the source index
DELETE /source_index

163

এটি করতে আপনি রিইন্ডেক্স ব্যবহার করতে পারেন ।

Reindex গন্তব্য সূচক সেট আপ করার চেষ্টা করে না। এটি উত্স সূচকের সেটিংস অনুলিপি করে না। ম্যাপিংস, শারড কাউন্ট, প্রতিলিপি ইত্যাদি স্থাপন সহ _রেইন্ডেক্স ক্রিয়া চালানোর আগে আপনার গন্তব্য সূচকটি সেট আপ করা উচিত

  1. প্রথমে একটি নতুন নামে সূচিটি অনুলিপি করুন
POST /_reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}
  1. এখন সূচক মুছুন
DELETE /twitter

যদিও এর উভয় সূচকের (অস্থায়ীভাবে) জন্য স্থান থাকা দরকার, এটি সহজ এবং সম্পূর্ণ অন সার্ভার - সুতরাং এটি এখন পর্যন্ত সেরা সমাধান বলে মনে হচ্ছে (যদিও ডক একটি 'পরীক্ষামূলক' স্থিতির বিষয়ে সতর্ক করে দিয়েছে)। ধন্যবাদ.
ওউজে

2
ম্যাপিং থাকলে এই কাজ করে _source: {enabled: false}?
হ্যারাল্ড

2
@ হারাল্ড নং, মূল নথির ডেটা হিসাবে _reindexব্যবহার _sourceকরে।
Agop

6
এই ম্যাপিং অনুলিপি করবে twitterকরার new_twitterযতদূর আমি জানি।
নিক

3
আমি _রিনডেক্সের সমাধানের সাথে একমত, তবে প্রশ্নটি পরিবর্তন করা উচিত। রিইন্ডেক্সিং কেবল একটি নামকরণ নয়। এমনকি এটি কীভাবে ডেটা সূচিকৃত হয় তাও পরিবর্তন করতে পারে।
লুচাবেলুচিনি

62

আপনার সূচকের নাম পরিবর্তনের জন্য আপনি ইলাস্টিকআরচ স্ন্যাপশট মডিউলটি ব্যবহার করতে পারেন।

প্রথমে আপনাকে আপনার সূচীর স্ন্যাপশট নিতে হবে while এটিকে পুনরুদ্ধার করে আপনি নিজের সূচকের নাম পরিবর্তন করতে পারেন।

    POST /_snapshot/my_backup/snapshot_1/_restore
    {
     "indices": "jal",
     "ignore_unavailable": "true",
     "include_global_state": false,
     "rename_pattern": "jal",
     "rename_replacement": "jal1"
     }

পুনঃনামস্থাপন: - নতুন সূচিপত্র যেখানে আপনি আপনার ডেটা ব্যাকআপ করতে চান।


4
হলি ক্র্যাপ, এটি অবিশ্বাস্যরূপে কার্যকর। ধন্যবাদ!
ক্রিস কগডন

1
গৃহীত সমাধানের চেয়ে অনেক ভাল! এটি প্রকৃতপক্ষে সূচকের বাইনারি অনুলিপি, সুতরাং কোনও কিছু হারানোর ঝুঁকি নেই এবং _sourceসূচকে সক্রিয় করার প্রয়োজন হয় না। আমি কোনও সমস্যা ছাড়াই কিছু মাল্টি-টিবি সূচকের এই নামকরণ করেছি।
জ্যাকেট

2
@ জ্যাকেট - আমি জেনে খুশি যে আমার উত্তরটি আপনাকে সত্যিই সাহায্য করে।
কৃষ্ণ কুমার

1
আমি সম্মত, আরও ভাল সমাধান, কোনও ডেটা হ্রাসের সমস্যা নয়, রিন্ডেক্সিংয়ের চেয়ে বড় সূচকের পক্ষে অনেক দ্রুত
রোমেন হাটেফুইল

1
এটি ম্যাপিং ধরে রাখে?
আমোগ মিশ্র

5

যেমন ES তে সূচি অনুলিপি বা নামকরণের জন্য সরাসরি কোনও পদ্ধতি নেই (আমি নিজের প্রকল্পের জন্য আমি ব্যাপকভাবে অনুসন্ধান করেছি)

তবে একটি খুব সহজ বিকল্প হ'ল জনপ্রিয় স্থানান্তর সরঞ্জাম [ইলাস্টিক-এক্সপোর্টার] ব্যবহার করা।

http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/

[পিএস: এটি আমার ব্লগ নয়, কেবল হোঁচট খেয়েছে এবং এটি ভাল পেয়েছে]

এর মাধ্যমে আপনি সূচি / টাইপ অনুলিপি করতে পারেন এবং তারপরে পুরানোটি মুছতে পারেন।


লিঙ্কটি আর কাজ করে না। অন্য কোনও জায়গা আমরা এটি খুঁজে পেতে বা এই তথ্য থাকতে পারে?
এলাচেল

5

আপনি REINDEX না পারেন, তাহলে একটি কার্যসংক্রান্ত ব্যবহার করা alias লেখা । থেকে সরকারী ডকুমেন্টেশন:

স্থিতিস্থাপক অনুসন্ধানের API গুলি নির্দিষ্ট সূচীর বিপরীতে কাজ করার সময় একটি সূচকের নাম এবং প্রযোজ্য ক্ষেত্রে বেশ কয়েকটি সূচক গ্রহণ করে। সূচক এলিয়াসস এপিআই সমস্ত এপিআইএল স্বয়ংক্রিয়ভাবে উপনামের নামটিকে প্রকৃত সূচক নামতে রূপান্তর করে একটি নামের সাথে একটি সূচক উপকরণের অনুমতি দেয়। একটি উপনাম একাধিক সূচকেও ম্যাপ করা যেতে পারে এবং এটি নির্দিষ্ট করার সময়, উপনামটি স্বয়ংক্রিয়ভাবে এলিয়াস সূচকগুলিতে প্রসারিত হবে। একটি উপাধি কোনও ফিল্টারের সাথেও যুক্ত হতে পারে যা অনুসন্ধানের সময় এবং রাউটিংয়ের মানগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে। একটি উপনামের সূচকের মতো একই নাম থাকতে পারে না।

আপনি আরও বেশি এই বৈশিষ্ট্যটি ব্যবহার করেন তবে এই সমাধানটি কাজ করে না সে বিষয়ে সচেতন হন। https://github.com/elastic/elasticsearch/issues/16560


1
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).@ ওওজেজে
থ্যালস পি

কারণ উপন্যাসটি কাজ করবে না : ব্যবহারের alias জন্য আপনাকে এগিয়ে পরিকল্পনা করতে হবে এবং আসল সূচীর নামটি as an aliasএকটি আসল সূচকে তৈরি করতে হবে । তারপরে আপনি একটি নতুন উপনামের নাম তৈরি করতে পারেন এবং অন্য কোনও কিছুর জন্য পুরাতন ওরফে নামটি পুনরায় ব্যবহার করতে পারেন। তবে আপনি যদি পুরানো_ডেটায় অ্যাক্সেস হারিয়ে ফেলেন তবে আপনার যদি কেবলমাত্র একটি রিয়েল_ইনডেক্স থাকে, এটির একটি উপাধি তৈরি করুন, পুরানো রিয়েল_আইডেক্স মুছুন। উপন্যাসটি এখন কিছুই দেখায় না।
জেসি

@ জেসি ক্রিশলম আমার মনে হয় কারও কাছে "উরফ থাকতে পারে যা কিছুতেই নির্দেশ করে না"। রিয়েল_ইনডেক্স মুছে ফেলার চেষ্টা করুন, আপনি দেখতে পাবেন যে উপনামটি "এটির একটি উপনাম "ও মুছে ফেলা হবে।
mgaert

5

কোনও সূচকের পুনরায় নামকরণ বা ম্যাপিংগুলি পরিবর্তন করার অন্য একটি ভিন্ন উপায় হ'ল লগস্ট্যাশ ব্যবহার করে পুনর্নির্মাণ করা। লগস্ট্যাশ ২.১ কনফিগারেশনের একটি নমুনা এখানে:

input {
  elasticsearch {
   hosts => ["es01.example.com", "es02.example.com"]
   index => "old-index-name"
   size => 500
   scroll => "5m"
  }
}
filter {

 mutate {
  remove_field => [ "@version" ]
 }

 date {
   "match" => [ "custom_timestamp", "MM/dd/YYYY HH:mm:ss" ]
   target => "@timestamp"
 }

}
output {
 elasticsearch {
   hosts => ["es01.example.com", "es02.example.com" ]
   manage_template => false
   index => "new-index-name"
 }
}

4
সুতরাং আপনি বলছেন যে একটি ইলাস্টিকস ইনডেক্সের পুনর্নির্দেশের সর্বোত্তম উপায়টি লগস্ট্যাশ ইনস্টল করা, এবং তারপরে পুনরায় সূচিটির জন্য ব্যবহার করবেন? কিছুটা ওভারকিল বলে মনে হচ্ছে, বিশেষত যদি আপনি লগস্ট্যাশটি না চান / ব্যবহার করেন না ...
এম জাস্টিন

উত্তরের একমাত্র সমস্যা হ'ল "সেরা" অংশ। । আমি বলতে হবে "আরেকজন পথ 'অন্য যে, এটি একটি ভাল উত্তর।
রবার্ট

3

স্ন্যাপশট মডিউলটির জন্য ইলাস্টিকের অনুসন্ধানে উল্লেখ হিসাবে ,

পুনঃনাম_প্যাটার্ন এবং পুনঃনামস্থাপন বিকল্পগুলি নিয়মিত এক্সপ্রেশন ব্যবহার করে পুনঃস্থাপনের সূচকটির পুনরায় নামকরণ করতেও ব্যবহার করা যেতে পারে


-5

এখনও যদি কারও এটির প্রয়োজন হয়। সফল, অফিসিয়াল নয়, সূচকের নাম পরিবর্তনের উপায় হ'ল:

  1. পুনরায় নামকরণ করা দরকার সূচিগুলি বন্ধ করুন
  2. মাস্টার এবং ডেটা নোডের সমস্ত ডেটা ডিরেক্টরিতে সূচীর ফোল্ডারগুলির নাম পরিবর্তন করুন।
  3. পুরানো বন্ধ সূচকগুলি আবার খুলুন (আমি কোফপি প্লাগইন ব্যবহার করি)। পুরাতন সূচিগুলি আবার খোলা হবে তবে নিযুক্ত থাকবেন না। নতুন সূচকগুলি বন্ধ অবস্থায় উপস্থিত হবে
  4. নতুন সূচকগুলি আবার খুলুন
  5. পুরানো সূচি মুছুন

যদি আপনি এই ত্রুটিটি "ড্যাংলেড ইনডেক্স ডিরেক্টরি নাম" হিসাবে পেতে থাকেন তবে সমস্ত মাস্টার নোডের (ইনডেক্স নোড নয়) ইনডেক্স ফোল্ডারটি সরিয়ে ফেলুন এবং ডেটা নোডগুলির মধ্যে একটি পুনরায় চালু করুন।


2
দৃla়ভাবে ইলাস্টিক দ্বারা নিরুৎসাহিত। আপনি যদি এটি করেন তবে ব্যাকআপ রাখার বিষয়টি নিশ্চিত করুন।
লুচাবেলুচিনি

ডেটা ডিরেক্টরিতে সূচীর নামটি কোথায় উপস্থিত হয় তা আমি বুঝতে পারি না। আমি যখন / var / lib / ইলাস্টিকসার্চ / নোডস / 0 / সূচকগুলিতে দেখি / ডিরেক্টরিগুলির নামগুলি এলোমেলোভাবে উত্পন্ন হয় যেমন "1aS4RusHSYWLdt-Wx7NnBw" (ইলাস্টিকের সংস্করণ 5.6.3)
জোহান

1
@ জোহানবুলé, ইলাস্টিকসার্কের সংস্করণ 5 এর পরে এই পদ্ধতিটি আর কার্যকর নয়।
আনহ লে

@ লুকাবেলুচিনি, একমত হয়েছেন এগুলি যেমন রাখবেন ঠিক তেমনই রাখুন এবং উপকরণ ব্যবহার করুন।
আনহ লে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.