我的 Nginx 入門指南

看,未來 2022-01-07 05:30:59 阅读数:807

nginx 指南

請添加圖片描述

說明

本篇側重點在於 TCP負載均衡,或者可以說,沒有多少HTTP負載均衡相關的。所以如果不是你的菜,可以省些時間。

雖然我現在不排斥任何一門新技術,但是讓我跨越web這一塊直接上手HTTP負載均衡,跨度有點大哈。還是得循序漸進,有機會再說吧。


Nginx 簡介

Nginx是一個 Web 服務器,也可以用作 反向代理,負載均衡器 和 HTTP 緩存。

單臺服務器受限於硬件資源,其性能是有上限的,當單臺服務器不能滿足應用場景的並發需求量時,就需要考慮部署多個服務器共同處理客戶端的並發請求,此時就需要一臺負載均衡器,通過預設的負載算法,指導客戶端連接服務器。

從1.9版本開始以後,nginx開始支持tcp的長連接負載均衡,但是nginx默認並沒有編譯tcp負載均衡模塊,編譯它時,需要加入–with-stream參數來激活這個模塊。


Ubuntu 下 安裝 Nginx

安裝方式一:

apt-get install nginx

安裝完之後,nginx比特於 /usr/sbin 下,nginx.conf 比特於/etc/nginx 下。

查看 nginx 是否啟動的方式:netstat -tanp,如果看到80端口由nginx監聽,則啟動了。

啟動nginx:./nginx
關閉nginx:./nginx -s stop
平滑重啟nginx:./nginx -s reload


安裝方式二:

1、准備一個目錄
2、下載相關組件:

wget http://nginx.org/download/nginx-1.10.2.tar.gz

版本自選。

3、安裝pcre

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev

4、安裝zlib

apt-get install zlib1g-dev

5、安裝nginx

tar zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure --with-stream
make && make install

6、檢查nginx是否安裝成功

cd /usr/local/nginx/sbin
./nginx -t

顯示 :

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

則啟動成功

安裝成功之後,nginx 比特於 /usr/local/nginx/sbin 下,nginx.conf 比特於 /usr/local/nginx/conf 下。


nginx卸載幹淨

新手,玩的時候有可能會整的亂七八糟,卸載幹淨了重新再安裝唄。

1、删除相關軟件:

sudo apt-get --purge remove nginx nginx-common nginx-core

2、移除全部不使用的軟件包

apt-get autoremove

3、羅列出與nginx相關的軟件並删除

dpkg --get-selections|grep nginx

自行删除、

4、查看nginx正在運行的進程,如果有就kill掉

ps -ef |grep nginx
kill -9 XXX

5、全局查找與nginx相關的文件

find / -name nginx*
rm -rf file

删除列出的所有文件


Nginx TCP負載均衡配置

上手Nginx,從配置文件開始

看到一張還不錯的圖:
在這裏插入圖片描述

main 全局配置

nginx在運行時與具體業務功能(比如http服務或者email服務代理)無關的一些參數,比如工作進程數,運行的身份等。

user www www; # 指定nginx進程使用什麼用戶啟動
worker_processse auto; # 錶示由 Nginx 根據內核數生成等量的工作進程
# 指定啟動多少進程來處理請求,一般情况下設置成CPU的核數。
#如果開啟了ssl和gzip更應該設置成與邏輯CPU數量一樣甚至為2倍,可以减少I/O操作。
#使用grep ^processor /proc/cpuinfo | wc -l查看CPU核數。
worker_cpu_affinity auto; # 同上,錶示由 Nginx 自動進行 CPU 綁定
# 在高並發情况下,通過設置將CPU和具體的進程綁定來降低由於多核CPU切換造成的寄存器等現場重建帶來的性能損耗。
# 如worker_cpu_affinity 0001 0010 0100 1000; (四核)
error_log /var/logs/nginx_error.log crit; # 定義全局錯誤日志文件。
# 日志輸出級別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日志最為最詳細,而crit輸出日志最少。
pid /usr/local/webserver/nginx/nginx.pid;
worker_rlimit_nofile 65535; # 用於指定一個nginx進程可以打開的最多文件描述符數目,這裏是65535,需要使用命令“ulimit -n 65535”來設置。
worker_rlimit_core 800m; # 指明所有worker進程所能够使用的總體的最大核心文件大小(段錯誤·核心已轉儲)
worker_priority -5 # 工作進程優先級,設置為-5,取值範圍為 -20~19,數值越低優先級越高,獲得的CPU時間越多。

events模塊

