Nginx基于TCP的负载均衡的配置例子

原文: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; 
    }

}

测试:

[[email protected] ~]# 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 |
+-----------------------------+
[[email protected] ~]# 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 |
+-----------------------------+
[[email protected] ~]# 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 |
+-----------------------------+
[[email protected] ~]# 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负载写一起达到多重目的。

原文地址:https://www.cnblogs.com/zhaiyf/p/9051626.html

时间: 2024-10-13 03:11:52

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

nginx基于HTTP实现负载均衡tomcat

配置环境: 最少两台tomcat服务器和一台nginx服务器 先来配置tomcat服务器1,在安装了tomcat服务的基础上 1.首先在根目录下建立一个web目录,并在里边建立一个webapp目录,用于存放网站文件. mkdir -pv /web/webapp 2.在webapp目录下建立一个index.jsp的测试页面 vim /web/webapp/index.jsp 添加内容: <%@ page language="java" import="java.util.

使用nginx做 tcp/udp 负载均衡

目标:对非http流量进行负载均衡 可选技术:nginx + docker-compose ,,,, 过程: 负载tcp/udp流量需要重新构建一下nginx,官网原文是 built with the --with-stream ,于是找了几个带参数的Dockerfile,大都是半年一年之前的文章了,打镜像不是重点,而且调试起来费时费力.还是想最好直接找一个官方构建好的版本,负载均衡测试后再自己构建镜像也不迟. 在docker hub找了一下,nginx默认镜像不带--with-stream参数

LVS基于DR模式负载均衡的配置

DR: 集群节点跟director必须在同一个物理网络中: 后端服务器(真实服务器)可以使用公网地址,实现便捷的远程管理和监控: director仅负责处理入站请求,响应报文则由realserver直接发往客户端: 不支持端口映射: 准备3台服务器,一台做转发,2太做子服务器,如下: Node1 VIP:192.168.252.200 DIP:192.168.252.11 集群服务器DR Node2 RIP:192.168.252.12 VIP:192.168.252.200 RS,apache

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

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理 通常我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至于4层负载均衡和7层负载均衡的区别,可以参考:http://www.cnblogs.com/kevingrace/p/6137881.html.然而Nginx从1.9.0版本开始,新增加了一个stream模块,用来实现四层协

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

实验环境: 1.nginx的代理功能 nginx proxy: eth0: 192.168.8.48 vmnet2 eth1: 192.168.10.10 tomcat server1: vmnet2 eth0: 192.168.10.20 tomcat server2: vmnet2 eth0: 192.168.10.30 # yum install -y nginx-1.8.1-1.el6.ngx.x86_64.rpm # vim /etc/nginx/conf.d/default.conf

基于Nginx反向代理及负载均衡

基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是开启的,因为proxy属于nginx内置标准模块,通常实现代理的时候,最核心模块是proxy_pass,用于将用户请求的rui递交至上游服务器的某个URI但这个模块大部分用于location当中,因此要实现将某一URI的访问代理某个上游服务器大致的格式为: location /name/ { pro

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

在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器.如果基于cookie会是一种什么情形,想想看, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐. 如果浏览器不支持coo

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

在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器.如果基于cookie会是一种什么情形,想想看, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐. 如果浏览器不支持coo

nginx如何做到TCP的负载均衡

TCP 的 负载均衡 这个片段描述了如何通过nginx plus进行负载均衡 在版本5中,nginx plus 能够代理和负载均衡通过TCP路径,TCP对于一些流行应用和服务是一个协议:LDAP.MYSQL.RTMP stream 模块 TCP 负载均衡被nginx的三个模块所实现,而且这些模块被嵌入在nginx plus中. 它们定义的命令是在stream配置块中: ngx_stream_core_module :定义基本的命令来激活这个TCP通信过程 ngx_stream_proxy_mod