Rumah  >  Artikel  >  Java  >  Bagaimana untuk mencapai pengimbangan beban dengan Nginx+SpringBoot

Bagaimana untuk mencapai pengimbangan beban dengan Nginx+SpringBoot

WBOY
WBOYke hadapan
2023-05-29 17:28:061496semak imbas

Pengenalan kepada pengimbangan beban

Sebelum memperkenalkan pelaksanaan pengimbangan beban nginx, mari kita bercakap secara ringkas tentang klasifikasi pengimbangan beban, yang kebanyakannya dibahagikan kepada pengimbangan beban perkakasan dan pengimbangan beban perisian Pengimbangan beban perkakasan ialah peranti yang menggunakan perisian dan perkakasan khusus vendor akan menyediakan penyelesaian yang lengkap dan matang, seperti f5, yang sangat dipercayai dari segi kestabilan dan keselamatan data, tetapi lebih mahal daripada perisian. pengimbangan beban perisian terutamanya berdasarkan perisian seperti nginx, yang melaksanakan mekanisme pengedaran baris gilir mesej.

Ringkasnya, apa yang dipanggil pengimbangan beban adalah untuk memunggah banyak permintaan dan menetapkannya ke pelayan yang berbeza untuk diproses. Sebagai contoh, saya mempunyai 3 pelayan, iaitu a, b, dan c, dan kemudian menggunakan nginx untuk pengimbangan beban dan strategi pengundian Jika 9 permintaan diterima pada masa ini, 9 permintaan akan diedarkan secara sama rata kepada a dan b. cf pelayan, setiap pelayan mengendalikan 3 permintaan, supaya kita boleh menggunakan ciri-ciri kluster mesin berbilang untuk mengurangkan tekanan pada pelayan tunggal.

Contoh gambarajah nginx yang melaksanakan pengimbangan beban:

Bagaimana untuk mencapai pengimbangan beban dengan Nginx+SpringBoot

Strategi pengimbangan beban

sumber terbuka nginx menyokong empat jenis kaedah Load Balanced, dan nginx plus menambah dua lagi kaedah.

1.round robin:

Tinjau semua permintaan untuk menghantar permintaan, kaedah peruntukan lalai.

contoh konfigurasi nginx.conf:

Nota: Nama domain di atas juga boleh digantikan dengan ip.

2.sambungan paling sedikit:

Hantar permintaan kepada pelayan dengan bilangan sambungan aktif paling sedikit, juga mengambil kira berat pelayan.

contoh konfigurasi nginx.conf:

cincang 3.ip:

Pelayan yang menghantar permintaan ditentukan oleh alamat ip pelanggan. Dalam kes ini, nilai cincang dikira menggunakan tiga bait pertama alamat ipv4 atau keseluruhan alamat ipv6. Kaedah ini menjamin bahawa permintaan daripada alamat yang sama sampai ke pelayan yang sama, melainkan pelayan itu tidak tersedia.

4.cincang generik:

Pelayan yang permintaan dihantar ditentukan oleh kunci yang ditentukan pengguna, yang boleh menjadi rentetan teks, pembolehubah atau gabungan.

5.masa paling sedikit (nginx tambah sahaja)

Untuk setiap permintaan, nginx plus memilih pelayan dengan kependaman purata terendah dan bilangan sambungan aktif yang paling rendah, di mana purata Latensi terendah dikira berdasarkan parameter berikut yang mengandungi arahan terkecil_masa:

  • header: Masa untuk menerima bait pertama daripada pelayan.

  • last_byte: Masa untuk menerima respons lengkap daripada pelayan.

  • last_byte inflight: Masa untuk menerima respons lengkap daripada pelayan.

6.random:

Setiap permintaan akan dihantar ke pelayan yang dipilih secara rawak. Jika dua parameter ditentukan, pertama, nginx secara rawak memilih dua pelayan berdasarkan berat pelayan, dan kemudian memilih salah satu daripadanya menggunakan kaedah yang ditentukan.

  • least_conn: Bilangan minimum sambungan aktif

  • least_time=header (nginx plus): Purata masa minimum untuk menerima pengepala respons daripada pelayan ($upstream_header_time).

  • least_time=last_byte (nginx plus): Purata masa terpendek untuk menerima respons lengkap daripada pelayan ($upstream_response_time).

