工作上遇到需要用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. extend笔记

    JavaScript面向对象 继承extend 1. 概念(主要用途) 将子类中的共性代码 ( 属性和方法 ) 抽取出来 放到父类中 每当有一个新的子类需要用到共性的属性或者方法时 不需要在自己内容复 ...

  2. mongodb使用自带命令工具导出导入数据

    记录 mongo 数据库用原生自带的命令工具使用 json 文件方式进行导入.导出的操作! 在一次数据更新中,同事把老数据进行了清空操作,但是新的逻辑数据由于某种原因(好像是她的电脑中病毒了),一直无 ...

  3. Tomacat乱码和报错UTF-8 序列的字节 2 无效和‘application/json;charset=UTF-8‘ not supported的处理

    文章目录 前言 1. tomcat乱码的处理方法 2. applicationContext.xml报错2 字节的 UTF-8 序列的字节 2 无效 3. 报错'application/json;ch ...

  4. cryptohack wp day(1)

    就从头开始吧 第一题 (ASCII) 一道简单的ASCII码转换,直接用题目的提示代码解就行了 ascii=[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, ...

  5. 2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109

    2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值. 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109 ...

  6. 2022-10-07:给定员工的 schedule 列表,表示每个员工的工作时间。 每个员工都有一个非重叠的时间段 Intervals 列表,这些时间段已经排好序。 返回表示 所有 员工的 共同,正

    2022-10-07:给定员工的 schedule 列表,表示每个员工的工作时间. 每个员工都有一个非重叠的时间段 Intervals 列表,这些时间段已经排好序. 返回表示 所有 员工的 共同,正数 ...

  7. 2022-09-17:一个字符串s,表示仓库的墙 与 货物,其中‘|‘表示墙,‘*‘表示货物。 给定一个起始下标start和一个终止下标end, 找出子串中 被墙包裹的货物 数量。 比如: s = “

    2022-09-17:一个字符串s,表示仓库的墙 与 货物,其中'|'表示墙,''表示货物. 给定一个起始下标start和一个终止下标end, 找出子串中 被墙包裹的货物 数量. 比如: s = &q ...

  8. 都说DevOps落地难,到底难在哪里?也许你还没找到套路

    当你打开这篇文章的时候,也许你也在为DevOps的落地而苦恼,也许你的组织正在尝试DevOps转型,作为一线的实践者,说说我对这个"落地难"的看法,欢迎交流不同看法- DevOps ...

  9. [ABC270D] Stones

    [ABC270D] Stones 题意 有两个人玩游戏,有 \(n\) 个石子,和一个长度为 \(k\) 的序列,每次可以取 \(a_i\) 个但前提是剩下来的石子数有 \(a_i\) 个,第一个人先 ...

  10. Charles一文全明白

    自从用上了Mac本,抓包工具也从Fiddler换成了Charles,用了这么长时间,也是该对Charles做一个总结了,避免自己下次配置的时候又忘记怎么操作 1.Charles是什么? Charles ...