Nginx实现HTTP负载均衡和TCP负载均衡

来源:互联网 发布:网络上黄泉 漫画 编辑:程序博客网 时间:2024/06/05 08:16
Nginx实现HTTP负载均衡和TCP负载均衡

说明:很简单一个在HTTP模块中,而另外一个和HTTP 是并列的Stream模块(Nginx 1.9.0 支持)

一、两个模块的最简单配置如下

1、HTTP负载均衡:

http {      include       mime.types;      default_type  application/octet-stream;        upstream live_node {        server 127.0.0.1:8089;        server 127.0.0.1:8088;     }    server {        listen 80;        server_name  localhost;        location / {            root   /usr/local/nginx/html;            index  index.html index.htm;        }    }    server {        listen 8088;        server_name  localhost;        location / {            root   /usr/local/nginx/html2;            index  index.html index.htm;        }    }    server {        listen 8089;        server_name  localhost;        location / {            root   /usr/local/nginx/html3;            index  index.html index.htm;        }    } } 

以上测试一个浏览器访问80端口,实现访问不同的server。

2、TCP负载均衡:

stream {    upstream rtmp {        server 127.0.0.1:8089; # 这里配置成要访问的地址        server 127.0.0.2:1935;        server 127.0.0.3:1935; #需要代理的端口,在这里我代理一一个RTMP模块的接口1935    }    server {        listen 1935;  # 需要监听的端口        proxy_timeout 20s;        proxy_pass rtmp;    }}

以上可以实现一个简单的RTMP流的转发。

二、TCP负载均衡和Http负载均衡的详细解说

1、TCP负载均衡:

  nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 TCP 代理和负载均衡,ngx_stream_core_module 这个模块在1.90版本后将被启用。但是并不会默认安装,需要在编译时通过指定 --with-stream 参数来激活这个模块。

(1)配置Nginx编译文件参数

./configure --with-http_stub_status_module --with-stream

(2)编译、安装,make,make install .

(3)配置nginx.conf文件

stream {    upstream rtmp {        server 127.0.0.1:8089; # 这里配置成要访问的地址        server 127.0.0.2:1935;        server 127.0.0.3:1935; #需要代理的端口,在这里我代理一一个RTMP模块的接口1935    }    server {        listen 1935;  # 需要监听的端口        proxy_timeout 20s;        proxy_pass rtmp;    }}

  创建最高级别的stream(与http同一级别),定义一个upstream组 名称为rtmp,由多个服务组成达到负载均衡 定义一个服务用来监听TCP连接(如:1935端口),并且把他们代理到一个upstream组的rtmp中,配置负载均衡的方法和参数为每个server;配置些如:连接数、权重等等。

  首先创建一个server组,用来作为TCP负载均衡组。定义一个upstream块在stream上下文中,在这个块里面添加由server命令定义的server,指定他的IP地址和主机名(能够被解析成多地址的主机名)和端口号。下面的例子是建立一个被称之为rtmp组,两个监听1395端口的server ,一个监听8089端口的server。

upstream rtmp {        server 127.0.0.1:8089; # 这里配置成要访问的地址        server 127.0.0.2:1935;        server 127.0.0.3:1935; #需要代理的端口,在这里我代理一一个RTMP模块的接口1935    }

注意:你不能为每个server定义协议,因为这个stream命令建立TCP作为整个 server的协议了

  配置反向代理使Nginx能够把TCP请求从一个客户端转发到负载均衡组中(如:rtmp组)。在每个server配置块中 通过每个虚拟server的server的配置信息和在每个server中定义的监听端口(客户端需求的代理端口号,如我推流的的是RTMP协议,则端口号为:1935)的配置信息和proxy_passs 命令把TCP通信发送到upstream的哪个server中去。下面我们将TCP通信发送到rtmp 组中去。

  server {        listen 1935;  # 需要监听的端口        proxy_timeout 20s;        proxy_pass rtmp;    }

当然我们也可以采用单一的代理方式:

server {        listen 1935;  # 需要监听的端口        proxy_timeout 20s;        proxy_pass  127.0.0.3:1935; #需要代理的端口,在这里我代理一一个RTMP模块的接口1935}

(4)改变负载均衡的方法:

  默认nginx是通过轮询算法来进行负载均衡的通信的。引导这个请求循环的到配置在upstream组中server端口上去。 因为他是默认的方法,这里没有轮询命令,只是简单的创建一个upstream配置组在这儿stream山下文中,而且在其中添加server。

1、least-connected :对于每个请求,nginx plus选择当前连接数最少的server来处理:

 upstream rtmp {     least_conn;        server 127.0.0.1:8089; # 这里配置成要访问的地址        server 127.0.0.2:1935;        server 127.0.0.3:1935; #需要代理的端口,在这里我代理一一个RTMP模块的接口1935    }

2、least time :对于每个链接,nginx pluns 通过几点来选择server的: 最底平均延时:通过包含在least_time命令中指定的参数计算出来的:

  • connect:连接到一个server所花的时间
  • first_byte:接收到第一个字节的时间
  • last_byte:全部接收完了的时间 最少活跃的连接数:
 upstream rtmp {     least_time first_byte;        server 127.0.0.1:8089; # 这里配置成要访问的地址        server 127.0.0.2:1935;        server 127.0.0.3:1935; #需要代理的端口,在这里我代理一一个RTMP模块的接口1935    }

3、普通的hash算法:nginx plus选择这个server是通过user_defined 关键字,就是IP地址:$remote_addr;

  upstream rtmp {     hash $remote_addr consistent;        server 127.0.0.1:8089; # 这里配置成要访问的地址        server 127.0.0.2:1935;        server 127.0.0.3:1935; #需要代理的端口,在这里我代理一一个RTMP模块的接口1935    }

 

 转载:http://www.mamicode.com/info-detail-1724417.html   感谢博主分享