当前位置: 代码网 > 服务器>服务器>Linux > 在Nginx服务器中怎么配置针对TCP的负载均衡

在Nginx服务器中怎么配置针对TCP的负载均衡

2025年03月30日 Linux 我要评论
一、安装nginx1.下载nginx# wget http://nginx.org/download/nginx-1.2.4.tar.gz登录后复制2.下载tcp模块补丁# wget https://

一、安装nginx
1.下载nginx

# wget http://nginx.org/download/nginx-1.2.4.tar.gz
登录后复制

2.下载tcp模块补丁

# wget https://github.com/yaoweibin/nginx_tcp_proxy_module/tarball/master
登录后复制

源码主页: https://github.com/yaoweibin/nginx_tcp_proxy_module

3.安装nginx

# tar xvf nginx-1.2.4.tar.gz
# tar xvf yaoweibin-nginx_tcp_proxy_module-v0.4-45-ga40c99a.tar.gz
# cd nginx-1.2.4
# patch -p1 <p><strong>二、修改配置文件<br></strong>修改nginx.conf配置文件<br></p><pre class="brush:bash;"># cd /usr/local/nginx/conf
# vim nginx.conf
登录后复制
worker_processes 1;
events {
worker_connections 1024;
}

tcp {
upstream mssql {
server 10.0.1.201:1433;
server 10.0.1.202:1433;
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 1433;
server_name 10.0.1.212;
proxy_pass mssql;
}
}
登录后复制

三、启动nginx

# cd /usr/local/nginx/sbin/
# ./nginx
登录后复制

查看1433端口:

#lsof :1433
登录后复制

四、测试

# telnet 10.0.1.201 1433
登录后复制

五、使用sql server client工具测试

在nginx服务器中怎么配置针对tcp的负载均衡

六、tcp负载均衡的执行原理
当nginx从监听端口收到一个新的客户端链接时,立刻执行路由调度算法,获得指定需要连接的服务ip,然后创建一个新的上游连接,连接到指定服务器。

在nginx服务器中怎么配置针对tcp的负载均衡

tcp负载均衡支持nginx原有的调度算法,包括round robin(默认,轮询调度),哈希(选择一致)等。同时,调度信息数据也会和健壮性检测模块一起协作,为每个连接选择适当的目标上游服务器。如果使用hash负载均衡的调度方法,你可以使用$remote_addr(客户端ip)来达成简单持久化会话(同一个客户端ip的连接,总是落到同一个服务server上)。

和其他upstream模块一样,tcp的stream模块也支持自定义负载均和的转发权重(配置“weight=2”),还有backup和down的参数,用于踢掉失效的上游服务器。max_conns参数可以限制一台服务器的tcp连接数量,根据服务器的容量来设置恰当的配置数值,尤其在高并发的场景下,可以达到过载保护的目的。

nginx监控客户端连接和上游连接,一旦接收到数据,则nginx会立刻读取并且推送到上游连接,不会做tcp连接内的数据检测。nginx维护一份内存缓冲区,用于客户端和上游数据的写入。如果客户端或者服务端传输了量很大的数据,缓冲区会适当增加内存的大小。

在nginx服务器中怎么配置针对tcp的负载均衡

当nginx收到任意一方的关闭连接通知,或者tcp连接被闲置超过了proxy_timeout配置的时间,连接将会被关闭。对于tcp长连接,我们更应该选择适当的proxy_timeout的时间,同时,关注监听socke的so_keepalive参数,防止过早地断开连接。

ps:服务健壮性监控

tcp负载均衡模块支持内置健壮性检测,一台上游服务器如果拒绝tcp连接超过proxy_connect_timeout配置的时间,将会被认为已经失效。在这种情况下,nginx立刻尝试连接upstream组内的另一台正常的服务器。连接失败信息将会记录到nginx的错误日志中。

如果一台服务器,反复失败(超过了max_fails或者fail_timeout配置的参数),nginx也会踢掉这台服务器。服务器被踢掉60秒后,nginx会偶尔尝试重连它,检测它是否恢复正常。如果服务器恢复正常,nginx将它加回到upstream组内,缓慢加大连接请求的比例。

之所“缓慢加大”,因为通常一个服务都有“热点数据”,也就是说,80%以上甚至更多的请求,实际都会被阻挡在“热点数据缓存”中,真正执行处理的请求只有很少的一部分。在机器刚刚启动的时候,“热点数据缓存”实际上还没有建立,这个时候爆发性地转发大量请求过来,很可能导致机器无法“承受”而再次挂掉。以mysql为例子,我们的mysql查询,通常95%以上都是落在了内存cache中,真正执行查询的并不多。

其实,无论是单台机器或者一个集群,在高并发请求场景下,重启或者切换,都存在这个风险,解决的途径主要是两种:

(1)请求逐步增加,从少到多,逐步积累热点数据,最终达到正常服务状态。
(2)提前准备好“常用”的数据,主动对服务做“预热”,预热完成之后,再开放服务器的访问。

tcp负载均衡原理上和lvs等是一致的,工作在更为底层,性能会高于原来http负载均衡不少。但是,不会比lvs更为出色,lvs被置于内核模块,而nginx工作在用户态,而且,nginx相对比较重。另外一点,令人感到非常可惜,这个模块竟然是个付费功能。

tcp负载均衡模块支持内置健壮性检测,一台上游服务器如果拒绝tcp连接超过proxy_connect_timeout配置的时间,将会被认为已经失效。在这种情况下,nginx立刻尝试连接upstream组内的另一台正常的服务器。连接失败信息将会记录到nginx的错误日志中。

在nginx服务器中怎么配置针对tcp的负载均衡

如果一台服务器,反复失败(超过了max_fails或者fail_timeout配置的参数),nginx也会踢掉这台服务器。服务器被踢掉60秒后,nginx会偶尔尝试重连它,检测它是否恢复正常。如果服务器恢复正常,nginx将它加回到upstream组内,缓慢加大连接请求的比例。

之所“缓慢加大”,因为通常一个服务都有“热点数据”,也就是说,80%以上甚至更多的请求,实际都会被阻挡在“热点数据缓存”中,真正执行处理的请求只有很少的一部分。在机器刚刚启动的时候,“热点数据缓存”实际上还没有建立,这个时候爆发性地转发大量请求过来,很可能导致机器无法“承受”而再次挂掉。以mysql为例子,我们的mysql查询,通常95%以上都是落在了内存cache中,真正执行查询的并不多。

其实,无论是单台机器或者一个集群,在高并发请求场景下,重启或者切换,都存在这个风险,解决的途径主要是两种:

(1)请求逐步增加,从少到多,逐步积累热点数据,最终达到正常服务状态。
(2)提前准备好“常用”的数据,主动对服务做“预热”,预热完成之后,再开放服务器的访问。

tcp负载均衡原理上和lvs等是一致的,工作在更为底层,性能会高于原来http负载均衡不少。但是,不会比lvs更为出色,lvs被置于内核模块,而nginx工作在用户态,而且,nginx相对比较重。另外一点,令人感到非常可惜,这个模块竟然是个付费功能。

以上就是在nginx服务器中怎么配置针对tcp的负载均衡的详细内容,更多请关注代码网其它相关文章!

(0)

相关文章:

  • 生产环境之Nginx高可用如何实现

    生产环境之Nginx高可用如何实现

    准备工作:192.168.16.128192.168.16.129两台虚拟机。安装好nginx安装nginx更新yum源文件:rpm -ivh http://n... [阅读全文]
  • 一份程序员的正版清单,这些正版软件你用过吗?

    一份程序员的正版清单,这些正版软件你用过吗?

    使用正版是对我们本身职业的一种尊重,不是吗?好吧,聊点其它的话题,就聊一聊做为一个程序员,你有没有使用盗版软件?我电脑上没有任何盗版,无论是编程工具还是其它软件... [阅读全文]
  • 一篇学会本地知识库对LLM的性能优化

    昨天一个跑了220个小时的微调训练完成了,主要任务是想在chatglm-6b上微调出一个能够较为精确的诊断数据库错误信息的对话模型来。不过这个等了将近十天的训练最后的结果令人失望,…

    2025年03月30日 服务器
  • 什么是集群和LVS?

    什么是集群和LVS?

    集群是一组通过告诉网络互联的计算机组,并以单一系统的模式加以管理;将很多服务器集中起来一起,提供同一种服务,在客户端看来就象是只有一个服务器。lvs(linux... [阅读全文]
  • 银河麒麟系统安装中间件

    银河麒麟系统安装中间件

    现在越来越多的企业级应用需要运行在国产化环境中,本文介绍下我们产品使用的中间件在国产操作系统银河麒麟的安装(不一定是最优方式,但能用)。包含;nginx、red... [阅读全文]
  • Golang 免费的吗?

    Golang 免费的吗?

    golang 免费的吗?golang是免费的,该语言一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,主要用于服务器端开发,而且适合于多人合作开发大... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com