ปัญหาหลักของการนำ Elasticsearch ไปใช้งานบน production server
นั่นก็คือ เราจะต้องทำการปรับแต่งค่า หรือ configuration อะไรกันบ้าง ?
ดังนั้น เรามาตรวจสอบด้วย checklist ดังนี้กันหน่อย
เพื่อทำให้เรา และ ระบบมั่นใจนะครับ
1. ควรใช้ Software ตัวล่าสุด ตรวจสอบซะ
2. มาดู Configuration ของ Elasticsearch กันบ้าง
- ชื่อ cluster ต้องไม่ใช่ elasticsearch
- ชื่อ node ควรเป็นชื่อที่มีความหมาย ไม่ใช่ค่า default นะ
- ทำการกำหนด data path สำหรับเก็บข้อมูลอย่างชัดเจน
- กำหนดให้ Elasticsearch server ทำการ start ตอนที่ OS เริ่มต้นทำงาน
- ใช้ Unicast แทน Multicast ด้วยนะ อย่าลืมเด็ดขาด
- อย่าลืมกำหนดค่าของ gateway.recover_after_nodes ให้มีค่าเท่ากับจำนวน node ใน cluster ด้วย ไม่เช่นนั้นเมื่อ restart cluster แล้วอาจจะทำให้การกระจายข้อมูลผิดพลาดได้
- อย่าลืมกำหนดค่าของ discovery.zen.minimum_master_nodes ให้มีค่าเท่ากับ (node/2) +1 โดยที่ n คือจำนวน node เพื่อลดภาระการทำงานของ master node ลงไป
- เรื่องการ backup ก็ห้ามลืม ดูวิธีการได้ที่นี่ Backup your cluster
3. เนื่องจาก Elasticsearch มันทำงานบน JVM ดังนั้นเรื่องขนาดของ HEAP จึงสำคัญมาก
- ES_HEAP_SIZE กำหนดไว้ประมาณ 50% ของ memory ที่ว่าง
- ES_HEAP_SIZE ต้องมีขนาดน้อยกว่าเท่ากับ 32 GB นะ
- ให้ monitoring การทำงานของ Garbage collector ด้วยล่ะ ถ้าใช้ memory มากกว่า 90% อยู่ตลอดเวลาควรเพิ่ม node หรือ memory ได้แล้ว
4. การ Configuration OS
- เนื่องจาก Elasticsearch ทำการเปิดไฟล์เป็นจำนวนมาก ดังนั้นควรเพิ่มจำนวนในแต่ละ os ให้เพียงพอด้วย
- ไม่ควรให้เครื่อง server เข้าถึงจากโลกข้างนอกได้ ดังนั้นให้เป็นเครื่องใน private zone เถอะนะ
5. เรื่องของ Hardware ที่ใช้งาน
- ให้จัดเต็มเรื่อง CPU และ Memory
- ใช้ SSD Disk เลยนะ ถ้าเป็นไปได้
- ใช้ Network ที่มีค่า latency ต่ำแบบสุด ๆ
6. REST APIs สำหรับการ monitoring cluster ที่ควรรู้ไว้บ้าง
- /_status สำหรับดูข้อมูลของ index
- /_nodes สำหรับดูข้อมูลของ node ใน cluster
- /_stats สำหรับดูสถิติการใช้งานทั้งหมด เช่น การอ่าน การเขียนข้อมูล
- /_cluster/health สำหรับดูข้อมูล และ สถานะของ cluster
ดังนั้น ถ้าใครนำ Elasticsearch ไปใช้งานบน production server
ก็ลองนำ checklist ไปตรวจสอบดูกัน
ว่าต้องปรับปรุง และ แก้ไขอะไรบ้าง
ถ้าใครมีเทคนิคดี ๆ ก็แนะนำมาได้นะครับ