负载均衡4层

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层负载均衡实战

使用流程:

  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发送数据

 

posted @ 2024-11-05 10:54  老虎死了还有狼  阅读(7)  评论(0编辑  收藏  举报