(1)傳統(tǒng)web訪問模型完成一次請求的步驟

1)用戶發(fā)起請求2)服務器接受請求3)服務器處理請求(壓力最大)4)服務器響應請求(2)傳統(tǒng)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網站運營 > 十年經驗程序員,手把手教你使用Nginx搭建web集群【建議新手收藏】

十年經驗程序員,手把手教你使用Nginx搭建web集群【建議新手收藏】

時間:2023-04-18 21:08:01 | 來源:網站運營

時間:2023-04-18 21:08:01 來源:網站運營

十年經驗程序員,手把手教你使用Nginx搭建web集群【建議新手收藏】:

一、集群介紹

1、傳統(tǒng)web訪問模型


(1)傳統(tǒng)web訪問模型完成一次請求的步驟

(2)傳統(tǒng)模型缺點

(3)傳統(tǒng)模型優(yōu)化——單點故障解決方案

優(yōu)化方案一:部署一臺備份服務器,宕機直接切換該方案可以有效解決服務器故障導致的單點故障,但且服務器利用率低、成本高,切換不及時,且無法解決服務器業(yè)務壓力問題。

優(yōu)化方案二:部署多臺服務器,根據DNS的輪詢解析機制去實現用戶分發(fā)
優(yōu)勢是用戶處理速度得到了提升,但是當其中一臺故障,dns并不會知道它故障了,依然將請求分給這個服務器,導致一部分用戶訪問不了業(yè)務。

2、并行處理解決方案


圖中,前面兩臺服務器負責接受請求和分發(fā)請求,它自己并不處理請求,將請求分發(fā)給后面的業(yè)務服務器來處理。業(yè)務服務器處理完請求后,將請求發(fā)還給分發(fā)器,再由分發(fā)器將請求發(fā)送給客戶,因此分發(fā)器還承擔了響應請求的任務。
由此可見之前傳統(tǒng)模型中服務器端需要承擔的服務器接收請求和響應請求都交給分發(fā)器處理了,而業(yè)務壓力最大的處理請求則交給業(yè)務服務器完成。
分發(fā)器和dns雖然都是進行了分發(fā)的工作,但不同點在于分發(fā)器是自己部署的服務器,而DNS都是使用的運營商的,因此可以調整分發(fā)器的邏輯判斷規(guī)則。

3、集群

組成要素:

4、Nginx集群原理

功能模塊:
1)ngx_http_upstream_module:基于應用層(七層)分發(fā)模塊
2)ngx_stream_core_module:基于傳輸層(四層)分發(fā)模塊(1.9開始提供該功能)

(1)Nginx集群的實質

(2)數據走向(請求處理流程)

二、使用Nginx分發(fā)器構建一個WEB集群

1、環(huán)境準備


2、配置web業(yè)務機器
(1)nginx安裝腳本

#!/bin/bashnginx_pkg='nginx-1.5.1.tar.gz'nginx_prefix=/usr/local/nginxhtml=/var/nginxlog=/var/log/nginxcheck13 () { [ $UID -ne 0 ] && echo "need to be root to that" && exit 1 [ ! -f $nginx_pkg ] && echo "not found source packager" && exit 1 [ ! -d $html ] && mkdir -p $html [ ! -d $log ] && mkdir -p $log}nginx_install () { source_pkg=`echo $nginx_pkg|awk -F ".tar" '{print $1}'` [ -d /usr/src/$source_pkg ]&&rm -rf /usr/src/$source_pkg tar xf $nginx_pkg -C /usr/src cp nginxd /usr/src/$source_pkg if [ $? -eq 0 ];then cd /usr/src/$source_pkg if [ $? -eq 0 ];then yum -y install gcc-* pcre pcre-devel zlib zlib-devel openssl-* &> /dev/null [ $? -ne 0 ]&&"YUM set error" && exit 1 ./configure --prefix=$nginx_prefix if [ $? -eq 0 ];then make if [ $? -eq 0 ];then make install if [ $? -eq 0 ];then ln -s -f $nginx_prefix/conf/nginx.conf /etc/ ln -s -f $nginx_prefix/logs/ $log/logs ln -s -f $nginx_prefix/html $html/html ln -s -f $nginx_prefix/sbin/ /usr/sbin/ cp nginxd /etc/init.d/nginx;chmod 755 /etc/init.d/nginx else exit 1 fi else exit 1 fi else exit 1 fi else exit 1 fi else exit 1fi [ $? -eq 0 ]&&clear||exit echo -e "/n/033[32m Nginx Install Success: /033[0m" echo -e "/n" echo -e "/tNginx_conf: /etc/nginx.conf" echo -e "/tNginx_html: $html/html" echo -e "/tNginx_access_log: $log/logs/access.log" echo -e "/tNginx_error_log: $log/logs/error.log/n/n/n/n" read -n1 -p "press any key and exit...." echo }check13nginx_install(2)配置web服務器操作

