Nginx搭建負(fù)載均衡集群的實(shí)現(xiàn)
(1).實(shí)驗(yàn)環(huán)境
youxi1 192.168.5.101 負(fù)載均衡器
youxi2 192.168.5.102 主機(jī)1
youxi3 192.168.5.103 主機(jī)2
(2).Nginx負(fù)載均衡策略
nginx的負(fù)載均衡用于upstream模板定義的后端服務(wù)器列表中選取一臺(tái)服務(wù)器接收用戶(hù)的請(qǐng)求。一個(gè)基本的upstream模塊如下:
upstream [服務(wù)器組名稱(chēng)]{ server [IP地址]:[端口號(hào)]; server [IP地址]:[端口號(hào)]; .... }
在upstream模塊配置完成后,要讓指定的訪問(wèn)反向代理到服務(wù)器列表,格式如下:
location ~ .*$ { index index.jsp index.html; proxy_pass http://[服務(wù)器組名稱(chēng)]; }
擴(kuò)展:nginx的location配置規(guī)則:https://www.jb51.net/article/182472.htm
這樣就完成了最基本的負(fù)載均衡,但是這并不能滿足實(shí)際需求。目前Nginx的upstream模塊支持6種方式的負(fù)載均衡策略(算法):輪詢(xún)(默認(rèn)方式)、weight(權(quán)重方式)、ip_hash(依據(jù)ip分配方式)、least_conn(最少連接方式)、fair(第三方提供的響應(yīng)時(shí)間方式)、url_hash(第三方通過(guò)的依據(jù)URL分配方式)。
1)輪詢(xún)
最基本的配置方法,是upstream模塊默認(rèn)的負(fù)載均衡策略。每個(gè)請(qǐng)求會(huì)按時(shí)間順序平均分配到不同的后端服務(wù)器。有如下參數(shù):
fail_timeout | 與max_fails結(jié)合使用 |
max_fails | 在fail_timeout參數(shù)設(shè)置的時(shí)間內(nèi)最大失敗次數(shù)。如果在這個(gè)時(shí)間內(nèi),所有該服務(wù)器的請(qǐng)求都失敗了,那么認(rèn)為該服務(wù)器停機(jī) |
fail_time | 服務(wù)器被認(rèn)為停機(jī)的時(shí)長(zhǎng),默認(rèn)10s(被認(rèn)為停機(jī)的服務(wù)器嘗試間隔?) |
backup | 標(biāo)記該服務(wù)器為備用服務(wù)器。當(dāng)主服務(wù)器停止時(shí),請(qǐng)求會(huì)被發(fā)送到它這里 |
down | 標(biāo)記服務(wù)器永久停機(jī) |
注意:1.down標(biāo)記的服務(wù)器會(huì)自動(dòng)剔除;2.缺省就是輪詢(xún);3.此策略適合服務(wù)器配置無(wú)狀態(tài)且短平塊的服務(wù)使用
2)weight
權(quán)重方式,在輪詢(xún)策略的基礎(chǔ)上指定輪詢(xún)的幾率。也可以認(rèn)為是在輪詢(xún)的基礎(chǔ)上新增了一個(gè)weight的參數(shù),此參數(shù)指定輪詢(xún)的幾率,值為number。upstream模塊配置模板如下:
upstream [服務(wù)器組名稱(chēng)]{ server [IP地址]:[端口號(hào)] weight=2; server [IP地址]:[端口號(hào)]; .... }
在該例子中,沒(méi)有weight參數(shù)的服務(wù)器默認(rèn)為1,weight的數(shù)值與訪問(wèn)比例成正比,所有weight值的總和為一個(gè)循環(huán)單位,服務(wù)器自身的weight值為循環(huán)單位內(nèi)的輪詢(xún)次數(shù)。
注意:1.權(quán)重越高分配到的請(qǐng)求越多;2.此策略可以和least_conn策略、iphash策略結(jié)合使用;3.此策略比較適合服務(wù)器硬件配置差距較大的情況。
3)ip_hash
依據(jù)ip分配方式,指定負(fù)載均衡器按照基于客戶(hù)端IP的分配方式,這個(gè)方法確保了相同的客戶(hù)端請(qǐng)求一致發(fā)送到相同的服務(wù)器,以保證session會(huì)話。這樣每個(gè)訪客都固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session不能跨服務(wù)器的問(wèn)題。upstream模塊配置模板如下:
upstream [服務(wù)器組名稱(chēng)]{ ip_hash; server [IP地址]:[端口號(hào)] weight=2; server [IP地址]:[端口號(hào)]; .... }
注意:1.nginx1.3.1之前的版本不能在ip_hash中使用權(quán)重(weight);2..ip_hash不能與backup同時(shí)使用;3.此策略適合有狀態(tài)服務(wù)的程序,比如session;4.當(dāng)有服務(wù)器需要剔除,必須手動(dòng)down掉。
4)least_conn
最少連接方式,把請(qǐng)求發(fā)給鏈接數(shù)最少的后端服務(wù)器。輪詢(xún)是把請(qǐng)求平均分配給各個(gè)后端,使它們的負(fù)載大致相同。但是,有些請(qǐng)求占用的時(shí)間很長(zhǎng),會(huì)導(dǎo)致其所在的后端負(fù)載較高。這種情況下,least_conn這種方式就可以達(dá)到更好的負(fù)載均衡效果。upstream模塊配置模板如下:
upstream [服務(wù)器組名稱(chēng)]{ least_conn; server [IP地址]:[端口號(hào)] weight=2; server [IP地址]:[端口號(hào)]; .... }
注意:此策略適合請(qǐng)求處理時(shí)間長(zhǎng)短不一造成的服務(wù)器過(guò)載情況。
5)fair
響應(yīng)時(shí)間方式,按照服務(wù)器端的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。upstream模塊配置模板如下:
upstream [服務(wù)器組名稱(chēng)]{ server [IP地址]:[端口號(hào)] weight=2; server [IP地址]:[端口號(hào)]; .... fair; }
注意:需要安裝第三方插件。
6)url_hash
url分配方式,按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,要配合緩存命中來(lái)使用。同一個(gè)資源多次請(qǐng)求可能會(huì)到達(dá)不同的服務(wù)器上,導(dǎo)致不必要的多次下載,緩存命中率不高,以及一些資源時(shí)間的浪費(fèi)。而使用url_hash,可以使得同一個(gè)url(也就是同一個(gè)資源請(qǐng)求)會(huì)到達(dá)同一臺(tái)服務(wù)器,一旦緩存住了資源,再次收到請(qǐng)求,就可以在緩存中讀取。upstream模塊配置模板如下:
upstream [服務(wù)器組名稱(chēng)]{ hash $request_uri; server [IP地址]:[端口號(hào)] weight=2; server [IP地址]:[端口號(hào)]; .... }
注意:1.需要安裝第三方插件;2.uri,是i,不是小寫(xiě)的L。
(3).實(shí)驗(yàn)
1)在負(fù)載均衡器youxi1上編譯安裝nginx
安裝nginx的依賴(lài)包
[root@youxi1 ~]# yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
上傳nginx源碼包nginx-1.14.1.tar.gz,解壓安裝
[root@youxi1 ~]# tar xf nginx-1.14.1.tar.gz -C /usr/local/src/ [root@youxi1 ~]# cd /usr/local/src/nginx-1.14.1/ [root@youxi1 nginx-1.14.1]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module [root@youxi1 nginx-1.14.1]# make && make install [root@youxi1 nginx-1.14.1]# echo $? 0
參數(shù)說(shuō)明:
--with-http_dav_module,啟用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:創(chuàng)建集合,COPY和MOVE方法)默認(rèn)情況下為關(guān)閉,需編譯開(kāi)啟;
--with-http_stub_status_module,啟用ngx_http_stub_status_module支持(獲取nginx自上次啟動(dòng)以來(lái)的工作狀態(tài));
--with-http_addition_module,啟用ngx_http_addition_module支持(作為一個(gè)輸出過(guò)濾器,支持不完全緩沖,分部分響應(yīng)請(qǐng)求);
--with-http_sub_module,啟用ngx_http_sub_module支持(允許用一些其他文本替換nginx響應(yīng)中的一些文本);
--with-http_flv_module,啟用ngx_http_flv_module支持(提供尋求內(nèi)存使用基于時(shí)間的偏移量文件);
--with-http_mp4_module,啟用對(duì)mp4文件支持(提供尋求內(nèi)存使用基于時(shí)間的偏移量文件)。
生成nginx用戶(hù)
[root@youxi1 nginx-1.14.1]# useradd -M -s /sbin/nologin nginx
啟動(dòng)并添加開(kāi)機(jī)自啟
[root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx [root@youxi1 nginx-1.14.1]# echo /usr/local/nginx/sbin/nginx >> /etc/rc.local [root@youxi1 nginx-1.14.1]# chmod +x /etc/rc.d/rc.local
如果防火墻是開(kāi)啟的記得添加端口號(hào)
[root@youxi1 nginx-1.14.1]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload success success
查看下界面,看看nginx是否正常安裝
測(cè)試完成后,修改nginx的配置文件,最后重啟nginx
[root@youxi1 nginx-1.14.1]# cp /usr/local/nginx/conf/nginx.conf{,.bak} [root@youxi1 nginx-1.14.1]# vim /usr/local/nginx/conf/nginx.conf user nginx; //第2行 location / { //第43行起 root html; index index.html index.htm; if ($request_uri ~* \.html$){ proxy_pass http://htmlservers; } if ($request_uri ~* \.php$){ proxy_pass http://phpservers; } proxy_pass http://picservers; } upstream htmlservers { //在http模塊下,server模塊平級(jí)處添加 server 192.168.5.102:80; server 192.168.5.103:80; } upstream phpservers{ server 192.168.5.102:80; server 192.168.5.103:80; } upstream picservers { server 192.168.5.102:80; server 192.168.5.103:80; } [root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx -s reload
2)在youxi2和youxi3上布置網(wǎng)頁(yè)程序
[root@youxi2 ~]# yum -y install httpd [root@youxi2 ~]# echo youxi2 > /var/www/html/index.html [root@youxi2 ~]# echo youxi2.php > /var/www/html/index.php [root@youxi2 ~]# echo youxi2.other > /var/www/html/index.jsp [root@youxi2 ~]# systemctl start httpd.service [root@youxi3 ~]# yum -y install httpd [root@youxi3 ~]# echo youxi3 > /var/www/html/index.html [root@youxi3 ~]# echo youxi3.php > /var/www/html/index.php [root@youxi3 ~]# echo youxi3.other > /var/www/html/index.jsp [root@youxi3 ~]# systemctl start httpd.service
如果防火墻是開(kāi)啟的,記得添加端口號(hào)
[root@youxi2 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload success success [root@youxi3 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload success success
3)測(cè)試
首先測(cè)試html頁(yè)面
接著測(cè)試php頁(yè)面
最后測(cè)試其他頁(yè)面
參考:https://www.cnblogs.com/1214804270hacker/p/9325150.html
到此這篇關(guān)于Nginx搭建負(fù)載均衡集群的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx 負(fù)載均衡集群內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。