Panduan migrasi pesaing
Migrasikan dari HAProxy ke Webship tanpa cutover buta.
Pindahkan frontend HTTP, backend, pemeriksaan kesehatan, penyeimbangan, batas waktu, dan penanganan sertifikat ke Webship sambil mempertahankan jalur rollback yang cepat.
Tentukan batas migrasi sebelum mengubah lalu lintas.
Mulailah dengan memindahkan hanya perilaku yang dapat direproduksi dan divalidasi Webship. Biarkan autentikasi aplikasi, penemuan layanan, skrip, dan aturan cache khusus tetap di asal yang ada sampai penggantiannya lulus pengujian mirip produksi.
Terjemahkan jalur produksi terkecil terlebih dahulu.
Fragmen sumber mengidentifikasi konsep migrasi; fragmen Webship menunjukkan bentuk target. Ganti domain contoh, alamat, sertifikat, batas, dan path kesehatan dengan nilai yang telah divalidasi untuk lingkungan Anda.
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 checklisten = "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 = 30000Peta konsep, bukan sintaks.
Petunjuk teknis tidak selalu cocok satu per satu. Gunakan tabel ini untuk menemukan area konfigurasi Webship yang setara, lalu validasi konfigurasi efektif dan perilaku runtime.
| Konsep atau arahan saat ini | Target konfigurasi Webship |
|---|---|
listener / frontend | listen + [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 |
Gunakan cutover lima langkah yang dapat dibalik.
Pertahankan pendengar lama siap sampai Webship telah melewati gerbang korektansi, kapasitas, keamanan, observabilitas, dan pemulihan pada lalu lintas representatif.
- 1
Perilaku observasi inventaris
Catat listener, domain, rute, upstream, sertifikat, rewrite, autentikasi, aturan cache, probe kesehatan, batasan, dan integrasi operasional.
- 2
Terjemahkan satu batas
Pindahkan satu host atau rute ke TOML yang ketat. Pertahankan modul spesifik vendor dan logika aplikasi di belakang Webship hingga pengganti terpisah terbukti.
- 3
Validasi secara offline dan lokal
Jalankan --check-config dan --print-effective-config, periksa hasil yang disunting, periksa kesehatan secara lokal, dan jalankan TLS melalui TCP dan UDP ketika HTTP/3 diaktifkan.
- 4
Lalu lintas nyata canary
Kirim irisan lalu lintas kecil yang dapat diamati ke Webship. Bandingkan kode status, header, isi, latensi, kesehatan upstream, perilaku cache, log, dan keputusan keamanan.
- 5
Promosikan dengan rollback siap
Tingkatkan lalu lintas pada tahap yang diukur. Pertahankan target sebelumnya dalam kondisi sehat dan segera dapat dirutekan hingga jendela observasi yang disepakati dan pintu beban terpenuhi.
Validasi terlebih dahulu. Kembalikan dengan routing, bukan dengan mengedit langsung.
Validasi file kandidat, periksa konfigurasi efektif yang disunting, dan uji pendengar pribadi sebelum mengubah lalu lintas. Pertahankan file biner lama, konfigurasi, pendengar, serta target DNS atau load-balancer sampai jendela observasi ditutup.
/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