events{

use epoll; # 事件模塊指令,用來指定Nginx的工作模式。
worker_connections 65536; # 每一個worker進程能並發處理(發起)的最大連接數(包含與客戶端或後端被代理服務器間等所有連接數)。
}

1、Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平臺上,而kqueue用在BSD系統中。對於Linux系統,epoll工作模式是首選。在操作系統不支持這些高效模型時才使用select。

2、最大連接數 = worker_processes * worker_connections/4,所以這裏客戶端最大連接數是65536。當nginx作為http服務器時,計算公式裏面是除以2。進程的最大連接數受Linux系統進程的最大打開文件數限制,在執行操作系統命令ulimit -n 65536後worker_connections的設置才能生效。


stream

做tcp負載均衡的話在這下面插一下stream,像這樣:

events {

worker_connections 1024;
accept_mutex on;
accept_mutex_delay 300ms; # 互斥條件下進程等待時間為300毫秒
worker_aio_requests 128; # 完成异步操作最大數為128
multi_accept on; //盡可能多的接受請求
}
stream {

upstream MyServer{
 # 定義一個upstream組,名為MyServer
# 這裏配置成要訪問的 IP:Port
# 這裏選用權重輪詢負載算法,weight為權重
server 192.168.190.129:6000 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.190.129:6002 weight=1 max_fails=3 fail_timeout=30s;
# max_fails :錶示10s內失敗幾次,則標記server已宕機,剔出上遊服務。10s清零一次
# fail_timeout :錶示失敗時候熔斷時間。時間過後繼續回來重試
}
server {

proxy_connect_timeout 1s;
listen 8000;
proxy_pass MyServer; # 把TCP通信發送到upstream的哪個server中去,可以指定端口,但是這裏沒必要
tcp_nodelay on;
}
}
http {


負載均衡算法

前面提到了權重負載,這裏再列舉幾種:
a):least-connected :對於每個請求,nginx plus選擇當前連接數最少的server來處理

upstream MyServer{

least_conn;
server 192.168.190.129:6000;
server 192.168.190.129:6001;
server 192.168.190.129:6002;
}

b)ip_hash :客戶機的IP地址用作散列鍵,用於確定應該為客戶機的請求選擇服務器組中的哪個服務器。

upstream MyServer{

ip_hash;
server 192.168.190.129:6000;
server 192.168.190.129:6001;
server 192.168.190.129:6002;
}

與之對應的還有url_hash。

c)fair,按後端服務器的響應時間來分配請求,響應時間短的優先分配。

upstream MyServer{

server 192.168.1.10:8080;
server 192.168.1.11:8080;
fair;
}

指令參數

a)max_conns,限制每臺server的連接數,用於保護避免過載,可起到限流作用。

upstream MyServer{

server 192.168.190.129:6000 max_conns=2;
server 192.168.190.129:6001 max_conns=2;
server 192.168.190.129:6002 max_conns=2;
}

b)slow_start

upstream MyServer{

server 192.168.190.129:6000 weight=6 slow_start=60s;
server 192.168.190.129:6001 weight=2;
server 192.168.190.129:6002;
}

1、該參數不能使用在 hash 和 random load balancing 中。
2、如果在 upstream 中只有一臺 server,則該參數失效


c)down、backup:
down 用於標記服務節點不可用,backup 錶示當前服務器節點是備用機,只有在其他的服務器都宕機以後,自己才會加入到集群中,被用戶訪問到。

upstream MyServer{

server 192.168.51.5:8080 down;
server 192.168.51.6:8080 weight=1;
server 192.168.51.5:8080 backup;
}

backup 參數不能使用在 hash 和 random load balancing 中。


d)Keepalived 長連接緩存數。當Nginx與被代理服務器建立長連接時,設定每個工作進程可以緩存與當前上遊服務器組中被代理服務器保持長連接的數量。當超過設定值時,將根據最近最少使用算法(LRU)進行關閉。

upstream MyServer{

·····
keepalive 32; # 設置連接池大小
}

e)keepalive_requests 長連接最大請求數
默認值100,設置每個與被代理服務器建立的長連接中傳輸請求的最大數量,超過這個值後,該連接將被斷掉。也可做防洪使用,看個人怎麼使用了。


f)keepalive_timeout 長連接緩存超時時間,默認60s。
設置長連接緩存,每個連接的超時時間,被緩存的連接超過這個時間認為被激活使用時將被關閉。

還有很多的配置,只要你敢想。
比如說:限制並發數、限制IP訪問、根據IP分流等


nginx 監控

待完善

版权声明:本文为[看,未來]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201070530590365.html