เผยแพร่ครั้งแรกเมื่อวันที่ 10 พฤศจิกายน 2560 ที่ ObjectRocket.com/blog
เนื่องจากคลัสเตอร์ Rackspace ObjectRocket for Elasticsearch® ทุกตัวมาพร้อม multiple client nodes คำถามทั่วไปที่เราได้จากลูกค้าคือทำไมเราไม่จัดหา load balancer เพื่อเชื่อมต่อกับทั้งหมด
ขึ้นอยู่กับความชอบของคุณ คุณอาจมองการเชื่อมต่อเดียวไปยังโหนดเดียวเป็นจุดล้มเหลวของคลัสเตอร์ Load balancer สามารถ มีประสิทธิภาพในการจัดการ pool ของการเชื่อมต่อ อย่างไรก็ตาม Elasticsearch ออกแบบมาให้ทำงานโดยไม่ต้อง load balancer ในบล็อกบล็อกนี้ เราจะกล่าวถึงวิธีใช้ clients ทั้งหมดที่เราให้ใน Elasticsearch
การตั้งค่า Python
มาดูการตั้งค่า Python®:
from elasticsearch import Elasticsearch Import certifi es = Elasticsearch(['dc-port-0.es.objectrocket.com', 'dc-port-1.es.objectrocket.com', 'dc-port-2.es.objectrocket.com', 'dc-port-3.es.objectrocket.com'], http_auth=('YOUR_USERNAME', 'YOUR_PASSWORD'), port=12345, use_ssl=True, verify_certs=True, ca_certs=certifi.where(), )
อาร์กิวเมนต์แรกแสดงให้เห็นว่า Elasticsearch ยอมรับรายการ hosts นั่นหมายความว่า client สามารถดำเนินการตั้งค่าต่อเองได้ การตั้งค่าคล้ายกับเครื่องมืออื่นๆ เช่น Beats สคริปต์การตั้งค่าจะคล้ายตัวอย่างต่อไปนี้:
output: elasticsearch: hosts: ["https://dc-port-0.es.objectrocket.com:port", "https://dfw-port-1.es.objectrocket.com:port", "https://dfw-port-2.es.objectrocket.com:port", "https://dfw-port-3.es.objectrocket.com:port"] # HTTP basic auth username: "YOUR_USERNAME" password: "YOUR_PASSWORD"
เครื่องมือและ clients ส่วนใหญ่รองรับ multiple hosts เพื่อทำให้ง่ายสำหรับคุณ เรารวม connection snippets ไว้ใน ObjectRocket UI สำหรับ Python®, Ruby, C#, Java®, Javascript®, Go, Logstash และ Beats เพียงเลือกเทคโนโลยีที่คุณใช้ แล้วคัดลอก snippet พร้อม hostnames ที่填好แล้ว
ทางเลือกสำหรับแอปพลิเคชันที่ไม่รับ multiple hosts
มีแอปพลิเคชันน้อยที่ไม่ทำรายการ hosts ตัวที่โดดเด่นคือ Kibana® ซึ่งยอมรับ single host เท่านั้น เพื่อแก้ปัญหานี้ คุณสามารถใช้ทางเลือกสองทาง
ชี้แต่ละส่วนของแอปไปที่ client ต่างกัน
สำหรับการใช้งานและแอปพลิเคชัน non-mission-critical คุณสามารถชี้ไปที่ single client node ได้ ถ้าแอปพลิเคชันไม่มี request rate สูงมาก single client ควรจัดการโหลดได้ หากคุณมีแอปประเภทนี้หลายตัว ให้ชี้แต่ละตัวไปที่ client ต่างกันเพื่อ balance load
Load balance ท้องถิ่น
ในกรณีน้อยที่ client หรือแอปพลิเคชันไม่รองรับ และคุณต้องการ redundancy ในการเชื่อมต่อ client คุณสามารถตั้งค่า local load-balancing ได้ คุณสามารถทำได้ด้วย nginx®, HAProxy® และอื่นๆ หรือแค่ตั้งค่า local hostname ใน Domain Name System (DNS) ที่ใช้ round-robin ระหว่าง Elasticsearch clients อีกครั้ง เราเห็นกรณีที่จำเป็นน้อยมาก แต่มีโซลูชันพร้อมใช้เมื่อมันเกิดขึ้น
สรุป
เกือบทุกสถานการณ์ที่คุณพบ อนุญาตให้คุณให้รายการ hosts ที่จัดการ balancing ให้คุณ แต่ในกรณีฉุกเฉิน มีตัวอย่างที่ช่วยคุณ load balance ท้องถิ่นได้
เรียนรู้เพิ่มเติมเกี่ยวกับบริการ DBA ของ Rackspace
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม คุณยังสามารถคลิก Sales Chat เพื่อแชททันทีและเริ่มสนทนาได้