1. 4層 vs 7層
負載均衡 |
共同點 |
區別 | 具體使用 |
應用場景 |
4層 |
負載均衡 |
傳輸層 埠 tcp,udp 對埠進行負載均衡 |
stream_upstream,proxy_pass |
埠轉發,推薦lvs |
7層 |
負載均衡 |
應用層對http/https請求進行處理,轉發server_name,location(匹配uri),UA,XFF(http協議) |
http_upstream,proxy_pass |
http協議相關 |
4層負載均衡
7層負載均衡
2. 4層負載均衡實戰
使用流程:
- 檢查ngx是否有4層負載均衡的模組.
- 準備環境nc命令建立埠即可.
- 負載均衡配置檔案與除錯
2.1 檢查模組
[root@web01 ~]# nginx -V |& grep stream
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=modules/ngx_http_upstream_check_module
--with-stream 有這個即可 不要是--with-stream=dynamic
如果沒有重新編譯nginx
或者寫下4層負載均衡的配置看看是否能識別stream指令,不報錯
2.2 建立8848埠
# 使用 nc(Netcat)命令在埠 8000 上啟動一個監聽服務的步驟如下:
1.開啟終端:在你的作業系統中開啟命令列介面(Windows 的 CMD,Linux 或 macOS 的終端)。
執行命令:輸入以下命令並按回車:
nc -kl 8000
這裡的選項含義如下:
-k:保持監聽狀態,即使在連線關閉後仍然繼續監聽。
-l:表示監聽模式。
2. 等待連線:此時,nc 將在埠 8000 上等待連線。任何連線到該埠的客戶端都可以傳送訊息。
3. 接收訊息:一旦有客戶端連線併傳送訊息,你將在終端中看到這些訊息。
4. 退出監聽:要停止 nc,可以使用 Ctrl + C。
# 示例
假設你在一臺機器上執行上述命令,然後在另一臺機器上使用 telnet 或另一個 nc 例項連線到該埠:
telnet <你的IP地址> 8000
或者:
nc <你的IP地址> 8000
然後你可以輸入訊息併傳送,這些訊息將在執行 nc -kl 8000 的終端中顯示。
# 注意事項
確保防火牆設定允許透過埠 8000 的流量。
如果在同一臺機器上測試,可以使用 localhost 或 127.0.0.1 作為 IP 地址。
web伺服器啟動監聽服務
root@web01 ~]# nc -kl 8808
root@web01 ~]# nc -kl 8808
2.3 書寫負載均衡配置檔案
⚠ 不要寫到子配置檔案中
log_format參考:https://nginx.org/en/docs/stream/ngx_stream_log_module.html
/etc/nginx/nginx.conf
[root@lb01 ~]# cat /etc/nginx/nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
# ----- start-----
stream{
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
access_log /var/log/nginx/l4_access.log basic;
upstream l4_spools {
server 10.0.0.69:8808;
server 10.0.0.70:8808;
}
server {
listen 8808;
proxy_pass l4_spools;
}
}
# ---- end -----
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
2.4 測試
其他機器(任何連線到該埠的客戶端)執行 telnet 10.0.0.75 8808傳送資料