วิธีการตั้งค่าการตรวจสอบสุขภาพของ ELB ด้วยแอพพลิเคชั่นหลายตัวที่ทำงานในแต่ละอินสแตนซ์ EC2?


11

ที่ AWS เราต้องการใช้ ELB เพื่อโหลดอินสแตนซ์ EC2 ที่สมดุลซึ่งโฮสต์แอปพลิเคชันหลายรายการ โดยหลักการแล้วเราต้องการตรวจสุขภาพสำหรับการสมัคร

อย่างไรก็ตามขณะนี้ AWS Elastic Load Balancer อนุญาตให้คุณ ping ที่เดียวเพื่อตรวจสุขภาพ

อะไรจะเป็นวิธีที่ดีที่สุดในการใช้การตรวจสุขภาพกับ ELB ที่คำนึงถึงสถานะของแอพพลิเคชั่นหลายตัวที่ปรับใช้ในแต่ละอินสแตนซ์ EC2?


4
วิธีหนึ่งคือการใช้การตรวจสุขภาพของคุณโดยการทำให้สคริปต์คืนสถานะตามการตรวจสอบของทั้งสองแอปพลิเคชัน
นาธาน C

1
ELB เป็นบริการที่มีการจัดการ สร้าง ELB อื่นสำหรับแอปพลิเคชันที่สองด้วยการตรวจสุขภาพของตนเอง ค่าใช้จ่ายส่วนใหญ่จะเป็นแบบต่อคำขอดังนั้นคุณจะต้องเสียค่าใช้จ่ายเกือบเท่ากันในการใช้งาน 2 ELB
Guy

ฉันคิดว่าคำตอบของ @ NathanC เป็นทางออกที่ดีที่สุด ฉันมีกรณีที่คล้ายกันซึ่งหากเงื่อนไขใดในสองเงื่อนไขล้มเหลว การเพิ่ม ELB อีกตัวจะช่วยให้คุณสามารถตรวจสุขภาพอื่นได้ แต่ AFAIK สามารถใช้ ELB เพียงอันเดียวในการกำหนดเส้นทางการจราจร (หรือไม่)
Tom Harrison Jr

@Guy จริงๆแล้วเนื่องจาก ELB- ชั่วโมงถูกเรียกเก็บเงินโดยไม่คำนึงถึงคำขอนั่นคือ ~ 20 USD ต่อเดือน (ขึ้นอยู่กับภูมิภาค) ดังนั้นค่าใช้จ่ายส่วนใหญ่จะเป็นคำขอต่อเมื่อคุณให้บริการมากกว่า 2.5 TB ต่อเดือน ( ที่ $ 0.008 / GB)
Josip Rodin

คำตอบ:


10

นี่คือสองวิธีในการแก้ปัญหานี้

ตัวเลือกแรกคือการเพิ่มการตรวจสอบสุขภาพอีกครั้งในโฮสต์ที่ตรวจสอบความถูกต้องของสุขภาพและส่งคืน HTTP 200s ไปที่ ELB หากตรรกะบอกว่าคุณต้องการให้โฮสต์ออนไลน์ ตรรกะมีขึ้นอยู่กับคุณ ข้อเสียของที่นี่อาจเป็นได้ว่าหากการติดตั้งแอป 2 ประสบความสำเร็จในบางโฮสต์โฮสต์ทั้งหมดจะยังคง 'สุขภาพดี' และได้รับปริมาณการใช้งาน

อีกทางเลือกหนึ่งคือการใช้ ELB เพิ่มเติมสำหรับแต่ละแอปพลิเคชัน คุณสามารถชี้ ELB หลาย ๆ ตัวไปยังอินสแตนซ์ของ EC2 แบ็กเอนด์เดียวกันและค่าใช้จ่ายค่อนข้างน้อยในการทำเช่นนั้น ด้วยวิธีนี้คุณสามารถตรวจสอบสุขภาพต่อแอปพลิเคชันและวางโฮสต์ที่มีปัญหาในระดับต่อแอปพลิเคชันแทนที่จะเป็นวิธีการทั้งหมดหรือไม่มีอะไรเลย

