关闭

Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块

标签: nginxtcp
1244人阅读 评论(0) 收藏 举报
分类:

文章来源:http://zhangge.net/5037.html

昨天在公司微信群,CTO分享了这个消息,对运维来说以后基于TCP协议的后端业务的高可用又多了一个新的选择,实在是棒极了!

一直以来,Nginx 并不支持tcp协议,所以后台的一些基于TCP的业务就只能通过其他高可用负载软件来完成了,比如Haproxy。

这算是一个nginx比较明显的缺憾。不过,在1.90发布后这个认知将得到改写:

2015-04-28 nginx-1.9.0 mainline version has been released, with the stream module for generic TCP proxying and load balancing.

nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 TCP 代理和负载均衡。

The ngx_stream_core_module module is available since version 1.9.0. This module is not built by default, it should be enabled with the --with-stream configuration parameter.

ngx_stream_core_module 这个模块在1.90版本后将被启用。但是并不会默认安装,需要在编译时通过指定 --with-stream 参数来激活这个模块。

其他改进包括:

  • Change: 删除过时的 aio 和 rtsig 事件处理方法
  • Feature: 可在 upstream 块中使用 "zone" 指令
  • Feature: 流模块,支持 TCP 代理和负载均衡
  • Feature: ngx_http_memcached_module 支持字节范围
  • Feature: Windows 版本支持使用共享内存,带随机化地址空间布局.
  • Feature: "error_log" 指令可在 mail 和 server 级别
  • Bugfix: the "proxy_protocol" parameter of the "listen" directive did not work if not specified in the first "listen" directive for a listen socket.

所以,我们如果需要用到这个功能,就需要加上 --with-stream 参数重新编译nginx。对于已在线上运行的nginx,你可能要用到平滑升级来避免线上的服务被中断,可以参考张戈以前分享的教程:

Nginx在线服务状态下平滑升级或新增模块的详细操作记录

最后贴一下官方分享的stream模块的简单配置demo:

http://nginx.org/en/docs/stream/ngx_stream_core_module.html

worker_processes auto;
error_log /var/log/nginx/error.log info;
events {
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;
        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

和http模块类似,简单明了。相信熟悉 nginx 的朋友很容易的就能完成一个 nginx 下的 TCP 负载均衡集群配置。

由于工作繁忙,实在是心有余而力不足。还好最近公司给我招了个小鲜肉来做运维助理,等空下来了,我再去测一测这个 Nginx 的 TCP 代理和负载均衡功能。到时候再来博客分享一二,敬请期待!


下面测试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 参数:

[img]http://images.cnitblog.com/blog2015/450613/201505/071746123452724.png[/img]

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连接的中转。

0
0
查看评论

nginx stream模块初探

前言nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。这完全就是抢HAproxy份额的节奏,鉴于nginx在7层负载均衡和web service上的成功,和nginx良好的框架,stream模块前景一片光明。stream 模块编译stream模块默...
  • zhiyuan_2007
  • zhiyuan_2007
  • 2017-05-05 19:38
  • 10061

Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块

文章来源:http://zhangge.net/5037.html昨天在公司微信群,CTO分享了这个消息,对运维来说以后基于TCP协议的后端业务的高可用又多了一个新的选择,实在是棒极了!一直以来,Nginx 并不支持tcp协议,所以后台的一些基于TCP的业务就只能通过其他高可用负载软件来完成了,比如...
  • libaineu2004
  • libaineu2004
  • 2015-08-19 15:03
  • 40651

Nginx TCP代理及负载均衡stream模块简介

Nginx从1.9.0开始发布ngx_stream_*_module模块,该模块支持tcp代理及负载均衡。注意和http层代理和负载均衡区别开来,这可是在网络4层上做的负载均衡哦。举个使用stream模块的nginx的配置: worker_processes auto; events { w...
  • wangjianno2
  • wangjianno2
  • 2017-07-16 13:18
  • 585

nginx平滑添加模块

因APP开发ios需要,需要nginx支持ipv6,然而线上服务器nginx为编译安装,现记录下,nginx如何平滑添加模块 1、先查看nginx版本和已支持的模块,发现未有--with-ipv6模块 [root@bogon sbin]# ./nginx -V nginx version:...
  • slovyz
  • slovyz
  • 2016-12-23 15:07
  • 978

Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块

一直以来,Nginx 并不支持tcp协议,所以后台的一些基于TCP的业务就只能通过其他高可用负载软件来完成了,比如Haproxy。 这算是一个nginx比较明显的缺憾。不过,在1.90发布后这个认知将得到改写: 2015-04-28 nginx-1.9.0...
  • linlzk
  • linlzk
  • 2016-08-29 16:27
  • 1484

一深入理解Nginx的 模块化 ,全局观

Nginx源码目录结构. ├── auto 自动检测系统环境以及编译相关的脚本 │ ├── cc 关于编译器相关的编译选项的检测脚本 │ ├── lib nginx编译所需要的一些库的检测脚本 │ ├── os 与...
  • youbingchen
  • youbingchen
  • 2016-06-15 14:44
  • 3075

CentOS7 yum 安装 Nginx最新版本

下载对应当前系统版本的nginx包(package) # wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 建立nginx的yum仓库 # r...
  • ALLsharps
  • ALLsharps
  • 2016-07-30 10:29
  • 9617

Nginx配置实现基于tcp协议的反向代理和负载均衡

1.安装环境 系统环境:centos6.3_x64 软件版本:nginx-1.4.2.tar.gz  nginx_tcp_proxy_module-master.zip 2.软件安装 cd /root/ wget http://nchc.dl....
  • lovegluesea
  • lovegluesea
  • 2015-05-13 15:06
  • 1819

windows 下使用nginx对mysql进行负载均衡

windows 下使用nginx对mysql进行负载均衡
  • cst_code
  • cst_code
  • 2017-08-23 11:43
  • 304

nginx 实现tcp负载均衡

nginx常用来做http的反向代理,它默认是不支持tcp的,因此要使用nginx来实现tcp的反向代理必须用源码编译安装,并且在编译时安装tcp的扩展模块。    首先安装下载nginx:点击打开链接,tcp扩展模块:点击打开链接    然后解压ngin和,...
  • D_Guco
  • D_Guco
  • 2017-09-02 15:14
  • 1147
    个人资料
    • 访问:1013763次
    • 积分:5728
    • 等级:
    • 排名:第5402名
    • 原创:33篇
    • 转载:144篇
    • 译文:0篇
    • 评论:92条
    文章分类
    最新评论