[root@web02 ~]# sh nginx_install # 腳本安裝nginx[root@web02 ~]# echo web02 > /usr/local/nginx/html/index.html # 寫入頁面[root@web02 ~]# yum -y install elinks &>/dev/null # 安裝文本瀏覽器[root@web02 ~]# /usr/local/nginx/sbin/nginx # 啟動nginx[root@web02 ~]# elinks http://localhost -dump web023、配置分發(fā)器(輪詢方式分發(fā))

# 清除空行和注釋項$ sed -i '/#/d' nginx.conf$ sed -i '/^$/d' nginx.conf# 配置nginx.confworker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream web{ # 名為web的反向代理群組 server 192.168.31.42; server 192.168.31.43; } server { listen 80; server_name localhost; location / { proxy_pass http://web; # 去找反向代理 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}4、集群分發(fā)測試(默認輪詢)
客戶端訪問分發(fā)器地址,默認按照輪詢的方式來進行分發(fā)。

[root@web02 ~]# elinks http://192.168.31.40 -dump web01[root@web02 ~]# elinks http://192.168.31.40 -dump web02[root@web02 ~]# elinks http://192.168.31.40 -dump web01[root@web02 ~]# elinks http://192.168.31.40 -dump web02為了答謝大家關注和支持,這次給大家準備了限時領取福利阿里面試題、百度面試題、滴滴面試題、華為面試題、京東面試題、美團面試題、騰訊面試題、頭條面試題、中興面試題。





還等什么小編推薦自己的linuxC/C++語言交流群:1106675687】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!前100名進群領取,額外贈送一份價值199的C/C++、linux資料包含(視頻教程、電子書、實戰(zhàn)項目及代碼),下面部分展示。

三、Nginx分發(fā)算法

集群分發(fā)算法:如何將用戶請求按照一定的規(guī)律分發(fā)給業(yè)務服務器。主要分為Nginx集群默認算法和基于請求頭分發(fā)算法。

1、Nginx集群默認算法
upstream module
nginx的upstream 目前支持4種方式的分配
(1)輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
(2)weight
指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。
(3)ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務,好處是可以解決session的問題。因此前兩種只能處理靜態(tài)頁面,而這種方式可以處理動態(tài)網站。
(4)fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配。
(5)url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務 ,后端服務器為緩存時比較有效。

2、Nginx業(yè)務服務器狀態(tài)

每個設備的狀態(tài)設置參數:
down:表示當前的server暫時不參與負載;
weight:默認為1,weight越大,負載的權重就越大;
max_fails:允許請求失敗的次數默認為1,當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤;
fail_timeout:失敗超時時間,在連接Server時,如果在超時時間之內超過max_fails指定的失敗次數,會認為在fail_timeout時間內Server不可用,默認為10s
backup:其他所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

3、Nginx集群默認算法測試
集群環(huán)境與之前完全相同。


(1)輪詢算法分發(fā)

