前文我们聊到了nginx作为负载均衡的配置,前端nginx作为调度器调度http或https请求,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12458159.html;其实nginx面向客户端一侧它除了可以代理http或https的请求外,它还可以代理tcp的请求,因为nginx它本身工作在应用层,通常情况下我们把它代理tcp的请求叫做伪四层调度;在之前的文章中我们有说到过四层调度,比如LVS,它就是一个纯粹的四层调度,用户的请求报文根本就不会到达应用层,在TCP通信子网的三层或四层中就会把用户的请求处理(转发)调度给后端主机;早期版本的nginx是不支持tcp调度的,在1.9.0之后的版本中,nginx新增了ngx_stream_core_module模块后,就支持对tcp请求的调度;我们来看看这个模块的相关介绍吧!!!

  一、ngx_stream_core_module:此模块模拟了反代基于TCP或UDP的服务连接,即工作于传输层的反代或调度器;

    1、stream {……}:此指令只能用于mian配置段中,主要用于定义stream相关的服务;

    2、listen:定义监听地址和端口;默认为tcp协议;此指令只能用于server 配置段中,表示定义虚拟主机的监听地址和端口;

    3、server:定义虚拟服务器,此指令只能用于stream的配置段中;表示定义虚拟服务器的属性;用法类似http配置段的server用法;

  二、ngx_stream_proxy_module:此模块在1.9.0后的版本支持对tcp请求的代理,在1.9.13后的版本支持udp请求的代理和unix_domain sockets的代理;

    1、 proxy_pass address:设置代理服务器的地址。地址可以指定为一个域名或IP地址,以及一个端口或者unix-domain socket路径文件;

    2、proxy_timeout time:设置客户端或代理服务器连接上的两个连续读或写操作之间的超时。如果在此时间内没有传输数据,则连接关闭。默认时长是10分钟;

    3、proxy_connect_timeout time;设置nginx与被代理的服务器尝试建立连接的超时时长;默认为60s;

  三、ngx_stream_upstream_module:此模块(1.9.0)用于定义可以由proxy_pass指令引用的服务器组。

    1、upstream name {……}:此指令表示定义一个服务器组,以及组中各server的地址和属性,用法同ngx_http_upstream_module中的upstream用法一致,两者不同的是这里的upstream只能用于stream配置段,表示该组服务器是支持通过nginx基于tcp或udp协议进行调度;

    2、server:定义组中服务器成员以及服务器属性;用法同ngx_http_upstream_module中的server用法一致;

    3、hash key:基于指定的key的hash表实现请求调度,此处的key可以文本、变量或二者的组合;同ngx_http_upstream_module中的hash指令用法一致;

    4、least_conn:定义调度算法为最近最少连接算法;当server拥有不同的权重时为wlc;当所有后端主机的连接数相同时,则使用wrr进行调度;

  示例:

  提示:以上配置在/etc/nginx/nginx.conf这个主配置文件中的main配置段中配置,表示把/etc/nginx/conf.d/stream.d/下的所有以.conf的文件导入到该位置,这样配置我们就可以把stream配置段单独的用一个文件来书写,方便管理;

  提示:以上配置表示在stream配置段中定义一个服务器组,名称为sshserver,该组下有两个服务器,分别是0.20的22号端口,和0.22的22号端口;并且在stream配置段中定义了一个虚拟主机,监听在192.168.0.30的41319号端口,该虚拟主机作用是接受用户的请求,并且基于用户的请求把用户请求代理到到sshserver组上,代理超时时间为60s,如果客户端请求该虚拟主机,在60s未得到任何响应,将被断开;设置nginx与被代理服务器建立连接的超时时长为10s;有了以上配置,我们就可以通过访问192.168.0.30:41319这个socket就可以实现远程连接后端服务器;

  提示:从上面的现实结果我们可以看到nginx此时可以代理ssh,而且还是以轮询的方式向后端服务器调度客户端的请求;以这样的逻辑,我们不难想象它可以基于tcp或udp代理其他应用层协议,比如nginx代理mysql也可以用类似的配置来代理后端mysql服务器;

  当然我们也可以给不同的服务器给定不同的权限,这个配置同我们上一篇文中的配置相同,都是用weight来指定权重;

  提示:以上配置就表示给定0.20的权重为5,0.22的权重为2,也就是说7个请求中有5个会被调度到0.20上,有2个会被调度到0.22上;

  提示:可以看到我们给不同的服务器加上不同的权重后,客户端的请求也就以不同比例调度到后端服务器上;

  示例:

  提示:以上配置我们在原有的基础上加了一组新负载均衡虚拟服务器,用于代理后端两台mariadb服务;

  提示:可以看到在默认情况下,nginx负载均衡是使用的rr轮询的调度算法;

  假如后端服务器宕机了,nginx还会往后端宕机的服务器上调度请求吗?

  提示:可以看到nginx不管是基于http还是tcp调度用户请求都会自动对后端服务器做健康状态检测,当发现后端主机有服务不可用时,它就不会把用户的请求调度到有问题的主机上;

