1. nginx实现四层的负载均衡

nginx从1.9.0版本开始支持TCP模式的负载均衡,在1.9.13版本开始支持udp协议的负载均衡,udp主要用户DNS域名解析。

1.1 nginx四层负载配置参数

以下指令由ngx_stream_core_module模块提供,主要用于实现基于tcp或udp的反向代理。

  • stream { … }

    配置环境:main

    定义stream配置文件模块,与http配置文件模块平级

  • listen

    设置address和port用于服务器将接受连接的套接字。可以只指定端口。地址也可以是主机名

    配置语法:

​ listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [bind]

​ [ipv6only=on|off] [reuseport]

​ [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt];

​ 配置环境:server

以下指令由ngx_stream_proxy_module模块提供,主要用于实现基于tcp或udp的反向代理。

  • proxy_pass

    指定后端服务器地址

    配置格式:proxy_pass address;

    配置环境:server

  • proxy_timeout

    无数据传输时,保持连接状态的超时时长,默认为10m

    配置格式:proxy_timeout timeout;

    配置环境:stream, server

  • proxy_connect_timeout

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

    配置格式:proxy_connect_timeout time;

    配置环境:stream, server

以下指令由ngx_stream_upstream_module模块提供,主要用于实现负载均衡功能。

  • upstream {…}

以上指令的使用示例如下:

stream {
upstream backend {
hash $remote_addr consistent;
server backend1.example.com:8888 weight=1; max_fails=3 fail_timeout=10s;
server 127.0.0.1:8889 max_fails=3 fail_timeout=10s;
server unix:/path;
} upstream dns {
server 1.1.1.1:8853;
server 1.1.1.2:53;
} server {
listen 1.1.1.3:8888;
proxy_pass backend;
proxy_timeout 5s;
proxy_connect_timeout 10s;
} server {
listen 53 udp reuseport;
proxy_timeout 10s;
proxy_pass dns;
} server {
listen [::1]:1111;
proxy_pass unix:/path/abc.socket;
}
}

1.2 负载均衡示例-mariadb

实验场景如下:

  • mysql部署

    #1.安装mariadb
    [root@mysql01 ~]# yum install mariadb mariadb-server -y #2.启动数据库服务:
    [root@mysql01 ~]# systemctl start mariadb [root@mysql01 ~]# ss -ntlp
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 50 *:3306 *:* users:(("mysqld",pid=2024,fd=14)) #3.安全初始化:
    [root@mysql01 ~]# mysql_secure_installation #4.授权root用户可以访问数据库:
    [root@mysql01 ~]# mysql -uroot -p123456
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MariaDB connection id is 2
    Server version: 5.5.65-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456';
    Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | test |
    +--------------------+
    4 rows in set (0.00 sec)
    MariaDB [(none)]> exit
    Bye
  • nginx负载均衡部署

    #1.nginx的配置文件如下:
    #注意:不再使用http配置块,直接在主配置文件下编写。
    [root@nginx01 ~]# cat /etc/nginx/nginx.conf
    stream {
    upstream mysql {
    server 192.168.20.50:3306 max_fails=3 fail_timeout=10s;
    server 192.168.20.51:3306 max_fails=3 fail_timeout=10s;
    } server {
    listen 3306;
    proxy_timeout 15s;
    proxy_connect_timeout 5s;
    proxy_pass mysql;
    }
    } #2.重启nginx服务:
    [root@nginx01 ~]# systemctl reload nginx.service #3.nginx监听在3306端口
    [root@nginx01 ~]# ss -ntlp
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 128 *:3306 *:* users:(("nginx",pid=11462,fd=27),("nginx",pid=11461,fd=27),("nginx",pid=1096,fd=27))
  • 客户端测试:

    #1.安装mariadb
    [root@xuzhichao ~]# yum install mariadb #2.测试通过访问nginx负载均衡器进入后端mariadb的数据库
    [root@xuzhichao ~]# mysql -uroot -p123456 -h192.168.20.20
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MariaDB connection id is 12
    Server version: 5.5.65-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | test |
    +--------------------+
    4 rows in set (0.00 sec) MariaDB [(none)]>

WEB服务与NGINX(23)- nginx的四层负载均衡功能的更多相关文章

  1. 负载均衡服务之HAProxy https配置、四层负载均衡以及访问控制

    前文我们聊了下haproxy的访问控制ACL的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12817773.html:今天我们来聊一聊haproxy的h ...

  2. Nginx四层负载均衡概述

    目录 Nginx四层负载均衡概述 什么是负载均衡 负载均衡应用场景 四层,七层集群架构 四层负载均衡总结 Nginx如何配置四层负载均衡 nginx四层负载均衡端口转发 Nginx四层负载均衡概述 什 ...

  3. Nginx四层负载均衡

    目录 Nginx四层负载均衡概述 Nginx如何配置四层负载均衡 使用nginx四层负载均衡实现tcp的转发 Nginx四层负载均衡概述 什么是四层负载均衡 四层负载均衡是基于传输层协议包来封装的(如 ...

  4. day11 四层负载均衡和http协议

    day11 四层负载均衡和http协议 四层负载均衡和七层负载均衡的区别 四层和七层负载均衡的区别 四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发.由此可以看出,七层负 ...

  5. Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

    通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...

  6. 14.Nginx四层负载均衡

    1.七层负载均衡: 根据url 调度不同的集群 url.cheng.com 10.0.0.5 10.0.0.7 /pass 10.0.0.8 /user 1.web01和web02配置 (只不过代码不 ...

  7. Nginx的反向代理和负载均衡服务

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行. ...

  8. 【Nginx】面试官:给我讲讲Nginx如何实现四层负载均衡?

    写在前面 这次又被问到Nginx四层负载均衡的问题了,别慌,我们一起来细细分析这个看似简单的问题. 如果文章对你有点帮助,请关注 冰河技术 微信公众号,点赞.在看.留言和转发,大家的四连是我持续创作的 ...

  9. nginx四层负载均衡配置

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

  10. 14、Nginx四层负载均衡

    1.Nginx四层负载均衡基本概述 1.1.什么是四层负载均衡 四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都 ...

随机推荐

  1. c语言的printf常用的一些转换说明符及其含义

    整数类型: %d: 十进制整数 (decimal: 十进制的) %u: 无符号整数 (unsigned: 无符号的) %i: 十进制整数 (integer: 整数) %o: 八进制数 (octal: ...

  2. Scala 不可变集合Set

    1 package chapter07 2 3 object Test06_ImmutableSet { 4 def main(args: Array[String]): Unit = { 5 // ...

  3. #构造,二分#[AGC006B] [AGC006D] Median Pyramid

    Easy Hard 分析(Easy) 若\(X=1\)或\(X=2n-1\)无解,否则在正中间构造\(X-1,X,X+1\), 其余位置升序铺入剩余数, 若\(X-1\)左侧数大于\(X-1\)那么\ ...

  4. #Splay#洛谷 1486 [NOI2004]郁闷的出纳员

    题目 分析 考虑加减工资直接打标记,查询第\(k\)多可以用平衡树, 删除有点恶心,这里考虑Splay,将需要删除的部分的后继splay到根节点并将左子树断边 代码 #include <cstd ...

  5. OpenHarmony社区运营报告(2023年5月)

      本月快讯 ● 2023年6月11-13日,2023开放原子全球开源峰会即将在北京北人亦创国际会展中心盛大开幕.2023开放原子全球开源峰会上,OpenAtom OpenHarmony(以下简称&q ...

  6. C# 通过ARP技术来观察目标主机数据包

    由于之前写的C# 实现Arp欺诈的文章属于网络攻击,不能够被展示,所以这边我们稍微说一下C#调用ARP包以及查看其他电脑上网数据包的技术,委婉的说一下ARP在局域网之中的应用. 本文章纯属技术讨论,并 ...

  7. 深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析

    Python MongoDB 排序 对结果进行排序 使用 sort() 方法对结果进行升序或降序排序. sort() 方法接受一个参数用于"字段名",一个参数用于"方向& ...

  8. IE8发送ajax请求无效

    IE是个非常有个性的浏览器,常规的东西在他这个都不太好使. 最开始发送ajax请求,总是不成功,也没啥报错,反正就是请求被忽略了 然后我就考虑用原生的JS来实现,然后就:哎呀  可以了...... x ...

  9. 开始学习web-sql注入

    web内容多且杂,不知道怎么下手开始学,那就先从sql注入开始学吧 目前只在b站上找了一些课程,还有ctfwiki作为参考 链接贴在下面: ctfwiki https://www.bilibili.c ...

  10. 使用 Grafana 统一监控展示-对接 Zabbix

    概述 在某些情况下,Metrics 监控的 2 大顶流: Zabbix: 用于非容器的虚拟机环境 Prometheus: 用于容器的云原生环境 是共存的.但是在这种情况下,统一监控展示就不太方便,本文 ...