nginx+springboot mencapai pengimbangan beban

Persediaan persekitaran

  • Bergantung pada jdk1.8 atau lebih tinggi;

  • bergantung pada persekitaran nginx; projek springboot, alamat projek springboot: https://github.com/xuwujing/springboot-study/tree/master/springboot-thymeleaf

    Mula-mula kami memuat turun projek ini, masukkan:
  • untuk meneruskan projek Bungkuskannya sebagai fail jar, kemudian letakkan
dan projek balang ini dalam folder, dan kemudian salin folder (disalin di sini untuk kejelasan, tidak mengapa untuk dimulakan semula tanpa menyalin dan menukar port), ubah suai folder yang disalin

port, sebagai contoh, tukar kepada 8086.

mvn clean packagekonfigurasi nginxapplication.propertiesapplication.properties

Kami menemui fail konfigurasi nginx nginx.conf, yang terdapat dalam direktori nginx/conf/nginx.conf, dan kemudian kami mengubah suai ia Untuk konfigurasi ini, konfigurasi berikut ditambah:

upstream pancm: tentukan nama, apa sahaja yang anda mahukan; port atau nama domain;

  • Jika anda tidak mahu menggunakan strategi round robin, anda juga boleh menukarnya kepada strategi lain.

  • Kemudian tambah/ubah suai konfigurasi berikut pada pelayan:
  • Arahan konfigurasi:

pelayan: Nama hos maya, berbilang boleh dikonfigurasikan dalam satu pelayan http;

dengar: port lalai nginx; nama domain, berbilang yang dipisahkan oleh ruang.

  • proxy_pass: laluan proksi, secara amnya mengkonfigurasi nama selepas huluan untuk mencapai pengimbangan beban, anda boleh mengkonfigurasi ip secara terus untuk lompatan

  • nginx.conf konfigurasi lengkap:
  • Ujian pengimbangan beban

    Selepas melengkapkan konfigurasi nginx, kami mulakan nginx.
    Linux memasuki /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf Jika ia sudah dimulakan, anda boleh menggunakan perintah /usr/local/nginx/sbin/nginx -s reload untuk memuatkan fail konfigurasi Untuk Windows, klik terus nginx.exe atau cmdJalankan start nginx dalam direktori nginx. untuk memulakan. Jika ia dimulakan, ia masih boleh dilakukan. Gunakan nginx -s reload untuk muat semula panas.

    Selepas nginx dimulakan, kami memulakan springboot yang baru kami muat turun dan menyalin projek untuk menukar port Masukkan: java -jar springboot-jsp-thymeleaf.jar untuk bermula.

    Selepas semuanya dimulakan dengan jayanya, kami boleh memasukkan alamat IP perkhidmatan dalam penyemak imbas untuk mengaksesnya.

    Gambar contoh:

    Bagaimana untuk mencapai pengimbangan beban dengan Nginx+SpringBoot

    Nota: Saya menggunakan sistem windows untuk ujian di sini, dan sistem Linux sebenar adalah sama.

    Kemudian mari kita lakukannya dan lihat log konsol!

    Bagaimana untuk mencapai pengimbangan beban dengan Nginx+SpringBoot

    Daripada contoh rajah di atas, kami membuat 4 permintaan muat semula antara muka, dan akhirnya mengagihkannya secara sama rata kepada kedua-dua perkhidmatan Daripada keputusan ujian di atas, kami mencapai pengimbangan beban .

    Di sini saya bercakap tentang langkah berjaga-jaga untuk menggunakan nginx Semasa belajar dan menguji, secara amnya tiada masalah dalam menggunakan port lalai nginx untuk mencapai pengimbangan beban, tetapi apabila kita menggunakannya dalam projek, ia adalah. terutamanya bermasalah. Apabila log masuk ke antara muka dan port tidak 80, antara muka log masuk tidak boleh melompat Apabila menyahpepijat, ralat seperti net::err_name_not_resolved akan muncul lompatan lalai ialah Ini juga berlaku, jadi apabila ini berlaku, anda perlu menambah hos proxy_set_header $host:port konfigurasi di bawah lokasi Hanya pastikan port dan dengar port konsisten.

Atas ialah kandungan terperinci Bagaimana untuk mencapai pengimbangan beban dengan Nginx+SpringBoot. 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