Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana Nginx melaksanakan pengimbangan beban

Bagaimana Nginx melaksanakan pengimbangan beban

WBOY
WBOYke hadapan
2023-05-11 20:07:044405semak imbas

    1. Pengenalan kepada Nginx

    Nginx ialah pelayan proksi terbalik dan Http berprestasi tinggi, dan juga IMAP/POP3 /SMTP server (proksi e-mel), salah satu tujuan terawal membangunkan produk ini juga sebagai pelayan proksi mel. Ia digunakan secara meluas dalam pelbagai penggunaan pengeluaran kerana kestabilannya, set ciri yang kaya, fail konfigurasi sampel, penggunaan sumber sistem yang rendah dan prestasi serentak yang tinggi. Selain itu, nginx melaksanakan pemultipleksan I/O berdasarkan model dipacu peristiwa (epoll), dan memproses permintaan dalam cara tak segerak dan tidak menyekat. Dalam kes konkurensi sambungan tinggi, Nginx adalah alternatif yang baik kepada pelayan Apache. Dan mengapa kita harus memilih Nginx?

    2. Ciri Nginx

    • Keselarasan tinggi dan prestasi tinggi; sehari) Lari);

    • Skala yang kuat (reka bentuk yang sangat modular, menambah modul dengan lancar); , Nginx menggunakan sumber yang lebih sedikit dan menyokong lebih banyak sambungan serentak;

    • Pemasangan Nginx sangat mudah, fail konfigurasi sangat ringkas (ia juga boleh menyokong sintaks perl), dan terdapat sedikit pepijat; >Memproses fail statik dan mengindeks Fail dan pengindeksan automatik; Menyokong penggunaan panas (boleh Menaik taraf nginx tanpa menghentikan pelayan).

    • Inilah sebab mengapa anda harus memilih Nginx. Dan fungsi dan ciri Nginx tidak terhad kepada ini di atas hanyalah senarai ringkas beberapa fungsi biasa.
    • 3. Nginx load balancing

    • Dalam pengeluaran sebenar kami, kuasa pemprosesan dan ruang storan pelayan adalah terhad -skala Setakat laman web berkenaan, tidak kira betapa hebatnya pelayan itu, ia tidak dapat memenuhi pertumbuhan berterusan keperluan perniagaan laman web tersebut. Dalam kes ini, pendekatan yang lebih sesuai ialah menambah pelayan untuk berkongsi tekanan akses dan storan pelayan asal. Sebenarnya, inilah yang kami panggil
    • Pengimbangan Beban

      Sebagai pelayan pengimbangan beban, Nginx menggunakan proksi terbalik untuk memuatkan baki pelayan bahagian belakang. Mula-mula, mari bercakap tentang strategi pengimbangan beban Nginx dan algoritma pengimbangan beban.

    • 3.1 Memahami modul huluan
    • huluan Modul ini menulis satu set alamat pelayan proksi (iaitu, memilih pelayan daripada senarai pelayan bahagian belakang yang ditentukan untuk menerima permintaan pengguna), dan kemudian mengkonfigurasi algoritma seimbang beban. Mari kita lihat contoh pengimbangan beban paling asas:

      upstream test { 
            server 10.20.151.114:80;
            server 10.20.151.115:80;
      }
      server {
            ....
            location / {         
                   proxy_pass  http://test;     --请求转向 test 定义的服务器列表         
            }
    • 3.2 Strategi pengimbangan beban Nginx
    • (1) Undian

    • Kaedah konfigurasi paling asas, contoh di atas ialah round robin Kaedah pertanyaan ialah strategi imbangan beban lalai bagi modul huluan. Setiap permintaan diedarkan ke pelayan bahagian belakang yang berbeza satu demi satu dalam susunan kronologi.
    • upstream test { 
            server 10.20.151.114:80; weight=1;
            server 10.20.151.115:80; weight=2;
      }

      (2) ip_hash

    • Setiap permintaan diperuntukkan mengikut hasil cincangan IP capaian, dan klien IP yang sama sentiasa mengakses pelayan bahagian belakang. Ia boleh memastikan bahawa permintaan daripada IP yang sama dihantar ke mesin tetap, yang boleh menyelesaikan masalah sesi.
    upstream test { 
    	  ip_hash;  --同一个IP客户端固定访问一个后端服务器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }
    (3) url_hash

    Edarkan permintaan mengikut hasil cincangan url yang diakses, supaya setiap url dihalakan ke pelayan hujung belakang yang sama. Setelah sumber dicache, ia boleh dibaca daripada cache apabila permintaan diterima.
    upstream test { 
    	  hash $request_uri;  --实现每个url定向到同一个后端服务器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (4) least_conn

    Majukan permintaan ke pelayan bahagian belakang dengan sambungan yang lebih sedikit. Algoritma pengundian memajukan permintaan ke setiap bahagian belakang secara sama rata supaya beban mereka adalah kira-kira sama, bagaimanapun, sesetengah permintaan mengambil masa yang lama, yang akan menyebabkan bahagian belakang di mana ia berada mempunyai beban yang lebih tinggi. Dalam kes ini, least_conn boleh mencapai kesan pengimbangan beban yang lebih baik.

    upstream test { 
    	  least_conn;  --把请求转发给连接数较少的后端服务器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }
    (5) berat

    Kaedah timbangan menentukan kebarangkalian pengundian berdasarkan strategi pengundian.

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;  --轮询的几率相对上一条要大
    }

    (6) adil

    Algoritma ini boleh melakukan pengimbangan beban secara bijak berdasarkan saiz halaman dan masa pemuatan, iaitu, memperuntukkan permintaan berdasarkan masa tindak balas pelayan bahagian belakang, dengan peruntukan keutamaan masa tindak balas yang singkat.

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
          fair;  --实现响应时间短的优先分配
    }

    parameter status konfigurasi pengimbangan beban nginx

    turun: Menunjukkan bahawa pelayan semasa tidak mengambil bahagian dalam pengimbangan beban buat sementara waktu.

    sandaran: Mesin sandaran tersimpan. Mesin sandaran akan diminta apabila semua mesin bukan sandaran lain gagal atau sibuk, jadi mesin ini mempunyai tekanan paling sedikit.

    max_fails: Bilangan kegagalan permintaan yang dibenarkan, lalai ialah 1. Apabila bilangan kali maksimum melebihi, ralat yang ditakrifkan oleh modul proxy_next_upstream dikembalikan.

    fail_timeout: Selepas mengalami max_fails failures, unit masa untuk menggantung perkhidmatan ialah saat. max_fails boleh digunakan bersama fail_timeout.

    Nginx可分为二层、三层、四层、七层负载均衡。 所谓的二层就是基于MAC地址的负载均衡, 三层就是基于IP地址的负载均衡,四层就是基于IP+端口的负载均衡,七层就是基于URL等应用层信息的负载均衡。因篇幅较长这里不再做具体的介绍,有兴趣的可自行百度。这里以七层负载均衡来做实例。

    3.3 Nginx负载均衡实例

    环境准备:准备3台Nginx服务器,一台作为负载均衡服务器,其它两台作为后端服务器。

    10.20.151.240 ----proxy_server(负载均衡服务器)

    10.20.151.112 ----server1(后端服务器1)

    10.20.151.113 ----server2(后端服务器2)

    (1)负载均衡服务器配置

    vim /etc/nginx/nginx.conf        --配置主配置文件
    vim /etc/nginx/conf.d/test.conf  --配置子配置文件

    Bagaimana Nginx melaksanakan pengimbangan beban

    Bagaimana Nginx melaksanakan pengimbangan beban

    (2)后端服务器配置

    vim /usr/local/nginx/conf/nginx.conf    --修改配置文件
    vim /usr/local/nginx/html/index.html    --添加测试数据

    Bagaimana Nginx melaksanakan pengimbangan beban

    Bagaimana Nginx melaksanakan pengimbangan beban

    (3)负载均衡测试

    在浏览器端访问http://10.20.151.240/,在实际生产中,这两个页面返回的结果是一样的,这里是为了测试效果,所以返回了不同的内容。而为什么刷新后又会返回不同结果呢?那是因为负载均衡默认的均衡策略(或算法)是轮询,所以每刷新一次就会从不同的后端服务器返回不同的请求结果,减轻单个后端服务器的访问量,提升客户端的访问效率,从而达到负载均衡的效果。

    Bagaimana Nginx melaksanakan pengimbangan beban

    Bagaimana Nginx melaksanakan pengimbangan beban

    当我添加权重(weight)时

    Bagaimana Nginx melaksanakan pengimbangan beban

    再次访问http://10.20.151.240/

    Bagaimana Nginx melaksanakan pengimbangan beban

    Bagaimana Nginx melaksanakan pengimbangan beban

    加权重和没加权重有什么区别呢?在实际生产中,我们一般会将配置较高的服务器的权重设置高一点,其实就是客户端在访问时,权重较高的服务器会被多次请求,这样能减轻配置较低的服务器的请求量,从而更好的实现负载均衡。

    当我添加backup状态参数时

    Bagaimana Nginx melaksanakan pengimbangan beban

    再次访问http://10.20.151.240/

    Bagaimana Nginx melaksanakan pengimbangan beban

    此时我故意停掉第一台后端服务器,继续访问http://10.20.151.240/

    Bagaimana Nginx melaksanakan pengimbangan beban

    当我给113这台后端服务器添加backup后,它就会作为热备服务器,添加的主要目的就是当我其他后端服务器都宕机的情况下,我的热备服务器还能继续提供同样的服务(注意:在其他后端服务器还未宕机之前,该热备服务器是不工作的)。因此负载均衡不仅能达到各个后端服务器负载的均衡,同时通过配置相关转态参数还能保证客户端请求时不造成服务器宕机的情况,保证了后端服务器的稳定性。其他状态参数这里我不再做演示(因为配置方式都一样)。

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

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam