<address id="tbv79"><strike id="tbv79"></strike></address>
    <noframes id="tbv79"><form id="tbv79"><th id="tbv79"></th></form>
    <address id="tbv79"></address>

    <address id="tbv79"><address id="tbv79"></address></address>

    <address id="tbv79"></address>

    <noframes id="tbv79"><address id="tbv79"></address>

    千锋扣丁学堂Linux培训之Nginx负载均衡TCP/UDP流

    2019-07-04 14:10:03 1376浏览

    今天千锋扣丁学堂Linux培训老师给大家分享一篇关于Nginx负载均衡之TCP/UDP流的详细介绍,首先负载均衡是指在多个后端服务器之间有效地分配网络流量,下面我们一起来看一下吧。



    从NGINXPlusR5[1]版本开始可以代理和负载均衡传输控制协议(TransmissionControlProtocol,TCP)通信。TCP是许多流行应用程序和服务的协议,如LDAP、MySQL和RTMP。

    从NGINXPlusR9[2]版本开始可以代理和负载平衡UDP流量。用户数据报协议(UserDatagramProtocol,UDP)是许多流行的非事务性应用程序的协议,如DNS、syslog和RADIUS。

    反向代理

    基础条件

    需要使用ngx_stream_core_module???,该??榇影姹?.9.0开始可用。这个??樵谀锨榭鱿率遣还菇ǖ?,需使用--with-stream配置参数来启用它。如下配置:

    ./configure  --prefix=/usr/local/nginx --with-stream 

    配置反向代理

    配置反向代理,以便NGINX打开资源,将来自客户端的TCP连接或UDP数据报转发到upstream组或代理服务器。

    A.配置反向代理之前,看一下ngx_stream_core_module??橹屑父鲈氐挠锓ǎ?br />
    stream块,在配置文件中是顶级块,和http块属于同一级别,语法如下:

    Syntax:    stream { ... } 
    Default:    — 
    Context:    main 

    server块,配置一个服务。在顶级stream{}上下文中为每个虚拟服务器定义一个或多个服务器配置块。语法如下:

    Syntax:    server { ... } 
    Default:    — 
    Context:    stream 

    listen指令,设置服务器将接受连接的套接字的地址和端口??梢灾恢付ǘ丝?。地址也可以是主机名,例如:

    Syntax:    listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; 
    Default:    — 
    Context:    server 

    示例如下:

    listen 127.0.0.1:12345; 
    listen *:12345; 
    listen 12345;     # same as *:12345 
    listen localhost:12345; 

    listen指令在此默认协议是TCP协议,对于UDP流,需要指定udp参数,如下:

    listen 12345 udp; 

    B.使用ngx_stream_proxy_module???默认是编译进来的)的proxy_pass指令配置代理,proxy_pass指令语法:

    Syntax:    proxy_pass address; 
    Default:    — 
    Context:    server 

    设置被代理服务器的地址。地址可以定义为一个域名或IP地址和一个端口号:

    proxy_pass localhost:12345; 

    或一个UNIX-domainsocket路径:

    proxy_pass unix:/tmp/stream.socket;

    C.如果代理服务器有多个网络接口,可以配置NGINX使用特定的源IP地址去连接upstream服务器。这可能很有用,当一个代理服务器在nginx后面,并配置了接受来自特定IP网络或IP地址范围的连接。

    使用ngx_stream_proxy_module??榈膒roxy_bind指令,其语法:

    Syntax:    proxy_bind address [transparent] | off; 
    Default:    — 
    Context:    stream, server 
    #此指令在1.9.2版本中开始使用。 

    从指定的本地IP地址向被代理服务器发起外部连接。特殊值off取消从上层配置中继承的proxy_bind指令产生的影响,允许系统自动分配本地IP地址。

    transparent参数(1.11.0+)允许从一个非本地IP地址发起到被代理服务器的外部连接,例如从一个客户端的真实IP地址:

    proxy_bind $remote_addr transparent; 

    为了使此参数起作用,通常需要使用超级用户权限运行nginx工作进程。在Linux上,不需要(1.13.8+),就像指定了transparent参数一样,工作进程从主进程继承CAP_NET_RAW功能?;剐枰渲煤诵穆酚杀硪岳菇乩醋员淮矸衿鞯耐缌髁?。

    示例配置如下:

    stream { 
        # ... 
        server { 
            listen            127.0.0.1:12345; 
            proxy_pass        backend.example.com:12345; 
            proxy_buffer_size 16k; 
            #proxy_bind 127.0.0.1:12345; 
        } 
    } 

    负载均衡

    使用ngx_stream_upstream_module???默认是编译进来的)的upstream指令。指令语法:

    Syntax:    upstream name { ... } 
    Default:    — 
    Context:    stream 

    定义一组服务器。服务器可以侦听不同的端口。此外,可以混合侦听TCP和UNIX域套接字的服务器。

    在顶级stream{}上下文中定义一个或多个upstream{}配置块,并设置upstream组的名称,例如TCP服务器的stream_backend和UDP服务器的dns_servers:

    stream { 
        upstream stream_backend { 
            server backend1.example.com:12345; 
            server backend2.example.com:12345; 
            server backend3.example.com:12346; 
        } 
     
        upstream dns_servers { 
            server 192.168.136.130:53; 
            server 192.168.136.131:53; 
        } 
    } 

    配置upstream组使用的负载均衡方法??梢灾付ㄒ韵路椒ㄖ唬?br />
    1.RoundRobin:默认情况下,NGINX使用循环算法对流进行负载平衡,将其顺序指向配置的upstream组中的服务器。因为它是默认方法,所以没有round-robin指令;只需在顶级stream{}上下文中创建upstream{}配置块,

    2.最少连接(LeastConnections)–nginx选择当前活动连接数较少的服务器。

    Syntax:    least_conn; 
    Default:    — 
    Context:    upstream 

    3.最少时间-NGINXPlus选择平均延迟最低且活动连接数最少的服务器。用于计算最低平均延迟的方法取决于least_time指令中包含以下哪个参数:

    Syntax:    least_time connect | first_byte | last_byte [inflight]; 
    Default:    — 
    Context:    upstream 

    A.connect-连接upstream服务器的时间

    B.first_byte-接收数据的第一个字节的时间

    C.last_byte-从服务器接收完整响应的时间,如果指定了inflight参数(1.11.6+),则还会考虑不完整的连接。

    4.哈希-NGINX根据用户定义的key,选择服务器。

    Syntax:    hash key [consistent]; 
    Default:    — 
    Context:    upstream 


    Hash负载平衡方法还用于配置会话持久性。由于散列函数基于客户端IP地址,因此来自给定客户端的连接始终传递到同一服务器,除非服务器已关闭或不可用。指定可选的consistent参数以应用ketama一致性散列方法:

    hash $remote_addr consistent; 

    5.random-每个连接将传递给随机选择的服务器。如果指定了two参数,首先,NGINX会考虑服务器权重随机选择两台服务器,然后使用指定的方法选择其中一台服务器:

    Syntax:random[two[method]];Default:—Context:upstreamThisdirectiveappearedinversion1.15.1.

    A.least_conn-活动连接数最少

    B.least_time=connect-连接上游服务器的时间($upstream_connect_time)少了美元符号

    C.least_time=first_byte-从服务器接收第一个数据字节的平均时间最短($upstream_first_byte_time)

    D.least_time=last_byte-从服务器接收最后一个数据字节的平均时间最短($upstream_session_time)

    随机负载平衡方法应该用于多个负载均衡器将请求传递到同一组后端的分布式环境.

    示例:

    stream { 
        upstream stream_backend { 
            hash   $remote_addr consistent; 
            server backend1.example.com:12345 weight=5; 
            server backend2.example.com:12345; 
            server backend3.example.com:12346 max_conns=3; 
        } 
        upstream dns_servers { 
            least_conn; 
            server 192.168.136.130:53; 
            server 192.168.136.131:53; 
        } 
    } 

    完整示例

    stream { 
        upstream stream_backend { 
            hash   $remote_addr consistent; 
            server backend1.example.com:12345 weight=5; 
            server backend2.example.com:12345; 
            server backend3.example.com:12346 max_conns=3; 
        } 
        upstream dns_servers { 
            least_conn; 
            server 192.168.136.130:53; 
            server 192.168.136.131:53; 
        } 
        server { 
            listen            12345; 
            proxy_pass        stream_backend; 
            proxy_buffer_size 16k; 
            #proxy_bind 127.0.0.1:12345; 
        } 
     
        server { 
            listen            53 udp; 
            proxy_pass        dns_servers; 
            proxy_buffer_size 16k; 
        } 
    } 

    以上就是千锋扣丁学堂Linux培训之Nginx负载均衡TCP/UDP流的全部内容,希望对大家的学习有所帮助,想要学好Linux开发小编给大家推荐口碑良好的扣丁学堂,扣丁学堂有专业老师制定的Linux学习路线图辅助学员学习,此外还有与时俱进的Linux课程体系和Linux视频教程供大家学习,想要学好Linux开发技术的小伙伴快快行动吧??鄱⊙肔inux技术交流群:422345477。


                              【扫码进入HTML5VIP免费公开课】  


         【关注微信公众号获取更多学习资料】        【扫码进入HTML5前端开发VIP免费公开课】



    查看更多关于“Linux培训资讯”的相关文章>>

    标签: Linux培训 Linux视频教程 红帽Linux视频 Linux学习视频 Linux入门视频 红帽RHCE/RHCSA考试
    微信
    微博
    15311698296

    全国免费咨询热线

    邮箱:codingke@1000phone.com

    官方群:148715490

    北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号天丰利商场4层
    京ICP备12003911号-6   Copyright ? 2013 - 2019
    返回顶部 返回顶部
    北京赛车滚雪球靠谱|官网_首页