设为首页 收藏本站
查看: 1537|回复: 0

[经验分享] 【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)

[复制链接]

尚未签到

发表于 2017-12-23 17:41:30 | 显示全部楼层 |阅读模式
  说明:很简单一个在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  

  编译
DSC0000.png

DSC0001.png

  出现以上表示编译成功
  安装
DSC0002.png

  可以看出安装完成后给了一个软连接到 /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文件查看。若没有错误,则会出现如下信息:
DSC0003.png

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

  9、安装:输入gmake install
DSC0005.png

  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
  

  浏览器访问,安装成功:
DSC0006.png

  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测试结果!
DSC0007.png

  【3】Windows 客户端测试结果:
   DSC0008.png
  注意,以上127.0.0.1 要换成你openresty服务器地址!!!
  Linux开始、停止、重新加载


  • 开始:./nginx
  • 停止:./nginx -s stop
    重置:./nginx -s>
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;
  }
  
}
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-427251-1-1.html 上篇帖子: 使用nginx整合IIS和tomcat 下篇帖子: nginx本地的测试环境添加SSL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表