工作上遇到需要用nginx做负载均衡,参考了前同事留下的作业顺利搞定,感觉这块很有意义写篇文档记录。

参考:nginx tcp负载均衡(Stream模块)配置说明

参考:利用nginx进行TCP负载均衡实战

直接上配置

user  nginx;
worker_processes 2; error_log /var/log/error.log warn;
pid /var/run/nginx.pid; events {
worker_connections 1024;
} stream {
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; access_log /var/log/nginx/access.log proxy; upstream stream_backend {
least_conn; ## 默认是轮询算法,这里修改为:least-connected :对于每个请求,nginx选择当前连接数最少的server来处理 server 192.168.230.25:10014 max_fails=2 fail_timeout=30s;
server 192.168.230.61:10014 max_fails=2 fail_timeout=30s; server {
listen 443 ssl;
proxy_protocol on;
ssl_certificate keys/xx.pem;
ssl_certificate_key keys/xx.pem;
proxy_pass stream_backend;
proxy_timeout 3600s;
proxy_connect_timeout 10s;
}
}

这个配置比较好理解,项目上有需要也可以直接用。

stream 模块介绍

参考:NGINX Stream模块原理及代码分析

从1.9.0开始,NGINX增加了stream模块用来实现四层协议的转发、代理和负载均衡。

与著名的四层LB软件lvs相比,stream 模块(开源版)无论从功能还是性能上,都有一定的差距,实现也相对简单。从性能上来说,stream模块在应用层实现四层的转发,需要与两端建立起socket连接,然后两端的数据收发进行代理转发。因此,大量的数据从内核态到用户态再从用户态到内核态传递。这些数据copy加上系统调度的开销,使得它的性能与纯内核态转发的lvs相比,有一定差距。

在用户态做四层的proxy,从原理上讲主要有如下步骤:

  • 创建一个socket 监听client连接。

  • Client连接到来以后,使用load balancer算法选取一个正确的upstream 服务器并且建立socket连接。

  • 把从client收到的数据转发给upstream server,同时把upstream server收到的数据转发给client。

日志格式解释

$remote_addr:客户端的IP地址。
$time_local:请求的时间和日期。
$protocol:请求使用的协议(例如HTTP/1.1)。
$status:响应的状态码。
$bytes_sent:发送给客户端的字节数。
$bytes_received:从客户端接收的字节数。
$session_time:请求的处理时间。
$upstream_addr:后端服务器的IP地址和端口号。
$upstream_bytes_sent:发送给后端服务器的字节数。
$upstream_bytes_received:从后端服务器接收的字节数。
$upstream_connect_time:与后端服务器建立连接的时间。

Nginx TCP 负载均衡:stream 模块配置的更多相关文章

  1. Nginx 反向代理功能-实现Nginx tcp负载均衡

    Nginx 反向代理功能-实现Nginx tcp负载均衡 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  2. Nginx专题(2):Nginx的负载均衡策略及其配置

    本文介绍了Nginx的负载均衡策略,一致性hash分配原理,及常用的故障节点的摘除与恢复配置. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方数据团队高级技术经理 ...

  3. Centos7 nginx的负载均衡概念与配置

    一.负载均衡概念 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单 ...

  4. nginx tcp负载均衡配置

    1. nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译需添加--with-stream配置参数 2. 在 nginx.conf 文件中, 与 ...

  5. nginx tcp负载均衡 (Module ngx_stream_upstream_module)

    Example ConfigurationDirectives     upstream     server     zone     state     hash     least_conn   ...

  6. 【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)

    说明:很简单一个在HTTP模块中,而另外一个和HTTP 是并列的Stream模块(Nginx 1.9.0 支持) 一.两个模块的最简单配置如下 1.HTTP负载均衡: http { include m ...

  7. Nginx作为TCP负载均衡

    参考文档:https://www.cnblogs.com/stimlee/p/6243055.html Nginx在1.9版本以后支持TCP负载均衡,模块默认是没有编译的,需要编译时添加—with-s ...

  8. Nginx之负载均衡配置(一)

    前文我们聊了下nginx作为反向代理服务器,代理后端动态应用服务器的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12430543.html:今天我们来聊 ...

  9. 14.Nginx四层负载均衡

    1.七层负载均衡: 根据url 调度不同的集群 url.cheng.com 10.0.0.5 10.0.0.7 /pass 10.0.0.8 /user 1.web01和web02配置 (只不过代码不 ...

  10. Nginx网络负载均衡,负载均衡,网络负载,网络均衡

    本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...

随机推荐

  1. C++ ATL + WTL 选择文件

    1 #include "stdafx.h" 2 #include "CStringHelper.h" 3 #include "AFileEngine. ...

  2. 开发 Diffusers 库的道德行为指南

    我们正在努力让我们每次发布的库更加负责! 我们很荣幸宣布我们发布了 道德守则,并将作为一部分其放入  Diffusers 库的说明文档. 由于扩散模型在现实世界上的实际应用例子会对社会造成潜在的负面影 ...

  3. 如何理解 Spring Boot 中的 Starter ?

    假如 没有 Spring Boot Starter,我们有两种方式来创建 Spring Bean. spring xml 模式 (远古模式,并不推荐) spring API 来创建 Spring Be ...

  4. 2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Intel Quick Sync Video 等)对视频进行解码,从而提高解码效

    2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA.Intel Quick Sync Video 等)对视频进行解码,从而提高解码效 ...

  5. vue全家桶进阶之路25:Vue2的停维通知

    Vue 2 的技术支持会持续多久?从官方发文来看,Vue 2.7 是当前.同时也是最后一个 Vue 2.x 的次级版本更新.Vue 2.7 会以其发布日期,即 2022 年 7 月 1 日开始计算,提 ...

  6. 解决:Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。

    启动django应用时报如下错误:Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试. 1.首先退出酷狗音乐再试试 2.是8000端口被其他程序占用了, ...

  7. 计算机网络 VRRP和DHCP

    目录 一.vrrp概念 二.vrrp工作过程 三.vrrp优先级 四.vrrp实验 五.DHCP概念 六.DHCP工作过程 七.DHCP实验 一.vrrp概念 概念:称虚拟路由器冗余协议,当网关路由器 ...

  8. Cobalt Strike 连接启动教程(1)

      第一步:把cobaltstrike4(解压后)拷贝到虚拟机Kali系统的root目录下 第二步:进入cobalstrike4文件夹中 第三步:选寻kali系统 IP地址 第四步: 启动服务端:(t ...

  9. Metabase可视化BI系统部署安装及简单使用

    Metabase 是国外开源的一个可视化系统,语言使用了Clojure + TypeScript. Clojure(/ˈkloʊʒər/)是Lisp程式語言在Java平台上的現代.動態及函數式方言.来 ...

  10. 如何制作 Storybook Day 网页上的 3D 效果?

    Storybook 刚刚达到了一个重要的里程牌:7.0 版本!为了庆祝,该团队举办了他们的第一次用户大会 - Storybook Day.为了更特别,在活动页面中添加了一个视觉上令人惊叹的 3D 插图 ...