แก้ไข: โปรดทราบว่านี่เป็นคำตอบที่เก่ากว่าและเฉพาะเจาะจงกับ ELB ไม่ใช่ ALB ALB สนับสนุนเป้าหมายที่แยกจากกันบนโฮสต์หนึ่งโดยกำเนิด


7

การใช้หนึ่ง ELB ต่อแอพเป็นวิธีที่จะไปที่นี่

ก่อนอื่นคุณอาจต้องใช้มันหากแต่ละแอปพลิเคชันอยู่ในโดเมนของตัวเองและคุณต้องรองรับ SSL ปัจจุบัน Amazon ELB อนุญาตใบรับรอง SSL เดียวสำหรับแต่ละโดเมนโดยต้องใช้ ELB แยกต่างหากสำหรับแต่ละโดเมนที่เปิดใช้งาน SSL (การรับรอง SSL Wildcard เป็นข้อยกเว้น)

ความท้าทายในที่นี้คือการตรวจสุขภาพของ ELB ไม่สามารถนำไปยังโดเมนเสมือนที่โฮสต์ในอินสแตนซ์ EC2 ได้ในขณะนี้ (ไม่มีส่วนหัว "โฮสต์:" ถูกส่ง) การปิงสุขภาพของ ELB ไปที่โดเมนเริ่มต้นเสมอราวกับว่าคุณได้โหลดที่อยู่ IP สำหรับอินสแตนซ์ EC2 ในเบราว์เซอร์ของคุณแล้ว ดังนั้นกาวบางตัวจำเป็นต้องได้รับการตรวจสอบสุขภาพในโดเมนเริ่มต้นแล้วตอบกลับด้วยสถานะสุขภาพของแอปพลิเคชันเฉพาะ

นี่คือการกำหนดค่าตัวอย่างการทำงานที่สามารถเพิ่มลงในserverคำสั่งNginx มันจะถูกติดตั้งในแต่ละอินสแตนซ์ของ EC2 ที่กำลังโหลดบาลานซ์

    # This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default

    # All AWS Health Checks from the ELBs arrive at the default server.
    # Forward these requests on the appropriate configuration on this host.
    location /health-check/ {
      rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
      # Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
      #  which would not be considered successful.
      proxy_set_header X-Forwarded-Proto 'https';
      proxy_set_header "Host" $domain;
      proxy_pass http://127.0.0.1;
    }

ในการตั้งค่า "ตรวจสุขภาพ" ของ ELB สำหรับ "first-application.com" คุณจะต้องเลือก "HTTP" และพอร์ต 80 และป้อนเส้นทางดังนี้:

/health-check/first-application.com

ด้วยการกำหนดค่า Nginx ข้างต้นทำงานบนโฮสต์คำขอจะได้รับในโดเมนเริ่มต้นและพร็อกซีการตอบสนองจากการกำหนดค่า Nginx บนโฮสต์เดียวกันสำหรับhttps://first-application.com/api/v1/status

ด้วยวิธีนี้ไม่มีการกำหนดค่าต่อแอปใน Nginx ตราบใดที่แต่ละแอพมีชื่อโดเมนที่ไม่ซ้ำกันคุณเพียงแค่ต้องแน่ใจว่าคุณตั้งค่า ELB สำหรับแต่ละแอปอย่างเหมาะสม


3
ขอขอบคุณ. ดูเหมือนว่าจะทำเคล็ดลับแม้ว่า ฉันหวังว่าจะได้ไม่ต้องมียอดโหลดหลายตัว
tourdownunder

6

วันที่ 11 สิงหาคม 2016 Amazon แนะนำแอพลิเคชันโหลด Balancers สิ่งเหล่านี้ช่วยให้คุณระบุกลุ่มเป้าหมายได้หลายกลุ่มโดยแต่ละกลุ่มมีการตรวจสอบสุขภาพของตนเอง ดังนั้นตอนนี้เป็นไปได้โดยใช้ load balancer เดียว!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.