原文:https://blog.csdn.net/bigtree_3721/article/details/72833955

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.

编译安装:略
最后贴一下官方分享的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; 
    } 
}

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
在此我做了一个tcp反向解析的小实验

背景:125.208.14.177:3306    数据库1 
      125.208.14.177:3306    数据库2 
      218.78.186.162        nginx服务器

配置文件

worker_processes auto;

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

stream { 
    upstream backend { 
        hash $remote_addr consistent; 
        server 125.208.14.177:3306 weight=5 max_fails=3 fail_timeout=30s; 
        server 125.208.14.177:3307 weight=4 max_fails=3 fail_timeout=30s; 
    }

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

}

测试:

[root@iZ236mlq2naZ ~]# mysql -uroot -p'******' -P12345 -h218.78.186.162 -e "select * from test" test

Warning: Using a password on the command line interface can be insecure.
+-----------------------------+
| t                          |
+-----------------------------+
| this is 125.208.14.177:3306 |
+-----------------------------+
[root@iZ236mlq2naZ ~]# mysql -uroot -p'*****' -P12345 -h218.78.186.162 -e "select * from test" test
Warning: Using a password on the command line interface can be insecure.
^[[A+-----------------------------+
| t                          |
+-----------------------------+
| this is 125.208.14.177:3307 |
+-----------------------------+
[root@iZ236mlq2naZ ~]# mysql -uroot -p'*****' -P12345 -h218.78.186.162 -e "select * from test" test
Warning: Using a password on the command line interface can be insecure.
+-----------------------------+
| t                          |
+-----------------------------+
| this is 125.208.14.177:3306 |
+-----------------------------+
[root@iZ236mlq2naZ ~]# mysql -uroot -p'******' -P12345 -h218.78.186.162 -e "select * from test" test
Warning: Using a password on the command line interface can be insecure.
+-----------------------------+
| t                          |
+-----------------------------+
| this is 125.208.14.177:3306 |
+-----------------------------+

再做一个读写分离的实验:
配置文件

worker_processes auto;

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

stream { 
    upstream readdb { 
        hash $remote_addr consistent;                                    ---作为read库 
        server 125.208.14.177:3306 weight=5 max_fails=3 fail_timeout=30s; 
        server 125.208.14.177:3307 weight=4 max_fails=3 fail_timeout=30s; 
    }

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

upstream writedb{ 
      hash $remote_addr consistent; 
      server 125.208.14.177:3308 max_fails=3 fail_timeout=30s;      ---作为write库 
    } 
    server { 
        listen 23456; 
        proxy_connect_timeout 1s; 
        proxy_timeout 3s; 
        proxy_pass writedb; 
    } 
 
}

注意下:绿色stream就是表示该nginx使用了tcp来负载均衡,而以前的是基于http的负载均衡。http负载均衡在配置文件中在绿色stream地方要用http来替换,见本博的另外一篇关于nginx http负载均衡的例子。

最后可以将http负载与tcp负载写一起达到多重目的。

Nginx基于TCP的负载均衡的配置例子的更多相关文章

  1. Nginx反向代理和负载均衡的配置

    1.反向代理配置 反向代理也称"动静分离",nginx不自己处理图片的相关请求,而是把图片的请求转发给其他服务器来处理. 修改nginx部署目录下conf子目录的nginx.con ...

  2. Nginx 反向代理与负载均衡的配置

    已经很久没有写博了,因为最近学车加上各种问题一直没时间, 今天刚好想起有好多的东西还没来得及记录.回到正题: Nginx是一个非常强大的web轻量级服务器,许多大厂也用Nginx进行负载均衡和反向代理 ...

  3. Nginx反向代理和负载均衡——个人配置

    #user nobody; worker_processes 2; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  4. Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

    通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...

  5. 使用apache和nginx代理实现tomcat负载均衡及集群配置详解

    实验环境: 1.nginx的代理功能 nginx proxy: eth0: 192.168.8.48 vmnet2 eth1: 192.168.10.10 tomcat server1: vmnet2 ...

  6. 使用nginx sticky实现基于cookie的负载均衡

    在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...

  7. nginx负载均衡及配置

    nginx负载均衡及配置 1 负载均衡概述 负载均衡由来是因为当一台服务器单位时间内的访问量很大时,此时服务器的压力也会很大,当超过自身承受能力时,服务器就会崩溃.为避免让服务器崩溃,用户拥有更好的体 ...

  8. nginx如何做到TCP的负载均衡

    原文:https://blog.csdn.net/u011218159/article/details/50966861   TCP 的 负载均衡   这个片段描述了如何通过nginx plus进行负 ...

  9. 使用nginx sticky实现基于cookie的负载均衡【转】

    在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...

随机推荐

  1. Automate the Sizing of your SGA in Oracle 10g

    How much memory does each of the individual components of the SGA need? Oracle now has methods to de ...

  2. c# 设计模式 之:装饰模式

    一.引言 在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手机类).A ...

  3. beautifulsoup之CSS选择器

    BeautifulSoup支持大部分的CSS选择器,其语法为:向tag或soup对象的.select()方法中传入字符串参数,选择的结果以列表形式返回. tag.select("string ...

  4. SQL Server ->> 调用系统内建扩展存储过程"master.dbo.xp_delete_file"删除过期备份文件

    DECLARE @oldDate DATETIME SET @oldDate = GETDATE()-30 EXECUTE MASTER.dbo.xp_delete_file 0, N'D:\back ...

  5. 限定pan手势只能在圆内移动view

    限定pan手势只能在圆内移动view 效果: 虽然看起来很简单,但实现原理还是稍微有点复杂-_-!! 核心的地方,就是需要计算pan手势的点与指定点的距离,不能超过这个距离,超过了就让动画还原,很容易 ...

  6. September 26th 2017 Week 39th Tuesday

    I have to protect the one thing I can't live without. 我必须为我一生挚爱遮风挡雨. A man is a success if he gets u ...

  7. python3 80行代码实现贪吃蛇

    上面是实现的截图,废话不说,直接开始说一下代码 pos = { 'UP': (-1,0), 'DOWN':(+1,0), 'LEFT':(0,-1), 'RIGHT':(0,+1), } curren ...

  8. mvc, web mvc, spring web mvc 区别

    1. MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的 ...

  9. BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Se ...

  10. Day15 集合(二)

    Set简介 定义 public interface Set<E> extends Collection<E> {} Set是一个继承于Collection的接口,即Set也是集 ...