ในโพสต์นี้ ผมจะกล่าวถึง Elasticsearch® aliases เพื่อเฉลิมฉลองการเข้าถึงการดำเนินการ Alias ในการติดตั้ง Curator ที่ ObjectRocket โฮสต์ ผมยังทบทวนข้อดีของ Elasticsearch aliases และวิธีที่คุณสามารถใช้พวกมันได้
บทนำการใช้ Aliases ใน Elasticsearch
เผยแพร่ครั้งแรกเมื่อวันที่ 24 สิงหาคม 2560 ที่ ObjectRocket.com/blog
กลยุทธ์ที่ดีสำหรับสุขอนามัย Elasticsearch ที่ยอดเยี่ยมคือการหลีกเลี่ยงดัชนีขนาดใหญ่ที่เก็บข้อมูลมากเกินไป อย่างไรก็ตาม หลังจากข้อมูลของคุณกระจายไปทั่วหลายดัชนี คุณอาจต้องการวิธีที่ดีที่สุดในการค้นหาข้ามพวกมัน นั่นคือที่ที่ aliases ช่วยได้
Aliases ใน Elasticsearch คือสิ่งที่พวกมันได้ยินมาโดยตรง: ชื่อรองที่สามารถใช้เพื่ออ้างอิงถึงดัชนี หรือหลายดัชนี ที่สามารถรวมการกรองได้เพื่อตอบสนองความต้องการของคุณ ในโพสต์นี้ ผมต้องการแนะนำคุณผ่านวิธีใช้ aliases ที่น่าสนใจบางอย่าง และขั้นตอนการใช้ฟีเจอร์ของเรา ช่วยให้คุณตั้งค่า Alias Curator task สำหรับเคลสเตอร์ Elasticsearch ของ Object Rocket ได้อย่างรวดเร็วและง่ายดาย
CRUD (Create, Read, Update และ Delete) กับ aliases
มาเดินผ่านตัวอย่างง่ายๆ ของวิธีการทำงานของ aliases คุณสามารถแสดงรายการ aliases ได้โดยใช้ _cat API ซึ่งคืนค่าบรรทัดสำหรับแต่ละการเชื่อมโยง alias-index และว่ามีการกรองหรือ routing ใช้หรือไม่:
GET _cat/aliases?v alias index filter routing.index routing.search atest test1 – – – atest test2 – – – atest2 test2 * – – อีกทางหนึ่ง คุณสามารถใช้ endpoint /_alias เพื่อดู aliases ทั้งหมด หรือ endpoint /index/_alias เพื่อดู aliases สำหรับดัชนีนั้นเท่านั้น คุณยังสามารถเพิ่ม aliases ให้กับดัชนีระหว่างการสร้างโดยใช้ index template หรือคำสั่ง PUT:
PUT /test2 { “aliases” : { “atest” : {}, “atest2” : { “filter” : { “term” : {“user” : “objectrocket” } } } } } จากนั้น เพิ่มหรือแก้ไขในภายหลังด้วย endpoint /_aliases โดยระบุดัชนีและ alias ที่จะเพิ่มหรือลบ
POST /_aliases { “actions” : [ { “add” : { “index” : “test1”, “alias” : “atest” } }, { “remove” : { “index” : “test3”, “alias” : “atest” } } ] } จากนั้น คุณสามารถใช้ชื่อ alias แทนชื่อดัชนีในคำขอ โปรดทราบว่าคุณสามารถจัดทำดัชนีเอกสารไปยัง alias ที่ชี้ไปยังดัชนีเดียวเท่านั้น มีความลึกซึ้งมากกว่านี้เกี่ยวกับ aliases ที่คุณสามารถได้จากเอกสารทางการ แต่สิ่งนี้ควรให้คุณ感受ได้สำหรับการทำงานกับ aliases
อะไรเป็นเรื่องใหญ่?
ทั้งหมดดูง่าย และคุณอาจขายตัวเองแล้ว แต่ในกรณีที่ยังไม่ นี่คือที่ที่ aliases ช่วยจริงๆ
Reindex โดยไม่มี downtime
หนึ่งในคุณสมบัติที่มีประโยชน์ที่สุดใน Elasticsearch คือ Reindex API อย่างไรก็ตาม หลังจาก reindexing แล้ว คุณยังต้องจัดการการเปลี่ยนผ่านจากดัชนีเก่าไปยังดัชนีใหม่ Aliases ช่วยให้คุณทำการเปลี่ยนผ่านนี้ได้โดยไม่มี downtime นี่คือวิธีการ:
สมมติว่าคุณมีดัชนีชื่อ
oldIndexและต้องการ reindex ไปเป็นnewIndexสร้าง alias
myaliasและเพิ่มลงในoldIndexให้แน่ใจว่าแอปพลิเคชันของคุณชี้ไปที่
myaliasแทนที่จะเป็นoldIndexสร้าง
newIndexของคุณและเริ่ม reindex ข้อมูลจากoldIndexเข้าไปเพิ่ม
newIndexไปยังmyaliasและลบoldIndexทำในคำสั่งเดียว การเปลี่ยนแปลงเป็น atomic (เล็กและแยกต่างหาก) ดังนั้นจะไม่มีปัญหาในช่วงเปลี่ยนผ่านตรวจสอบว่าคุณได้ผลลัพธ์ที่คาดหวังกับ alias แล้ว และคุณสามารถลบ
oldIndexเมื่อพร้อม
เป็นแนวทางปฏิบัติที่ดีที่จะใช้ alias สำหรับการอ่านหรือคำขอจากแอปพลิเคชันของคุณเพื่อหลีกเลี่ยงขั้นตอนที่ไม่จำเป็น
การดึงช่วงของดัชนีที่ขึ้นอยู่กับเวลา
หากคุณใช้ Logstash® หรือ Beats® คุณอาจคุ้นเคยกับดัชนีที่ชื่อ something-yyyy.mm.dd นี่ทำให้การดูแลและจัดการข้อมูลง่ายขึ้น Wildcards และรายการดัชนีไม่ได้ยืดหยุ่นเท่าที่คุณต้องการ โดยเฉพาะเมื่อคุณต้องการค้นหาข้ามช่วงวันที่ Aliases ให้โซลูชันที่ง่ายสำหรับกรณีเช่นนี้ สมมติว่าคุณมีดัชนี logstash รายวัน และคุณเก็บ log ไว้ 30 วัน อย่างไรก็ตาม คุณอาจต้องการดูเฉพาะ 7 วันที่ผ่านมาสำหรับบางประเภทของคำขอ โดยใช้ aliases และ curator คุณสามารถทำได้ค่อนข้างง่าย
สร้าง alias คล้ายตัวอย่างนี้:
lastSevenDaysตั้งค่า index template ของคุณให้เพิ่มดัชนีเข้า alias ใหม่นี้โดยค่าเริ่มต้น
ใช้ Elasticsearch Curator ด้วย alias action และตัวกรอง age/pattern หรือสคริปต์พื้นฐาน ตั้งค่า recurring task เพื่อลบดัชนีที่เก่ากว่า 7 วัน
จากนั้น การค้นหาทั้งหมดไปยัง
lastSevenDaysจะกระทำกับดัชนีที่สร้างขึ้นใน 7 วันที่ผ่านมาเท่านั้น
ตัวอย่างลูกค้า
ผมต้องการปิดท้ายด้วยตัวอย่างเล็กๆ จากลูกค้าหนึ่งของเรา ลูกค้านี้มีปัญหาเกี่ยวกับความช้า หลังจากตรวจสอบบางอย่าง เราสังเกตว่าหนึ่งในคำขอทั่วไปของพวกเขากำลังค้นหาข้ามช่วงวันที่ทั้งหมดของเคลสเตอร์ คำขอนี้คล้ายกับสถานการณ์ที่ระบุไว้ก่อนหน้าและต้องการข้อมูลเฉพาะ 7 วันที่ผ่านมา ดังนั้นจึงเป็นตัวเลือกที่สมบูรณ์สำหรับการจัดการด้วย alias ที่อัปเดตเป็นประจำเพื่อชี้ไปยังดัชนีจาก 7 วันที่ผ่านมา ในกราฟต่อไป คุณสามารถเห็นว่าผลกระทบต่อประสิทธิภาพของเคลสเตอร์ของพวกเขาเป็นเรื่องมหัศจรรย์:
เนื่องจาก alias นี้ถูกสืบค้นบ่อย เราสามารถเห็นผลกระทบของการเปลี่ยนแปลงนี้ กราฟเหล่านี้แสดงให้เห็นว่าการใช้ CPU ลดลงมากกว่า 50% บนทุกโหนด จำนวนการขับไล่ query cache ลดลง ~75% แม้ผลลัพธ์ที่คุณเห็นอาจไม่ได้รุนแรงขนาดนี้ ขึ้นอยู่กับความถี่ของคำขอและขนาดดัชนี แต่สิ่งนี้แสดงให้เห็นว่าการจัดการขอบเขตการค้นหาและจัดทำดัชนีอย่างเหมาะสมมีความสำคัญเพียงใด
สรุป
Aliases เป็นอีกเครื่องมือหนึ่งในกล่องเครื่องมือ Elasticsearch ที่ควรทำให้การจัดการและทำงานกับเคลสเตอร์ของคุณในแต่ละวันง่ายขึ้น โพสต์นี้ไม่ได้ครอบคลุมทุกอย่าง แต่ควรให้คุณมีแนวคิดว่าที่ไหนและอย่างไรที่คุณสามารถใช้ aliases ในการติดตั้ง Elasticsearch ของคุณได้
คุณสามารถตั้งค่า Alias Curator task ผ่าน ObjectRocket ได้อย่างไร?
ในขณะที่เคลสเตอร์ Elasticsearch ของเรารองรับ aliases แล้ว ฟีเจอร์ Alias Curator task ใหม่ทำให้การตั้งค่าการบำรุงรักษา aliases แบบสม่ำเสมอเป็นเรื่องง่าย โดยให้คุณระบุตัวกรองเพื่อเพิ่มหรือลบดัชนีจาก alias ในช่วงเวลาประจำตามเกณฑ์ของคุณ
เพื่อแสดงตัวอย่าง เรามาใช้ตัวอย่าง alias lastSevenDays ซึ่งมีการอ้างอิง Elasticsearch Curator แล้ว เพื่อให้ง่าย เราปล่อยให้การรันครั้งแรกของ Curator task ตั้งค่า Alias ให้เรา คุณสามารถอ้างอิง aliases ที่มีอยู่ใน Curator task ช่วยให้คุณตั้งค่า alias แยกต่างหากหากคุณต้องการการตั้งค่าที่ปรับแต่งได้มากขึ้น
เพื่อจัดการ alias นี้ คุณควรอัปเดตให้ทันสมัยโดยมีเฉพาะดัชนีที่เข้ากับเกณฑ์อายุที่สร้างขึ้นภายใน 7 วันที่ผ่านมา เริ่มที่หน้ารายละเอียดอินสแตนซ์สำหรับเคลสเตอร์ที่เราต้องการเพิ่ม Alias Curator task:
ตอนนี้ เลือกแท็บ Curator เพื่อดู curator tasks ปัจจุบัน:
ตามที่คุณเห็น เรามี curator tasks อยู่สองสามตัว มาสร้างอีกตัว — ครั้งนี้เป็น Alias Curator task ในการทำเช่นนี้ ให้เลือก Add Task:
ตอนนี้ คุณสามารถเลือกประเภทงาน Alias:
หลังจากตั้งชื่องานของเรา เราต้องระบุชื่อ alias มาใช้ lastSevenDays สำหรับตัวอย่างนี้ คุณยังเห็นตัวเลือกสองตัว: Add และ Remove พวกมันช่วยให้คุณระบุตัวกรองสำหรับดัชนีที่คุณต้องการเพิ่มหรือลบจาก alias สำหรับ lastSevenDays เราจะเพิ่มดัชนีบางส่วนและลบบางส่วน ดังนั้น ให้เลือกทั้งสอง:
ตัวกรองที่ต้องการเพิ่มดัชนีทั้งหมดที่ใหม่กว่า 7 วัน และลบดัชนีที่เก่ากว่า 7 วัน หลังจากคุณกรอกแล้ว ดัชนีจะมีลักษณะคล้ายตัวอย่างต่อไปนี้:
เราสามารถทิ้งไว้ที่ช่วงเวลาเริ่มต้น (ทุก 5 นาที) เพื่อระบุว่าเราต้องการให้ task นี้รันเป็นประจำเพื่อให้ Elasticsearch Alias ของเราทันสมัย เลือก Save Task และเสร็จแล้ว! ตอนนี้ task จะรันทุก 5 นาทีเพื่อให้ Elasticsearch Alias ทันสมัย
เรียนรู้เพิ่มเติมเกี่ยวกับบริการ DBA ของ Rackspace
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม คุณยังสามารถคลิก Sales Chat เพื่อแชททันทีและเริ่มสนทนาได้