Rumah >Operasi dan penyelenggaraan >Nginx >analisis contoh pengimbangan beban nginx
Pengimbangan beban nginx
Perhatikan, seperti yang anda lihat, kerana laman web kami berada di peringkat awal pembangunan, nginx hanya bertindak sebagai ejen untuk satu bahagian belakang- pelayan akhir, tetapi kerana laman web kami Memandangkan reputasi kami meningkat, semakin ramai orang melawat kami hanya satu pelayan tidak dapat menanganinya, jadi kami menambah berbilang pelayan contoh untuk ditunjukkan untuk semua orang.
1. penerangan modul pengimbangan beban huluan
Kes:
Yang berikut menetapkan senarai pelayan pengimbangan beban.
upstream test.net{ ip_hash; server 192.168.10.13:80; server 192.168.10.14:80 down; server 192.168.10.15:8009 max_fails=3 fail_timeout=20s; server 192.168.10.16:8080; } server { location / { proxy_pass http://test.net; } }
hulu ialah modul huluan http bagi nginx Modul ini menggunakan algoritma penjadualan mudah untuk mencapai pengimbangan beban daripada IP klien ke pelayan hujung belakang. Dalam tetapan di atas, nama pengimbang beban test.net ditentukan melalui arahan huluan. Nama ini boleh ditentukan sewenang-wenangnya dan boleh dipanggil terus di mana ia diperlukan kemudian.
2. Algoritma pengimbangan beban disokong oleh huluan
modul pengimbangan beban nginx pada masa ini menyokong 4 algoritma penjadualan, yang diperkenalkan di bawah .
Undian (lalai). Setiap permintaan diberikan kepada pelayan bahagian belakang yang berbeza satu demi satu dalam susunan kronologi Jika pelayan bahagian belakang terputus, sistem yang rosak akan dihapuskan secara automatik supaya akses pengguna tidak terjejas. Berat menentukan berat undian Semakin besar nilai berat, semakin tinggi kebarangkalian akses yang ditetapkan Ia digunakan terutamanya apabila prestasi setiap pelayan bahagian belakang tidak sekata.
ip_hash. Setiap permintaan diperuntukkan mengikut hasil cincang IP yang diakses, supaya pelawat dari IP yang sama mempunyai akses tetap kepada pelayan bahagian belakang, yang secara berkesan menyelesaikan masalah perkongsian sesi halaman web dinamik.
adil. Ini adalah algoritma pengimbangan beban yang lebih pintar daripada dua di atas. Algoritma ini secara bijak boleh melakukan pengimbangan beban berdasarkan saiz halaman dan masa pemuatan, iaitu, memperuntukkan permintaan berdasarkan masa respons pelayan bahagian belakang dan mengutamakan yang mempunyai masa respons yang singkat. nginx sendiri tidak menyokong fair. Jika anda perlu menggunakan algoritma penjadualan ini, anda mesti memuat turun modul upstream_fair nginx.
url_hash. Kaedah ini memperuntukkan permintaan mengikut hasil cincangan URL akses, supaya setiap URL dihalakan ke pelayan hujung belakang yang sama, yang boleh meningkatkan lagi kecekapan pelayan cache bahagian belakang. nginx sendiri tidak menyokong url_hash Jika anda perlu menggunakan algoritma penjadualan ini, anda mesti memasang pakej perisian hash nginx.
3 Parameter status sokongan huluan
Dalam modul huluan http, anda boleh menentukan alamat ip dan port pelayan hujung belakang melalui arahan pelayan , dan anda juga boleh menetapkan status setiap pelayan hujung belakang dalam penjadualan pengimbangan beban. Keadaan yang biasa digunakan ialah:
turun, yang bermaksud pelayan semasa tidak mengambil bahagian dalam pengimbangan beban buat sementara waktu.
sandaran, mesin sandaran yang dikhaskan. Permintaan dihantar ke mesin siap sedia hanya apabila semua mesin bukan siap sedia lain tidak berfungsi atau sibuk, jadi mesin siap sedia adalah paling sedikit dimuatkan.
max_fails, bilangan kegagalan permintaan yang dibenarkan, lalai ialah 1. Jika bilangan melebihi bilangan maksimum, ralat yang ditakrifkan oleh modul proxy_next_upstream akan dikembalikan.
Selepas berbilang kegagalan (mencapai masa max_fails), perkhidmatan akan digantung untuk satu tempoh masa dan fail_timeout akan dicetuskan. max_fails boleh digunakan bersama fail_timeout.
Perhatikan, apabila algoritma penjadualan beban ialah ip_hash, status pelayan hujung belakang dalam penjadualan pengimbangan beban tidak boleh menjadi berat dan sandaran.
4. Topologi eksperimen
5 Konfigurasikan pengimbangan beban nginx
[root@nginx ~]# vim /etc/nginx/nginx.conf upstream webservers { server 192.168.18.201 weight=1; server 192.168.18.202 weight=1; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://webservers; proxy_set_header x-real-ip $remote_addr; } }
Perhatian, huluan ditakrifkan dalam pelayan{ } Di luar pelayan{ }, ia tidak boleh ditakrifkan di dalam. Selepas mentakrifkan huluan, hanya gunakan proxy_pass untuk merujuknya.
6. Muat semula fail konfigurasi
[root@nginx ~]# service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重新载入 nginx: [确定]
7 Ujinya
Perhatian, anda boleh sentiasa menyegarkan kandungan penyemakan imbas dan anda boleh mendapati web1 dan web2 muncul secara berselang-seli, mencapai kesan pengimbangan beban.
8. Semak log pelayan akses web
web1:
[root@web1 ~]# tail /var/log/httpd/access_log 192.168.18.138 - - [04/sep/2013:09:41:58 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:41:58 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:41:59 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:41:59 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:42:00 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:42:00 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:42:00 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:44:21 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:44:22 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:44:22 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)"
web2:
Ubah suai dahulu, Format log pelayan web.
[root@web2 ~]# vim /etc/httpd/conf/httpd.conf logformat "%{x-real-ip}i %l %u %t \"%r\" %>s %b \"%{referer}i\" \"%{user-agent}i\"" combined [root@web2 ~]# service httpd restart 停止 httpd: [确定] 正在启动 httpd: [确定]
Kemudian, lawati beberapa kali dan teruskan menyemak log.
[root@web2 ~]# tail /var/log/httpd/access_log 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:28 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:29 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)" 192.168.18.138 - - [04/sep/2013:09:50:29 +0800] "get / http/1.0" 200 23 "-" "mozilla/5.0 (compatible; msie 10.0; windows nt 6.1; wow64; trident/6.0)"
Perhatikan, seperti yang anda lihat, log kedua-dua pelayan merekodkan akses kepada 192.168.18.138, yang juga menunjukkan bahawa konfigurasi pengimbangan beban berjaya.
9. Konfigurasikan nginx untuk melakukan pemeriksaan status kesihatan
max_fails, bilangan kegagalan permintaan yang dibenarkan, lalai ialah 1. Jika bilangan melebihi bilangan maksimum, ralat yang ditakrifkan oleh modul proxy_next_upstream akan dikembalikan.
Selepas mengalami bilangan kegagalan maksimum yang dibenarkan (max_fails), perkhidmatan akan digantung untuk satu tempoh masa (fail_timeout). Pemeriksaan status kesihatan boleh dilakukan menggunakan max_fails dan fail_timeout.
[root@nginx ~]# vim /etc/nginx/nginx.conf upstream webservers { server 192.168.18.201 weight=1 max_fails=2 fail_timeout=2; server 192.168.18.202 weight=1 max_fails=2 fail_timeout=2; }
10.重新加载一下配置文件
[root@nginx ~]# service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重新载入 nginx: [确定]
11.停止服务器并测试
先停止web1,进行测试。 [root@web1 ~]# service httpd stop 停止 httpd: [确定]
注,大家可以看到,现在只能访问web2,再重新启动web1,再次访问一下。
[root@web1 ~]# service httpd start 正在启动 httpd: [确定]
注,大家可以看到,现在又可以重新访问,说明nginx的健康状态查检配置成功。但大家想一下,如果不幸的是所有服务器都不能提供服务了怎么办,用户打开页面就会出现出错页面,那么会带来用户体验的降低,所以我们能不能像配置lvs是配置sorry_server呢,答案是可以的,但这里不是配置sorry_server而是配置backup。
12.配置backup服务器
[root@nginx ~]# vim /etc/nginx/nginx.conf server { listen 8080; server_name localhost; root /data/www/errorpage; index index.html; } upstream webservers { server 192.168.18.201 weight=1 max_fails=2 fail_timeout=2; server 192.168.18.202 weight=1 max_fails=2 fail_timeout=2; server 127.0.0.1:8080 backup; } [root@nginx ~]# mkdir -pv /data/www/errorpage [root@nginx errorpage]# cat index.html <h1>sorry......</h1>
13.重新加载配置文件
[root@nginx errorpage]# service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重新载入 nginx: [确定]
14.关闭web服务器并进行测试
[root@web1 ~]# service httpd stop 停止 httpd: [确定] [root@web2 ~]# service httpd stop 停止 httpd: [确定]
注,大家可以看到,当所有服务器都不能工作时,就会启动备份服务器。好了,backup服务器就配置到这里,下面我们来配置ip_hash负载均衡。
15.配置ip_hash负载均衡
ip_hash,每个请求按访问ip的hash结果分配,这样来自同一个ip的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。(一般电子商务网站用的比较多)
[root@nginx ~]# vim /etc/nginx/nginx.conf upstream webservers { ip_hash; server 192.168.18.201 weight=1 max_fails=2 fail_timeout=2; server 192.168.18.202 weight=1 max_fails=2 fail_timeout=2; #server 127.0.0.1:8080 backup; }
注,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能有backup。(有人可能会问,为什么呢?大家想啊,如果负载均衡把你分配到backup服务器上,你能访问到页面吗?不能,所以了不能配置backup服务器)
16.重新加载一下服务器
[root@nginx ~]# service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重新载入 nginx: [确定]
17.测试一下
注,大家可以看到,你不断的刷新页面一直会显示的民web2,说明ip_hash负载均衡配置成功。下面我们来统计一下web2的访问连接数。
18.统计web2的访问连接数
[root@web2 ~]# netstat -an | grep :80 | wc -l 304
注,你不断的刷新,连接数会越来越多。
Atas ialah kandungan terperinci analisis contoh pengimbangan beban nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!