負載均衡4層

老虎死了还有狼發表於2024-11-05

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層負載均衡

負載均衡4層

7層負載均衡

負載均衡4層

2. 4層負載均衡實戰

使用流程:

  1. 檢查ngx是否有4層負載均衡的模組.
  2. 準備環境nc命令建立埠即可.
  3. 負載均衡配置檔案與除錯

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傳送資料

負載均衡4層

相關文章