upstream web { server 192.168.31.42; server 192.168.31.43;}server { listen 80; server_name localhost; location / { proxy_pass http://web; } }前面已經測試驗證了輪詢算法分發(fā)。配置backup參數如下所示:

upstream web { server 192.168.31.42 weight=1; server 192.168.31.43 weight=1 backup;}server { listen 80; server_name localhost; location / { proxy_pass http://web; } }關停第一個節(jié)點情況,訪問嘗試:

[root@web02 ~]# elinks http://192.168.31.40 -dump web02[root@web02 ~]# elinks http://192.168.31.40 -dump web02[root@web02 ~]# elinks http://192.168.31.40 -dump web02(2)基于權重的分發(fā)

upstream web { # 設置權重比例1:2 server 192.168.31.42 weight=1; server 192.168.31.43 weight=2;}server { listen 80; server_name localhost; location / { proxy_pass http://web; } }訪問測試驗證:

[root@web02 ~]# elinks http://192.168.31.40 -dump web01[root@web02 ~]# elinks http://192.168.31.40 -dump web02[root@web02 ~]# elinks http://192.168.31.40 -dump web02[root@web02 ~]# elinks http://192.168.31.40 -dump web01[root@web02 ~]# elinks http://192.168.31.40 -dump web02[root@web02 ~]# elinks http://192.168.31.40 -dump web02通過權重比例的分配,可以讓性能更強的服務器承擔處理更多的請求。

(3)基于ip_hash分發(fā)
ip_hash算法能夠保證來自同樣源地址的請求都分發(fā)到同一臺主機,需要注意:ip_hash算法不支持backup、weight設置。默認權重為1。

upstream web { ip_hash; # 指定ip_hash即可,默認weight權重比例1: 1 server 192.168.31.42; server 192.168.31.43; }server { listen 80; server_name localhost; location / { proxy_pass http://web; } }訪問測試驗證:

# 源ip固定[root@web01 ~]# elinks http://192.168.31.40 -dump web02[root@web01 ~]# elinks http://192.168.31.40 -dump web02[root@web01 ~]# elinks http://192.168.31.40 -dump web02MacBook-Pro:~ hqs$ elinks http://192.168.31.40 -dump web01MacBook-Pro:~ hqs$ elinks http://192.168.31.40 -dump web01MacBook-Pro:~ hqs$ elinks http://192.168.31.40 -dump web01

四、Nginx基于請求頭的分發(fā)

前面的分發(fā)方式都是基于一個集群分發(fā)的,而基于請求頭分發(fā)一般都是用于多集群分發(fā)的。

瀏覽器開發(fā)者工具network工具下,獲取請求的請求頭信息如下所示:

Request URL: http://192.168.31.43/ # 請求的URLRequest Method: GET # 請求的方法Status Code: 200 OKRemote Address: 192.168.31.43:80Referrer Policy: no-referrer-when-downgrade # 請求的策略Response headers # 響應頭Accept-Ranges: bytesConnection: keep-aliveContent-Length: 6Content-Type: text/htmlDate: Fri, 26 Oct 2018 12:43:02 GMTETag: "5bd3014d-6"Last-Modified: Fri, 26 Oct 2018 11:58:05 GMTServer: nginx/1.15.5Request Headers # 請求頭GET /index.php HTTP/1.1 # 請求方法是GET;域名后面的部分就是路徑,默認是‘/’;使用的HTTP協議是1.1 Host: 192.168.31.43 # 訪問的域名(域名或IP均可Connection: keep-alive # 長連接Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 用戶瀏覽器的類型Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 # 可以接受的數據類型Accept-Encoding: gzip, deflate # 壓縮Accept-Language: zh-CN,zh;q=0.9 # 語言1、基于host分發(fā)

基于host分發(fā)這種分發(fā)方式適用于多集群分發(fā)。例如:一個公司有多個網站,每個網站就是一個集群。

http { upstream web1 { # 名為web1的反向代理群組 server 192.168.31.42; server 192.168.31.52; } upstream web2 { # 名為web2的反向代理群組 server 192.168.31.43; server 192.168.31.53; } server { # web1虛擬主機 listen 80; server_name www.web1.com; # 基于域名分發(fā)必須有域名 location / { proxy_pass http://web1; } } server { # web2虛擬主機 listen 80; server_name www.web2.com; # 基于域名分發(fā)必須有域名 location / { proxy_pass http://web2; } }}基于域名的分發(fā)測試:

[root@web02 ~]# elinks http://www.web1.com -dump web01[root@web02 ~]# elinks http://www.web1.com -dump web01[root@web02 ~]# elinks http://www.web1.com -dump web01[root@web02 ~]# elinks http://www.web2.com -dump web02[root@web02 ~]# elinks http://www.web2.com -dump web02[root@web02 ~]# elinks http://www.web2.com -dump web022、基于開發(fā)語言分發(fā)
這種分發(fā)方式適用于混合開發(fā)的網站,某些大型網站既有php也有jsp,就可以基于開發(fā)語言分發(fā)。

# 192.168.31.40分發(fā)器上nginx配置http { upstream php { server 192.168.31.42; } upstream html { server 192.168.31.43; } server { location ~* /.php$ { # php結尾的 proxy_pass http://php; } location ~* /.html$ { # html結尾的 proxy_pass http://html; } }}測試驗證:

# 安裝php環(huán)境$ yum install httpd php # 安裝apache和php# 啟動apache,自帶php$ systemctl start httpd# 編寫php文件$ echo "<?php phpinfo(); ?>" > /var/www/html/index.php# 訪問192.168.31.40/index.php 可以看到php-info信息頁面# 訪問192.168.31.40/index.html 可以看到web023、基于瀏覽器的分發(fā)
這種基于瀏覽器的分發(fā),常應用于PC端和移動端區(qū)分或瀏覽器適配。

(1)由于沒有第三個機器,在42這臺業(yè)務服務器上,啟動一個虛擬主機。

$ vim /usr/local/nginx/conf/nginx.confhttp { server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } } server { listen 81; server_name localhost; location / { root web3; index index.html index.htm } }}$ mkdir /usr/local/nginx/web3$ echo web03 > /usr/local/nginx/web3/index.html$ /user/local/nginx/sbin/nginx(2)基于瀏覽器分發(fā)的分發(fā)器配置

upstream elinks { server 192.168.31.42; }upstream chrome { server 192.168.31.43; }upstream any { server 192.168.31.42:81; }server { listen 80; server_name www.web1.com; location / { proxy_pass http://any; if ( $http_user_agent ~* Elinks ) { proxy_pass http://elinks; } if ( $http_user_agent ~* chrome ) { proxy_pass http://chrome; } }}(3)訪問測試
任何機器訪問,只要是使用elinks訪問的都將訪問web01;只要使用chrome瀏覽器訪問都將訪問web02;而使用firefox或者safari則將訪問web03.

4、基于源IP分發(fā)
像騰訊新聞、58同城等等網站,往往在什么地方登陸則獲取哪個地方的數據。服務器通過源IP匹配判斷,從對應的數據庫中獲取數據。

(1)geo模塊

(2)基于源IP分發(fā)配置

upstream bj.server { server 192.168.31.42; # web01}upstream sh.server { server 192.168.31.43; # web02}upstream default.server { server 192.168.31.42:81; # web03}geo $geo { # IP庫 default default; 192.168.31.241/32 bj; # 杭州 192.168.31.242/32 sh; # 杭州}server { listen 80; server_name www.web1.com; location / { proxy_pass http://$geo.server$request_uri; }}
首先恭喜您,能夠認真的閱讀到這里,如果對部分理解不太明白,建議先將文章收藏起來,然后對不清楚的知識點進行查閱,然后在進行閱讀,相應你會有更深的認知。如果您喜歡這篇文章,就點個贊或者【關注我】吧??!

關鍵詞:收藏,新手,建議,使用,程序,經驗,把手

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