您的位置:首頁 > 軟件教程 > 教程 > Nginx負載配置

Nginx負載配置

來源:好特整理 | 時間:2024-07-07 08:49:06 | 閱讀:77 |  標簽: in 配置   | 分享到:

目錄Nginx 負載均衡筆記1. 概述1.1 Nginx 簡介1.2 負載均衡概述2. 四層負載均衡(傳輸層)2.1 工作原理2.2 特點2.3 優(yōu)缺點優(yōu)點缺點2.4 示例場景3. 七層負載均衡(應用層)3.1 工作原理3.2 特點3.3 優(yōu)缺點優(yōu)點缺點3.4 示例場景4. Nginx 調(diào)度算法4.

Nginx 負載均衡筆記

1. 概述

1.1 Nginx 簡介

Nginx 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。Nginx 以其高性能、穩(wěn)定性、豐富的功能集、簡單的配置文件以及低系統(tǒng)資源消耗而聞名。

1.2 負載均衡概述

負載均衡是一種將工作負載分攤到多個服務器上的技術,以提高網(wǎng)站、應用或數(shù)據(jù)庫的性能和可靠性。負載均衡器可以在不同的網(wǎng)絡層級實現(xiàn),最常見的是第 4 層(傳輸層)和第 7 層(應用層)負載均衡。

2. 四層負載均衡(傳輸層)

2.1 工作原理

第 4 層負載均衡基于傳輸層協(xié)議(如 TCP 和 UDP)進行負載均衡。Nginx 作為第 4 層負載均衡器時,會基于 IP 地址和端口將請求分發(fā)到后端服務器。

2.2 特點

  • 透明性: 第 4 層負載均衡器只處理網(wǎng)絡層和傳輸層的數(shù)據(jù)包,不關心應用層的數(shù)據(jù)內(nèi)容。
  • 高效性: 因為不需要解析應用層數(shù)據(jù)包,處理速度快,性能高。
  • 簡單性: 配置較為簡單,適用于不需要復雜應用層處理的場景。

2.3 優(yōu)缺點

優(yōu)點

  • 高性能: 因為只處理傳輸層的數(shù)據(jù)包,Nginx 可以高效地轉發(fā)請求。
  • 廣泛適用: 可以處理任何基于 TCP 或 UDP 的應用。

缺點

  • 功能有限: 無法基于應用層內(nèi)容(如 URL、頭信息)進行負載均衡。
  • 調(diào)試復雜: 因為透明性,難以對應用層問題進行調(diào)試。

2.4 示例場景

  • TCP 負載均衡: 適用于需要將 TCP 流量分發(fā)到多個后端服務器的場景,如數(shù)據(jù)庫連接池。
  • UDP 負載均衡: 適用于需要將 UDP 流量分發(fā)到多個后端服務器的場景,如 DNS 請求。

3. 七層負載均衡(應用層)

3.1 工作原理

第 7 層負載均衡基于應用層協(xié)議(如 HTTP 和 HTTPS)進行負載均衡。Nginx 作為第 7 層負載均衡器時,會解析 HTTP 請求,并基于請求的內(nèi)容(如 URL、頭信息、Cookies)將請求分發(fā)到后端服務器。

3.2 特點

  • 靈活性: 第 7 層負載均衡器可以基于應用層的任何信息進行復雜的負載均衡決策。
  • 可見性: 可以解析并記錄詳細的請求信息,便于監(jiān)控和調(diào)試。
  • 安全性: 可以基于請求內(nèi)容進行安全過濾和權限控制。

3.3 優(yōu)缺點

優(yōu)點

  • 靈活性高: 可以基于 URL、頭信息、Cookies 等進行復雜的負載均衡。
  • 強大的功能: 支持 SSL 終結、緩存、壓縮、請求重寫等高級功能。
  • 可擴展性: 易于擴展和集成其他應用層服務,如 WAF、認證等。

缺點

  • 性能開銷: 因為需要解析和處理應用層數(shù)據(jù)包,性能開銷較大。
  • 配置復雜: 需要更多的配置和管理工作,特別是在復雜的應用場景中。

3.4 示例場景

  • HTTP 負載均衡: 適用于需要將 HTTP 請求分發(fā)到多個后端 Web 服務器的場景。
  • HTTPS 負載均衡: 適用于需要處理 HTTPS 請求,并將其分發(fā)到多個后端服務器的場景。
  • 基于 URL 的負載均衡: 適用于需要將不同路徑的請求分發(fā)到不同服務器的場景。
  • 基于 Cookies 的會話保持: 適用于需要基于用戶會話將請求分發(fā)到同一服務器的場景。

4. Nginx 調(diào)度算法

4.1 輪詢(Round Robin)

  • 簡介: 將請求依次分發(fā)給每個后端服務器,循環(huán)進行。
  • 特點: 簡單易用,適用于負載均衡較為均勻的場景。

4.2 最小連接數(shù)(Least Connections)

  • 簡介: 將請求分發(fā)給當前活動連接數(shù)最少的后端服務器。
  • 特點: 適用于請求處理時間差異較大的場景。

