说明:很简单一个在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 / {proxy_pass http://live_node;}}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}

2、HTTP负载均衡:

参考文章:

http://freeloda.blog.51cto.com/2033581/1288553

=========================Ubuntu14.0 平台安装OpenResty1.11.2.1============================

下载安装LusJIT:LuaJIT-2.0.4

(更多版本下载地址:http://luajit.org/download.html)

wget  http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -zxvf  LuaJIT-2.0.4.tar.gz
make && sudo make install

编译

出现以上表示编译成功

安装

可以看出安装完成后给了一个软连接到 /usr/local/bin/luajit 下

OpenResty编译或运行时所需要的软件包

apt-get install libreadline-dev libncurses5-dev libpcre3-dev \     libssl-dev perl make build-essential

OpenResty 安装

1、去openresty 的github上下载一个版本 https://github.com/openresty/lua-nginx-module/releases

wget https://openresty.org/download/openresty-1.11.2.1.tar.gz

2、解压源码包,tar xzvf ngx_openresty-1.9.7.1.tar.gz。若你下载的源码包版本不一样,将相应的版本号改为你所下载的即可。

3、切换工作目录到 cd ngx_openresty-1.9.7.1。

4、了解默认激活的组件。OpenResty 官网有组件列表,我们可以参考,列表中大部分组件默认激活,也有部分默认不激活。 默认不激活的组件,我们可以在编译的时激活,后面步骤详说明

5、绝大部分组件已内置在OpenResty安装包中,但也有一部分不包含在内默认并未启用

  标准 Lua 5.1 解释器、Drizzle Nginx 模块、 Postgres Nginx 模块 以及 Iconv Nginx 模块 默认并未启用,以下为分别编译选项来开启它们

--with-lua51--with-http_drizzle_module--with-http_postgres_module--with-http_iconv_module 

6、使用选项 --with-Components 激活组件,--without 则是禁止组件。 你可以根据自己实际需要选择 with 或 without。

如下命令,OpenResty 将配置安装在 /opt/openresty 目录下(注意使用 root 用户),并激活luajit、http_iconv_module 并禁止 http_redis2_module 组件。检测配置文件信息

sudo ./configure \

--prefix=/opt/openresty \

--with-lua51 --with-http_drizzle_module --with-
luajit --without-http_redis2_module --with-http_iconv_module --with-stream --with-
http_stub_status_module --with-http_xslt_module --with-stream_ssl_module --with-
http_realip_module --with-http_ssl_module --add-module=../stream-lua-nginx-module-
0.0.1/ --add-module=../nginx-rtmp-module-1.1.11/

提示错误:./configure: error: the ngx_drizzle addon requires the libdrizzle library.

解决办法:

http://openresty.org/download/drizzle7-2011.07.21.tar.gz
tar xzvf drizzle7-2011.07.21.tar.gz
cd drizzle7-2011.07.21/
./configure --without-server
make libdrizzle-1.0
make install-libdrizzle-1.0

提示错误:./configure: error: the HTTP XSLT module requires the libxml2/libxslt

解决办法:

sudo apt-get install libxml2 libxml2-dev libxslt-dev
sudo apt-get install libgd2-xpm libgd2-xpm-dev

7、在上一步中,最后没有什么 error 的提示就是最好的。若有错误,最后会显示 具体原因可以看源码包目录下的 build/nginx-VERSION/objs/autoconf.err文件查看。若没有错误,则会出现如下信息:

8、编译:根据上一步命令提示,输入gmake

9、安装:输入gmake install

10、设置环境变量(我这里没有做)

  为了后面启动 OpenResty 的命令简单一些,不用在 OpenResty 的安装目录下进行启动,我们设置环境变量来简化操作。 将 nginx 目录添加到 PATH 中。打开文件 /etc/profile, 在文件末尾加入export PATH=$PATH:/opt/openresty/nginx/sbin,若你的安装目录不一样,则做相应修改。 注意:这一步操作需要重新加载环境变量才会生效,可通过命令source /etc/profile或者重启服务器等方式实现。

/etc/profile   是所有用户的环境变量
/etc/enviroment  是系统的环境变量

登陆系统时shell读取的顺序应该是 /etc/profile ->/etc/enviroment -->$HOME/.profile   -->$HOME/.env

编译完之后做了一个软连接哦

mkdir -p /opt/openresty/site/lualib
ln -sf /opt/openresty/nginx/sbin/nginx /opt/openresty/bin/openresty

所有启动Nginx的方式可以有两种方式:

软连接开启:/opt/openresty/bin/openresty
原始地址开启:/opt/openresty/nginx/sbin/nginx

查看编译后的结果:

root@iZbp16w4fwm1sxrjd98oe0Z:/home/www/tinywan_bak/openresty-1.11.2.1# /opt/openresty/bin/openresty -V
nginx version: openresty/1.11.2.1
built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --prefix=/opt/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.0 --add-module=../iconv-nginx-module-0.14 --add-module=../echo-nginx-module-0.60 --add-module=../xss-nginx-module-0.05 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.31 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.06 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.6 --add-module=../ngx_lua_upstream-0.06 --add-module=../headers-more-nginx-module-0.31 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.17 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.14 --add-module=../rds-csv-nginx-module-0.07 --with-ld-opt=-Wl,-rpath,/opt/openresty/luajit/lib --with-stream --with-stream_ssl_module --with-http_ssl_module --add-module=/home/www/tinywan_bak/openresty-1.11.2.1/../stream-lua-nginx-module

浏览器访问,安装成功:

Nginx.conf

#TCP 负载均衡
stream {server {listen 1234;#proxy_timeout 20s;#proxy_pass backend;content_by_lua_block {ngx.say("HelloWorld")}}
}

【1】通过命令telnet 命令测试TCP负载server

root@iZbp16w4fwm1sxrjd98oe0Z:/opt/openresty/nginx/sbin# telnet 127.0.0.1 1234
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
HelloWorld
Connection closed by foreign host.

【2】CURL测试结果!

【3】Windows 客户端测试结果:

注意,以上127.0.0.1 要换成你openresty服务器地址!!!

Linux开始、停止、重新加载

  1. 开始:./nginx
  2. 停止:./nginx -s stop
  3. 重置:./nginx -s reload

TCP(4层协议) 负载均衡可以的!!!!!!!!!!!!!!!!!!!!!

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;  # 需要监听的端口

      content_by_lua_block {
        ngx.say("Hello, Lua!")
      }

        proxy_timeout 20s;proxy_pass rtmp;}
}

转载于:https://www.cnblogs.com/tinywan/p/6560889.html

【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)...相关推荐

  1. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  2. Web负载均衡学习笔记之K8S内Ngnix微服务服务超时问题

    0x00 概述 本文是从K8S内微服务的角度讨论Nginx超时的问题 0x01 问题 在K8S内部署微服务后,发现部分微服务链接超时,Connection Time Out. 最近碰到了一个 Ngin ...

  3. Web负载均衡学习笔记之四层和七层负载均衡的区别

    0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...

  4. Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令. 指令用于指定何时运行用户Lua代码以及如何使用结果. 下 ...

  5. Linux操作系统学习笔记(二十)网络通信之TCP协议

    一. 前言   自TCP诞生以来就改变了网络通信的格局,而TCP协议随着网络基础设施的发展也在一路演进,形成了如今庞大复杂的TCP协议簇.如何深入理解TCP的设计理念以及几十年以来TCP协议的演进,有 ...

  6. 计算机网络学习笔记(七)——传输层、TCP三次握手、四次挥手、TCP流量控制、大总结

    文章目录 前言 概念 一.传输层概述 二.传输层问题 三.端到端寻址 四.TCP三次握手和四次挥手 (一)三次握手建立连接 (二)四次挥手拆除连接 五.带拥塞的TCP流量控制 六.传输层实例 计网大总 ...

  7. 【我的C语言学习进阶之旅】介绍一下NDK开发中关于JNI函数的两种注册方式:静态注册和动态注册

    目录 一.要介绍本篇博客的原因 二.静态注册 2.1 实现原理 2.2 实现过程 2.3 弊端 2.4 示例 三.动态注册 3.1 实现原理 3.2 实现过程 3.3 优点 3.4 示例 一.要介绍本 ...

  8. 【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍

    简介 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应 ...

  9. web服务器和应用服务器的区别以及负载均衡---学习笔记

    一.区别: web服务器可以解析(handles)http协议.当web服务器接收到一个http请求(request),会返回一个http响应 (response),例如送回一个html页面.为了处理 ...

  10. 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一.介绍 各种* _by_lua,* _by_lua_block和* _by_lua_file配置指令用 ...

