← คู่มือการย้ายทั้งหมด

คู่มือการโยกย้ายของคู่แข่ง

ย้ายจาก HAProxy ไปยัง Webship โดยไม่ต้องตัดการใช้งานทันที

ย้าย frontend HTTP, backend, การตรวจสอบสุขภาพ, การกระจายน้ำหนัก, timeout, และการจัดการใบรับรองเข้ามาใน Webship ในขณะที่ยังคงเส้นทาง rollback ที่รวดเร็วไว้

ใช้กับ Webship 1.1.0haproxy.cfg

กำหนดขอบเขตการย้ายก่อนที่จะเปลี่ยนการจราจร

เริ่มต้นด้วยการย้ายเฉพาะพฤติกรรมที่ Webship สามารถสร้างซ้ำและตรวจสอบได้ ปล่อยให้การยืนยันตัวตนของแอปพลิเคชัน, การค้นหาบริการ, สคริปต์ และกฎแคชเฉพาะ อยู่บนต้นทางที่มีอยู่จนกว่าการทดสอบแบบใกล้เคียงการผลิตของพวกมันจะผ่าน

แปลเส้นทางการผลิตที่เล็กที่สุดก่อน

ชิ้นส่วนต้นทางระบุแนวคิดการย้ายข้อมูล; ชิ้นส่วน Webship แสดงรูปร่างของเป้าหมาย แทนที่โดเมน ตัวอย่าง ที่อยู่ ใบรับรอง ขีดจำกัด และเส้นทางสุขภาพด้วยค่าที่ได้รับการตรวจสอบแล้วสำหรับสภาพแวดล้อมของคุณ

การกำหนดค่า HAProxy ตัวอย่าง
frontend https
  bind :443 ssl crt /etc/haproxy/app.pem
  default_backend app
backend app
  balance roundrobin
  server app1 127.0.0.1:8080 check
  server app2 127.0.0.1:8081 check
Webship TOML ที่เทียบเท่า
listen = "0.0.0.0:443"
workers = 4

[reverse_proxy]
enabled = true
connect_timeout_ms = 2000
max_retries = 0

[reverse_proxy.protocols]
h1 = true
h2 = true
h3 = true

[reverse_proxy.tls]
cert = "/etc/letsencrypt/live/app.example.com/fullchain.pem"
key = "/etc/letsencrypt/live/app.example.com/privkey.pem"

[[reverse_proxy.routes]]
domain = "app.example.com"
path_prefix = "/"
upstreams = ["127.0.0.1:8080", "127.0.0.1:8081"]
load_balancing = "weighted-peak-ewma"

[[reverse_proxy.upstreams]]
address = "127.0.0.1:8080"
protocol = "http1"
health_check_path = "/health"
health_check_interval_ms = 5000
health_check_timeout_ms = 1000

[[reverse_proxy.upstreams]]
address = "127.0.0.1:8081"
protocol = "http1"
health_check_path = "/health"
health_check_interval_ms = 5000
health_check_timeout_ms = 1000

[[reverse_proxy.policies]]
name = "default"
hosts = []
path_prefixes = ["/"]
methods = []
max_body_bytes = 1048576
total_timeout_ms = 30000

จับคู่แนวคิด ไม่ใช่ไวยากรณ์

คำสั่งทางเทคนิคไม่ตรงกันเสมอ ใช้ตารางนี้เพื่อหาบริเวณการกำหนดค่า Webship ที่เทียบเท่า แล้วตรวจสอบการกำหนดค่าที่มีผลและพฤติกรรมในเวลารัน

แนวคิดหรือแนวทางปัจจุบันเป้าหมายการกำหนดค่า Webship
listener / frontendlisten + [reverse_proxy.protocols]
host + path matcher[[reverse_proxy.routes]]
backend / cluster / service[[reverse_proxy.upstreams]]
health probe[[reverse_proxy.upstreams]].health_check_*
request limits and timeouts[[reverse_proxy.policies]]
certificate and private key[reverse_proxy.tls] / [[sites]] cert + key

ใช้การเปลี่ยนอย่างห้าขั้นตอนที่สามารถย้อนกลับได้

เก็บผู้ฟังเก่าให้พร้อมจนกว่า Webship จะผ่านเกณฑ์ความถูกต้อง ความจุ ความปลอดภัย การตรวจสอบ และการย้อนกลับบนการจราจรตัวอย่าง

  1. 1

    พฤติกรรมที่สังเกตได้ของสินค้าคงคลัง

    บันทึกผู้ฟัง โดเมน เส้นทาง upstream ใบรับรอง การเขียนซ้ำ การตรวจสอบสิทธิ์ กฎแคช การตรวจสอบสุขภาพ ขีดจำกัด และการบูรณาการเชิงปฏิบัติการ

  2. 2

    แปลงขอบเขตหนึ่ง

    ย้ายโฮสต์หนึ่งตัวหรือเส้นทางเข้าสู่ TOML อย่างเข้มงวด รักษาโมดูลเฉพาะผู้ขายและตรรกะแอปพลิเคชันไว้หลัง Webship จนกว่าการเปลี่ยนทดแทนแยกต่างหากจะได้รับการพิสูจน์แล้ว

  3. 3

    ตรวจสอบแบบออฟไลน์และภายในเครื่อง

    รัน --check-config และ --print-effective-config ตรวจสอบผลที่ถูกลบข้อมูล ตรวจสอบสภาพแวดล้อมในพื้นที่ และใช้งาน TLS ผ่านทั้ง TCP และ UDP เมื่อ HTTP/3 ถูกเปิดใช้งาน

  4. 4

    Canary real traffic

    ส่งส่วนเล็ก ๆ ของการจราจรที่สามารถสังเกตได้ไปยัง Webship เปรียบเทียบรหัสสถานะ ส่วนหัว เนื้อหา ความหน่วง สุขภาพของ upstream พฤติกรรมแคช บันทึก และการตัดสินใจด้านความปลอดภัย

  5. 5

    โปรโมตพร้อมพร้อมสำหรับการย้อนกลับ

    เพิ่มการจราจรในขั้นตอนที่วัดได้ รักษาเป้าหมายก่อนหน้าให้มีสุขภาพดีและสามารถใช้เส้นทางได้ทันทีจนกว่าจะผ่านหน้าต่างการสังเกตและเกตโหลดที่ตกลงกันไว้

ตรวจสอบก่อน ทำการย้อนกลับโดยการกำหนดเส้นทาง ไม่ใช่โดยการแก้ไขสด

ตรวจสอบไฟล์ผู้สมัคร ตรวจสอบการกำหนดค่าที่ถูกแก้ไขแล้ว และตรวจสอบตัวฟังส่วนตัวก่อนเปลี่ยนการรับส่งข้อมูล เก็บไฟล์ไบนารีเก่า การกำหนดค่า ตัวฟัง และเป้าหมาย DNS หรือโหลดบาลานเซอร์จนกว่าหน้าต่างการสังเกตจะปิด

/usr/local/bin/webship --check-config --config /etc/webship/production.toml
/usr/local/bin/webship --print-effective-config --config /etc/webship/production.toml
curl --http3-only --insecure https://127.0.0.1:443/health