4.3 IP 哈希(IP Hash)

  • 簡介: 基于客戶端 IP 地址計算哈希值,將請求分發(fā)給對應的后端服務器。
  • 特點: 適用于需要會話保持的場景,確保同一客戶端的請求始終分發(fā)到同一服務器。

4.4 加權輪詢(Weighted Round Robin)

  • 簡介: 根據(jù)服務器的權重進行輪詢,權重高的服務器分配更多的請求。
  • 特點: 適用于后端服務器性能不一致的場景。

5. 四層負載配置示例

需求:使用nginx監(jiān)聽8888端口,后端服務器均為MySQL,并且MySQL為主從模式,客戶端將訪問nginx提供的8888端口來連接MySQL

我這里只是模擬,所以數(shù)據(jù)庫里面是空的,沒有任何庫,表

主機名/服務 IP 端口
oe01 Nginx 192.168.200.170 8888
oe02 Mysql01 192.168.200.171 3306
oe03 Mysql02 192.168.200.172 3306

5.1 安裝并啟動數(shù)據(jù)庫

[root@oe02~]# yum install mariadb-server -y
[root@oe03 ~]# yum install mariadb-server -y
[root@oe02 ~]# systemctl enable --now mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
[root@oe03 ~]# systemctl enable --now mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.

# 初始化數(shù)據(jù)庫
[root@oe02 ~]# mysql_secure_installation
[root@oe03 ~]# mysql_secure_installation

5.2 開啟root遠程連接權限

如果不開啟遠程連接權限的話,是不能夠連接上數(shù)據(jù)庫的,此時的數(shù)據(jù)庫只能夠本地進行使用,所以我們需要開啟遠程權限

[root@oe02 ~]# mysql -uroot -p123
MariaDB [(none)]> grant all privileges on *.* to 'root'@'123' identified by '123';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

[root@oe03 ~]# mysql -uroot -p123
MariaDB [(none)]> grant all privileges on *.* to 'root'@'123' identified by '123';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

5.3 配置Nginx

[root@oe01 ~]# vim /etc/nginx/nginx.conf

# 在末尾加上這一段配置
stream {
        upstream db {
                server 192.168.200.171:3306;
                server 192.168.200.172:3306;
                }
        server {
                listen 8888;
                proxy_pass db;
        }
}

配置解釋:

  • 一定要在 /etc/nginx/nginx.conf 里面加入這一段配置,如果在 conf.d 目錄下寫的話會報錯的,因為這個是四層負載,而你將配置寫在 conf.d 下的話他是會被加載到http段落里面去的,http屬于7層,所以他會報錯
  • upstream db :表示定義一個后端服務器組,這個組的名字叫做db,在這個段落里面使用server來指定主機和端口
  • server段落:這里就是配置虛擬主機,監(jiān)聽8888端口

5.4 重啟nginx并測試

[root@oe01 ~]# systemctl restart nginx

現(xiàn)在我們使用客戶端來連接mysql

[root@oe01 ~]# mysql -uroot -p123 -h 192.168.200.170 -P 8888
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.5.5-10.5.25-MariaDB MariaDB Server

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

客戶端成功的連接上了數(shù)據(jù)庫,并且使用的地址是Nginx的地址,端口也是Nginx監(jiān)聽的端口

6. 七層負載配置示例

四層的負載是需要定義在http段落以外的,而七層的負載就可以定義在http段落內(nèi)了,也就是說我們可以將負載的配置文件單獨寫一個并放在 /etc/nginx/conf.d/

需求:使用nginx輪詢的策略負載后端的web服務

主機名/服務 IP
oe01 Nginx負載 192.168.200.170
oe02 Nginx01 192.168.200.171
oe03 Nginx02 192.168.200.172

從這個規(guī)劃來,第一個nginx不提供web服務,只提供對后端的負載

6.1 配置web服務器

# 安裝nginx
[root@oe02 ~]# yum install nginx -y
[root@oe03 ~]# yum install nginx -y

# 啟動nginx
[root@oe02 ~]# systemctl start nginx
[root@oe03 ~]# systemctl start nginx

# 編寫index.html
[root@oe02 ~]# echo "hello nginx01" >/usr/share/nginx/html/index.html 
[root@oe02 ~]# echo "hello nginx02" >/usr/share/nginx/html/index.html 

我們的web服務器就配置好了,接下來配置Nginx的負載均衡

6.2 配置負載均衡

[root@oe01 ~]# cd /etc/nginx/conf.d/
[root@oe01 conf.d]# vim load.conf

upstream webserver {
     server 192.168.200.171:80;
     server 192.168.200.172:80;
}
server {
    listen 80;
    location / {
        proxy_pass http://webserver;
    }
}

6.3 重啟nginx并測試

[root@oe01 conf.d]# systemctl restart nginx

客戶端測試

C:\Users\86156>curl 192.168.200.170
hello nginx01

C:\Users\86156>curl 192.168.200.170
hello nginx02

C:\Users\86156>curl 192.168.200.170
hello nginx01

C:\Users\86156>curl 192.168.200.170
hello nginx02
小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認同期限觀點或證實其描述。

相關視頻攻略

更多

掃二維碼進入好特網(wǎng)手機版本!

掃二維碼進入好特網(wǎng)微信公眾號!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權,請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)