最新文章

  1. (原創) Altera Technology Roadshow 2011 Taipei (SOC) (Quartus II) (Nios II) (Qsys)
  2. 强化学习环境库 Gym 发布首个社区发布版,全面兼容 Python 3.9
  3. mysql行格式化_MySQL数据格式化语句
  4. 中国矿业大学计算机控制技术英语,中国矿业大学计算机控制系统参考试卷4及答案.pdf...
  5. 你知道数据中心宕机的真正成本吗?
  6. Django POST请求错误
  7. 文件句柄?文件描述符?傻傻分不清楚
  8. ASP.NET MVC中在Action获取提交的表单数据方法总结
  9. C语言中的格式化打印printf/sprintf以及嵌入式printf重定向进行DEBUG
  10. 如果我是一线技术主管…… 1
  11. python 配置文件介绍
  12. 大型云原生项目在数字化企业落地过程解密 1
  13. php5.0手册,tp5.0 开发手册下载|
  14. Warshall传递闭包算法
  15. mac系统安装win10双系统
  16. Microsoft Excel 教程:如何在 Excel 中自动填充数据?
  17. 54 小明的存钱计划
  18. 加密艺术,当AI遇上区块链 |Mixlab跨学科
  19. 华为OD机试 - 玩牌高手(Python) | 机试题算法+思路 【2023】
  20. 问卷调查 批量模拟真人填写 爬虫 实战

热门文章

  1. fireworks切图
  2. 2015年自然语言处理实证方法会议(EMNLP)简介
  3. 浅谈C#的垃圾回收-关于GC、析构函数、Dispose、and Finalize asp.net GC之析构函数详解...
  4. 使用 IntraWeb (21) - 基本控件之 TIWTabControl
  5. Mac python入门:安装python并新建python项目
  6. 2016阿里技术论坛,阿里技术大神的互联网趋势分享
  7. 网络管理:3分钟排障秘技,一招胜过十年功
  8. Unix 目录结构是怎么由来的?
  9. Android 之神 Jake Wharton 从 Square 离职!
  10. 教你一招最屌的阅读开源项目的姿势