Rumah >pembangunan bahagian belakang >tutorial php >Penjadualan tugas mengimbangi beban Nginx dan pemeriksaan kesihatan

Penjadualan tugas mengimbangi beban Nginx dan pemeriksaan kesihatan

WBOY
WBOYasal
2023-10-15 15:27:191193semak imbas

Penjadualan tugas mengimbangi beban Nginx dan pemeriksaan kesihatan

Nginx load balancing penjadualan tugas dan pemeriksaan kesihatan

Pengenalan:
Dalam aplikasi Internet moden, selaras prestasi tinggi dan stabil sering menjadi pertimbangan penting. Sebagai pelayan HTTP berprestasi tinggi dan pelayan proksi terbalik, Nginx bukan sahaja menyediakan perkhidmatan fail statik, ia juga boleh digunakan untuk mengimbangi beban dan mengagihkan permintaan kepada berbilang pelayan back-end. Artikel ini akan membincangkan kaedah pelaksanaan penjadualan tugas dan pemeriksaan kesihatan pengimbangan beban Nginx, dan memberikan contoh kod khusus.

Penjadualan Tugas:
Penjadualan tugas mengimbangi beban Nginx merujuk kepada pengagihan permintaan kepada pelayan bahagian belakang yang berbeza berdasarkan algoritma penjadualan yang berbeza. Algoritma penjadualan yang biasa digunakan termasuk pengundian, undian berwajaran, cincang IP, dsb. Berikut ialah contoh konfigurasi menggunakan Nginx:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

Dalam konfigurasi di atas, kumpulan pengimbangan beban belakang bernama backend ditakrifkan, yang merangkumi tiga pelayan backend. Dalam blok server, minta proxy_pass ke backend untuk melaksanakan algoritma penjadualan undian yang mudah. backend的负载均衡后端组,包含了三个后端服务器。在server块中,将请求proxy_passbackend上,即可实现简单的轮询调度算法。

健康检查:
除了任务调度,健康检查也是负载均衡中一个重要的功能。通过定期检查后端服务器的健康状况,Nginx可以及时剔除故障服务器,保证系统的可用性。以下为使用Nginx的健康检查配置示例:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;

        check interval=3000 rise=2 fall=3 timeout=1000;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

上述配置中,通过在upstream块中添加check参数,可以启用健康检查功能。其中,interval表示检查的时间间隔,rise表示连续几次检查成功后认为服务器健康,fall表示连续几次检查失败后认为服务器不健康,timeout表示每次检查的超时时间。

代码示例:
在Nginx配置中,除了上述的任务调度和健康检查配置,我们还可以通过Lua脚本自定义更复杂的调度算法和健康检查逻辑。以下为使用Lua脚本实现加权轮询调度算法和自定义健康检查的代码示例:

http {
    upstream backend {
        server 10.0.0.1 weight=3;
        server 10.0.0.2 weight=2;
        server 10.0.0.3 weight=1;

        check interval=3000 rise=2 fall=3 timeout=1000 fail_timeout=10s;
        check_http_send "GET /health HTTP/1.0

";
        check_http_expect_alive http_2xx http_3xx;
    }

    server {
        listen 80;

        location / {
            access_by_lua_block {
                -- 加权轮询调度算法
                local peer = ngx.shared.backend:get("current_peer")
                if not peer then
                    peer = "1"
                    ngx.shared.backend:set("current_peer", peer)
                end
                ngx.var.proxy_pass = "http://backend" .. peer
                ngx.shared.backend:incr("current_peer", 1, 1)

                -- 自定义健康检查
                local status = ngx.ctx.balancer_address.status
                if status ~= ngx_balancer.BALANCER_STATUS_OK then
                    ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
                end
            }
            proxy_pass http://backend;
        }
    }
}

上述代码示例中,使用了Lua脚本实现了加权轮询的调度算法。同时,借助ngx.shared实现了全局变量的维护,用于记录当前调度的后端服务器。另外,在access_by_lua_block中,通过检查ngx.ctx.balancer_address.status

Pemeriksaan kesihatan:

Selain penjadualan tugas, pemeriksaan kesihatan juga merupakan fungsi penting dalam pengimbangan beban. Dengan kerap menyemak status kesihatan pelayan bahagian belakang, Nginx boleh menghapuskan pelayan yang rosak tepat pada masanya untuk memastikan ketersediaan sistem. Berikut ialah contoh konfigurasi pemeriksaan kesihatan menggunakan Nginx:
rrreee

Dalam konfigurasi di atas, pemeriksaan kesihatan boleh didayakan dengan menambahkan parameter check dalam upstream Fungsi blok. Antaranya, <code>interval menunjukkan selang masa semakan, naik menunjukkan bahawa pelayan dianggap sihat selepas beberapa semakan berjaya berturut-turut dan jatuh menunjukkan bahawa selepas beberapa semakan gagal berturut-turut, Pelayan dianggap tidak sihat masa tamat menunjukkan tamat masa untuk setiap semakan. #🎜🎜##🎜🎜#Contoh kod: #🎜🎜#Dalam konfigurasi Nginx, sebagai tambahan kepada penjadualan tugas dan konfigurasi pemeriksaan kesihatan di atas, kami juga boleh menyesuaikan algoritma penjadualan dan logik pemeriksaan kesihatan yang lebih kompleks melalui skrip Lua. Berikut ialah contoh kod yang menggunakan skrip Lua untuk melaksanakan algoritma penjadualan undian berwajaran dan semakan kesihatan tersuai: #🎜🎜#rrreee#🎜🎜#Dalam contoh kod di atas, skrip Lua digunakan untuk melaksanakan algoritma penjadualan undian berwajaran. Pada masa yang sama, pembolehubah global dikekalkan dengan bantuan ngx.shared, yang digunakan untuk merekod pelayan back-end yang dijadualkan pada masa ini. Selain itu, dalam access_by_lua_block, logik pemeriksaan kesihatan disesuaikan dengan menyemak nilai ngx.ctx.balancer_address.status. #🎜🎜##🎜🎜#Kesimpulan: #🎜🎜#Penjadualan tugas mengimbangi beban Nginx dan pemeriksaan kesihatan adalah salah satu faktor utama untuk mencapai keselarasan yang tinggi dan kestabilan prestasi. Melalui algoritma penjadualan tugas yang munasabah dan strategi pemeriksaan kesihatan, kami boleh meningkatkan prestasi dan kebolehpercayaan sistem. Artikel ini memperkenalkan konsep asas penjadualan tugas mengimbangi beban Nginx dan pemeriksaan kesihatan, dan memberikan contoh kod khusus menggunakan fail konfigurasi Nginx dan skrip Lua boleh dilaraskan dan dikembangkan mengikut keperluan mereka sendiri. Saya harap ia akan memberi inspirasi dan berguna kepada pembaca. #🎜🎜#

Atas ialah kandungan terperinci Penjadualan tugas mengimbangi beban Nginx dan pemeriksaan kesihatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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