Rumah > Artikel > Operasi dan penyelenggaraan > Bagaimana Nginx melaksanakan pengimbangan beban
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?
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).
3. Nginx load balancing
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.
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 定义的服务器列表 }
(1) Undian
upstream test { server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2; }
(2) ip_hash
upstream test { ip_hash; --同一个IP客户端固定访问一个后端服务器 server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2; }
(3) url_hashEdarkan 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; }
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
upstream test { server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2; --轮询的几率相对上一条要大 }
(6) adil
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台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 --配置子配置文件
(2)后端服务器配置
vim /usr/local/nginx/conf/nginx.conf --修改配置文件 vim /usr/local/nginx/html/index.html --添加测试数据
(3)负载均衡测试
在浏览器端访问http://10.20.151.240/,在实际生产中,这两个页面返回的结果是一样的,这里是为了测试效果,所以返回了不同的内容。而为什么刷新后又会返回不同结果呢?那是因为负载均衡默认的均衡策略(或算法)是轮询,所以每刷新一次就会从不同的后端服务器返回不同的请求结果,减轻单个后端服务器的访问量,提升客户端的访问效率,从而达到负载均衡的效果。
当我添加权重(weight)时
再次访问http://10.20.151.240/
加权重和没加权重有什么区别呢?在实际生产中,我们一般会将配置较高的服务器的权重设置高一点,其实就是客户端在访问时,权重较高的服务器会被多次请求,这样能减轻配置较低的服务器的请求量,从而更好的实现负载均衡。
当我添加backup状态参数时
再次访问http://10.20.151.240/
此时我故意停掉第一台后端服务器,继续访问http://10.20.151.240/
当我给113这台后端服务器添加backup后,它就会作为热备服务器,添加的主要目的就是当我其他后端服务器都宕机的情况下,我的热备服务器还能继续提供同样的服务(注意:在其他后端服务器还未宕机之前,该热备服务器是不工作的)。因此负载均衡不仅能达到各个后端服务器负载的均衡,同时通过配置相关转态参数还能保证客户端请求时不造成服务器宕机的情况,保证了后端服务器的稳定性。其他状态参数这里我不再做演示(因为配置方式都一样)。
Atas ialah kandungan terperinci Bagaimana Nginx melaksanakan pengimbangan beban. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!