有关nginx基于tcp做伪四层调度的方法,基本上同基于http协议的七层调度方法是一样的,这里就不过多演示;更多有关于nginx的指令和配置说明请参考nginx官方文档http://nginx.org/en/docs/

Nginx之负载均衡配置(二)的更多相关文章

  1. nginx四层负载均衡配置

    nginx四层负载均衡配置代理Mysql集群 环境如下: ip 192.168.6.203 Nginx ip 192.168.6.*(多台) Mysql 步骤一 查看Nginx是否安装stream模块 ...

  2. Nginx + Tomcat 负载均衡配置详解

    Nginx常用操作指南一.Nginx 与 Tomcat 安装.配置及优化1. 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel o ...

  3. Nginx安装负载均衡配置 fair check扩展

    前言 本文主要是针对Nginx安装.负载均衡配置,以及fair智能选举.check后端节点检查扩展功能如何扩展,进行讲解说明. fair模块: upstream-fair,“公平的”Nginx 负载均 ...

  4. centos6 Nginx+Tomcat负载均衡配置

    一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...

  5. Nginx+tomcat负载均衡配置

    Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK ...

  6. CentOS6.5安装nginx及负载均衡配置

    所有的安装包可以去以下地址下载,或者自行去官网下载,下面都有介绍. 所有安装包地址:http://download.csdn.net/detail/carboncomputer/9238037 原文地 ...

  7. nginx的负载均衡配置,常用策略

    场景:nginx是一款非常优秀的负载均衡服务器,小巧而且性能强悍,中小型企业的首选. 下面介绍nginx的负载均衡的几种常见的配置以及优缺点 第一种:轮询(默认) 优点:实现简单 缺点:不考虑每台服务 ...

  8. Nginx的负载均衡配置(七)

    原文链接:https://www.cnblogs.com/knowledgesea/p/5199046.html 首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置 ...

  9. Linux记录-Nginx+Tomcat负载均衡配置

    Nginx负载均衡配置及策略: 轮询(默认) 优点:实现简单缺点:不考虑每台服务器的处理能力配置示例如下:upstream www.xxx.com {# 需要负载的server列表server www ...

随机推荐

  1. JAVA循环结构学校上机经常遇到的几题 笔记

    package homework.class4; import java.util.*; import java.util.stream.Collectors; import java.util.st ...

  2. cs231n spring 2017 lecture4 Introduction to Neural Networks

    1. Backpropagation:沿着computational graph利用链式法则求导.每个神经元有两个输入x.y,一个输出z,好多层这种神经元连接起来,这时候已知∂L/∂z,可以求出∂L/ ...

  3. Django中查询相关操作

    查询集特性 1)惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询. 2)缓存:当使用的是同一个查询集时,第一次使用的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个 ...

  4. [LC] 235. Lowest Common Ancestor of a Binary Search Tree

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  5. 吴裕雄--天生自然python编程:实例(3)

    # 返回 x 在 arr 中的索引,如果不存在返回 -1 def binarySearch (arr, l, r, x): # 基本判断 if r >= l: mid = int(l + (r ...

  6. 向MyEclipse的项目中导入js文件时,出现小红叉

    这个问题困扰我很久.刚开始时,也没有解决,因此也在网上寻找解决方法,还是没能解决.最近做项目时再一次出现了这样的问题,于是决定还是再找找办法.在此,分享一下自己的解决方法,给正处于痛苦中的童鞋们带来解 ...

  7. Spring学习笔记(七)模拟实际开发过程的调用过程XML版-Setter方式注入

    模拟实际开发过程的调用过程XML版-Setter方式注入 源码获取github [TOC] 1.项目结构 2.jar包跟上个一样 3.重写set方法 UserServiceImpl.java 1234 ...

  8. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  9. stat()函数--------------获取文件信息

    stat():用于获取文件的状态信息,使用时需要包含<sys/stat.h>头文件. 函数原型:int stat(const char *path, struct stat *buf): ...

  10. Flash之后是不是该IE浏览器了

    Flash死亡,Adobe推荐大家拥抱HTML5. 其实Flash本身也是支持手机端的. 一.Flash宣告死亡 Adoebe官方网站发布了公告,2020年12月30日起终止支援Flash.目前Chr ...