简单测试nginx1.90做TCP协议负载均衡的功能
最近工作中需要做TCP层面的负载均衡,以前网站用的反向代理nginx只支持应用层的负载均衡,对于TCP协议是无能为力的,需要使用LVS(linux虚拟服务器)。
LVS的特点是高性能和极复杂的配置、对网络环境的要求比较高。最近苦于LVS的配置测试,网上的文档和社区都比较少,按照各种教程配置,TCP报文均无法连通,再往下深究就要去研究公司虚机的网络结构了...
在寻找LVS配置调试方法时,看到一篇最近的文章讲4月28日刚刚发布的nginx1.90,添加了支持TCP协议的负载均衡的,如果只是需要做TCP协议的负载均衡的话,这个是可以满足需求的。如果涉及到UDP或者传输层以上的其他协议,那就必须得继续死磕LVS了。
下面测试nginx代理TCP协议的配置。
realserver : 10.134.241.68
nginx :10.134.72.166
客户端:10.129.157.168
TCP监听端口:2014
一、配置nginx
看官网上的文档 http://nginx.org/en/docs/stream/ngx_stream_core_module.html
nginx1.90对TCP协议的代理并不是默认开启的,需要在编译的时候配置 --with-stream 参数:

nginx.config文件参照官网:
stream {
upstream cloudsocket {
hash $remote_addr consistent;
server 10.134.241.68:2014 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 2014;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass cloudsocket;
}
}
启动nginx,发现nginx已经开始监听2014端口了

二、测试客户端连realserver
在客户端通过telnet连接realserver的2014端口:


在realserver上查看网络连接:

可以正常连接
三、测试客户端连接nginx
在客户端通过telnet连接nginx所在服务器的2014端口


在nginx机器上查看网络连接

在realserver上查看网络连接

可以注意到nginx是给做了一个TCP连接的中转。
实际上这种负载均衡的方式有点像LVS的 VS/NAT 工作模式,数据报文的发送和接收都要经过负载均衡器,有需要替换的话这两种技术是可以平滑过渡的。
它可以运算处理能力的瓶颈,但是当用户请求越来越多时,nginx的处理能力将成为瓶颈。
简单测试nginx1.90做TCP协议负载均衡的功能的更多相关文章
- Nginx基于TCP的负载均衡的配置例子
原文:https://blog.csdn.net/bigtree_3721/article/details/72833955 nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 ...
- nginx如何做到TCP的负载均衡
原文:https://blog.csdn.net/u011218159/article/details/50966861 TCP 的 负载均衡 这个片段描述了如何通过nginx plus进行负 ...
- 主要从架构上来做优化,负载均衡、CDN、静态化、数据库的水平切割和纵向切割、读写分离、分布式缓存着手
语言知识一种工具,甚至技术本身也只是一种工具,本身并不值钱,关键在于用于何种行业,产生了什么价值. 但从语言来看,我个人更喜欢php,然后是C#,然后是java从框架而言,先是java,然后C#,再次 ...
- Nginx做NodeJS应用负载均衡配置实例
这篇文章主要介绍了Nginx做NodeJS应用负载均衡配置实例,本文直接给出配置实例,需要的朋友可以参考下. 负载均衡可以把用户的请求分摊到多个服务器上进行处理,从而实现了对海量用户的访问支持.负载均 ...
- Nginx负载均衡——基础功能
熟悉Nginx的小伙伴都知道,Nginx是一个非常好的负载均衡器.除了用的非常普遍的Http负载均衡,Nginx还可以实现Email,FastCGI的负载均衡,甚至可以支持基于Tcp/UDP协议的各种 ...
- 使用 shell 做 tcp 协议模拟
问题背景 公司有一套消息推送系统(简称GCM),由于人事变动接手了其中的客户端部分.看了一下文档,仅通讯协议部分有几页简单的说明,代码呢又多又乱,一时理不出一个头绪.由于消息是从后台推送到端的,所以使 ...
- HAProxy安装配置用于TCP的负载均衡
HaProxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备.虚拟主机.基于TCP和HTTP应用代理等功能.其配置简单,而且拥有很好的对服务器节点的健康检 ...
- 使用ngnix做服务器的负载均衡
(1) 进程数与每个进程的最大连接数: nginx进程数,建议设置为等于CPU总核心数 单个进程最大连接数,那么该服务器的最大连接数=连接数*进程数 (2) Ngnix的基本配置 监听端口一般都为h ...
- nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP
nginx做反向负载均衡,后端服务器获取真实客户端ip 首先,在前端nginx上需要做如下配置: location / proxy_set_hearder host ...
随机推荐
- WPF-禁止二次启动
App.xaml.cs protected override void OnStartup(StartupEventArgs e) { //禁止二次启动 this.Startup += new Sta ...
- Object-C与Swift混编
1.在Object-C项目中调用Swift 1.1.创建一个Object-C project(项目名例如:YYDemo) 如下图 1.2.创建一个Swift Class,如下图 这里会显示是否需要创建 ...
- jQuery 获取屏幕高度、宽度
做手机Web开发做浏览器兼容用到了,所以在网上找了些汇总下. alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).height()) ...
- 多线程、委托、Invoke解决winform界面卡死的问题,并带开关
一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...
- IE6 的兼容相关问题
因为在实习公司要求兼容IE6+,所以将IE6相关的样式兼容问题列出,及解决方案. 1.让页面变丑的透明背景图片问题: HTML都为以下代码: <div class="img-png&q ...
- BOM对象有哪些:
BOM对象有哪些: 1.window对象 ,是JS的最顶层对象,其他的BOM对象都是window对象的属性: 2.document对象,文档对象: 3.location对象,浏览器当前URL信息: 4 ...
- C\C++中声明与定义的区别
声明和定义是完全同的概念,声明是告诉编译器"这个函数或者变量可以在哪找到,它的模样像什么".而定义则是告诉编译器,"在这里建立变量或函数",并且为它们分配内存空 ...
- MyEclipse新建web project和navicat110_mysql_en工具
首先注意几点: 1.eclipse web项目:项目名称不得超过五个字符,要求全部小写,不管变量名.类名.函数名.文件名,在没有特殊理由的时候,不要用下划线,同时表名和类名用两个单词,尽量不要用Stu ...
- Java多线程7:死锁
前言 死锁单独写一篇文章是因为这是一个很严重的.必须要引起重视的问题.这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只 ...
- Python黑帽编程 3.5 DTP攻击
Python黑帽编程 3.5 DTP攻击 在上一节,<Python黑帽编程 3.4 跨越VLAN>中,我们讨论了一般的VLAN中实施攻击的方法,这一节属于扩展内容,简单演示下Cisco特有 ...