Bagaimana Nginx menggunakan ngx_http_upstream_module untuk melaksanakan fungsi pengimbangan beban

WBOY
Lepaskan: 2023-05-18 19:01:24
ke hadapan
770 orang telah melayarinya

    Pengenalan kepada Pengimbangan Beban

    Apakah itu Pengimbangan Beban

    Imbangan Beban bermaksud membahagikan beban (tugas kerja, Permintaan akses) adalah seimbang dan diedarkan kepada berbilang unit operasi (pelayan, komponen) untuk pelaksanaan.

    Mengapa pengimbangan beban diperlukan

    Apabila pelayan web tunggal menghadap pengguna secara langsung, ia mungkin membawa sejumlah besar permintaan serentak Satu pelayan mungkin sukar untuk dimuatkan pelayan web untuk membentuk Kluster menggunakan fungsi pengimbangan beban Nginx untuk mengedarkan permintaan kepada pelayan bahagian belakang yang berbeza untuk mencapai pengagihan trafik beban, meningkatkan prestasi keseluruhan dan keupayaan pemulihan bencana sistem.

    • Apakah perbezaan antara pengimbangan beban dan proksi

    Proksi ialah proksi untuk pelayan menjadualkan berdasarkan URI dan jadual ke aplikasi nod dengan fungsi berbeza

    Pengimbangan beban adalah untuk memproksi permintaan klien kepada set kumpulan sumber huluan melalui proxy_pass

    • Untuk mencapai senario pengimbangan beban

    Untuk mencapai beban Fungsi pengimbangan memerlukan penggunaan dua modul:

    • proxy_pass: modul proksi

    • upstream: sumber maya pool

    Contoh: Demonstrasi pengimbangan beban rasmi

    upstream backend {
        server backend1.example.com       weight=5;
        server backend2.example.com:8080;
        server unix:/tmp/backend3;
    
        server backup1.example.com:8080   backup;
        server backup2.example.com:8080   backup;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }
    Salin selepas log masuk

    Contoh: Lengkapkan contoh kecil sendiri

    upstream node {
        server 192.168.10.3:80;
        server 192.168.10.4:80;
    }
    server {
        listen 80;
        server_name www.yyang.com;
        location / {
            proxy_pass http://node;
            include prxoy_params;
        }
    }
    Salin selepas log masuk

    Algoritma penjadualan pengimbangan beban

    Penjadualan pengundian

    diperuntukkan kepada nod hujung belakang yang berbeza satu demi satu mengikut tertib, yang juga merupakan algoritma lalai. (Ringkasnya, ia adalah 1:1:1)

    Tinjauan berwajaran
    Memandangkan prestasi berbeza pelayan yang berbeza, pemberat yang berbeza diberikan kepada nod supaya mereka boleh menerima sepadan Bilangan permintaan berat

    server 192.168.10.3:80 weight=3;
    server 192.168.10.4:80 weight=1;
    Salin selepas log masuk

    Contoh di atas bermakna setiap 4 permintaan akan diperuntukkan kepada tiga permintaan untuk 10.3 dan satu untuk 10.4, dan kitaran diteruskan.

    ip_hash

    Menurut IP yang diminta oleh pengguna, lakukan operasi cincang pada IP dan tetapkan permintaan itu kepada nod belakang khusus untuk pemprosesan berasaskan pada nilai yang dikira.

    Julat nilai ialah tiga 8 bit pertama alamat ipv4 atau keseluruhan alamat ipv6 sebagai kunci cincang, memastikan bahawa IP daripada satu pelanggan sentiasa dihantar ke pelayan yang sama, melainkan pelayan kedua tidak tersedia. Ringkasnya, tiga set nombor pertama 172.16.20.1 dan 172.16.20.2 adalah sama (semua 172.16.20)

    formula operasi ip_hash: hash (ip) %node_counts=index

    Masalah yang disebabkan oleh ip_hash:
    Sebilangan besar permintaan untuk IP yang sama akan menyebabkan trafik yang berlebihan pada nod
    Jika nod di luar talian buat sementara waktu, nilai cincang akan dikira semula nyatakan

    Contoh : Ambil perhatian bahawa ip_hash dan berat tidak boleh digunakan pada masa yang sama

    ip_hash;
    server 192.168.10.3:80;
    server 192.168.10.4:80;
    Salin selepas log masuk

    Hash yang konsisten

    Untuk mengelakkan masalah di atas, pencincangan yang konsisten telah dilahirkan, menggunakan kaedah modulo, tetapi ia tidak betul Bilangan nod pelayan adalah modulo, tetapi modulo 2 dinaikkan kepada kuasa ke-32 Nilai fungsi cincang ialah 0~2^32-1. (Membentuk gelang maya, permintaan pengguna akan dihantar ke nod bersebelahan mengikut arah jam)
    Terdapat masalah: jika terdapat kurang nod hujung belakang, ia boleh menyebabkan data condong, jadi pencincangan yang konsisten memperkenalkan mekanisme nod maya, iaitu , untuk Setiap pelayan mengira berbilang cincangan dan meletakkan nod maya pada setiap lokasi hasil yang dikira.
    Apakah yang perlu kita lakukan jika kita ingin menggunakan ip_hash, tetapi formula pengiraan menggunakan cincang yang konsisten?

    hash $remote_addr consistent;
    server 192.168.10.3:80;
    server 192.168.10.4:80;
    Salin selepas log masuk

    url_hash

    Berbilang cincang berdasarkan url pengguna dan tetapkan permintaan kepada pelayan bahagian belakang tertentu berdasarkan nilai operasi.

    1. Pengguna meminta pengimbangan beban nginx Melalui algoritma url, permintaan dijadualkan untuk cache1
    2. Jika cache1 tidak mempunyai data, ia akan memperoleh data dari bahagian belakang, mengembalikan data, dan cache data
    3 Apabila Apabila pengguna lain mengakses URL yang sama, penjadual masih akan menjadualkan ke nod cache1
    4.cache1 akan terus mengembalikan data kepada

    hash $request_uri consistent;
    server 192.168.10.3:80;
    server 192.168.10.4:80;
    Salin selepas log masuk

    least_conn

    pelayan mana Jika bilangan sambungan paling sedikit, permintaan akan dihantar ke pelayan ini

    least_conn;
    server 192.168.10.3:80;
    server 192.168.10.4:80;
    Salin selepas log masuk

    Status nod hujung belakang pengimbangan beban

    turun

    Tandai nod pelayan sebagai status tidak tersedia, biasanya digunakan untuk penyelenggaraan penutupan.

    server 192.168.10.3:80 down;
    server 192.168.10.4:80;
    Salin selepas log masuk

    sandaran

    Nod sandaran, nod ini tidak akan dijadualkan dalam keadaan biasa apabila semua nod yang berfungsi normal tidak tersedia, nod ini akan didayakan; pulih, nod ini Nod akan terus kembali ke status siap sedia.

    server 192.168.10.3:80;
    server 192.168.10.4:80;
    server 192.168.10.5:80 backup;
    Salin selepas log masuk

    max_conns

    digunakan untuk mengehadkan bilangan maksimum sambungan TCP yang diterima oleh setiap nod hujung belakang Jika melebihi had, ralat akan dilemparkan.

    server 192.168.10.3:80 max_conns=10;
    server 192.168.10.4:80 max_conns=10;
    Salin selepas log masuk

    Seorang boleh menyambung 10. Dua boleh menyambung 20. Jika melebihi 20, ralat akan berlaku.

    keeplived

    Aktifkan cache dengan pelayan bahagian belakang, yang merupakan pautan panjang, untuk meningkatkan daya pemprosesan tapak web.
    Fungsi ini tidak didayakan secara lalai Apabila terdapat permintaan, sambungan akan diwujudkan, dikekalkan dan ditutup, jadi akan ada penggunaan rangkaian tetapi jika semua sambungan dicache, sumber sistem lain akan diduduki apabila sambungan melahu, jadi Parameter keepalived boleh digunakan.

    server 192.168.10.3:80;
    server 192.168.10.4:80;
    
    keepalived 32;   # 最大空闲连接数的个数
    keepalived_timeout 100s; # 空闲连接的超时时间
    
    # 需要配合以下两个参数使用
    
    proxy_http_version 1.1;
    proxy_set_header connection "";
    Salin selepas log masuk

    max_fails dan fail_timeout

    max_fails=2:服务器通信失败两次,认为服务器不可用
    fail_timeout=5s:服务器通信失败后,每5秒探测一次服务器是否恢复正常。
    在fail_timeout设定时间内,与服务器连接失败次数达到max_fails数量,则认为服务器不可用。
    如果不设置的话默认是探测一次,间隔10s。

    server 192.168.10.3:80 max_fails=2 fail_timeout=5s;
    server 192.168.10.4:80 max_fails=2 fail_timeout=5s;
    Salin selepas log masuk

    Atas ialah kandungan terperinci Bagaimana Nginx menggunakan ngx_http_upstream_module untuk melaksanakan fungsi pengimbangan beban. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!