WEB服务与NGINX(23)- nginx的四层负载均衡功能
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的四层负载均衡功能的更多相关文章
- 负载均衡服务之HAProxy https配置、四层负载均衡以及访问控制
前文我们聊了下haproxy的访问控制ACL的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12817773.html:今天我们来聊一聊haproxy的h ...
- Nginx四层负载均衡概述
目录 Nginx四层负载均衡概述 什么是负载均衡 负载均衡应用场景 四层,七层集群架构 四层负载均衡总结 Nginx如何配置四层负载均衡 nginx四层负载均衡端口转发 Nginx四层负载均衡概述 什 ...
- Nginx四层负载均衡
目录 Nginx四层负载均衡概述 Nginx如何配置四层负载均衡 使用nginx四层负载均衡实现tcp的转发 Nginx四层负载均衡概述 什么是四层负载均衡 四层负载均衡是基于传输层协议包来封装的(如 ...
- day11 四层负载均衡和http协议
day11 四层负载均衡和http协议 四层负载均衡和七层负载均衡的区别 四层和七层负载均衡的区别 四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发.由此可以看出,七层负 ...
- Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理
通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...
- 14.Nginx四层负载均衡
1.七层负载均衡: 根据url 调度不同的集群 url.cheng.com 10.0.0.5 10.0.0.7 /pass 10.0.0.8 /user 1.web01和web02配置 (只不过代码不 ...
- Nginx的反向代理和负载均衡服务
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行. ...
- 【Nginx】面试官:给我讲讲Nginx如何实现四层负载均衡?
写在前面 这次又被问到Nginx四层负载均衡的问题了,别慌,我们一起来细细分析这个看似简单的问题. 如果文章对你有点帮助,请关注 冰河技术 微信公众号,点赞.在看.留言和转发,大家的四连是我持续创作的 ...
- nginx四层负载均衡配置
nginx四层负载均衡配置代理Mysql集群 环境如下: ip 192.168.6.203 Nginx ip 192.168.6.*(多台) Mysql 步骤一 查看Nginx是否安装stream模块 ...
- 14、Nginx四层负载均衡
1.Nginx四层负载均衡基本概述 1.1.什么是四层负载均衡 四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都 ...
随机推荐
- MySQL索引Innodb存储引擎
MySQL索引优化 一.基础理解 MySQL语句的查询效率主要和索引树的高度有关,想要降低查询的次数提高查询的速度,减少直接对磁盘的I/O流的次数,就要让索引树的高度越低越好. 索引的定义:索引是帮助 ...
- Python爬虫爬取搜狐视频电影并存储到mysql数据库
数据获取方式:微信搜索关注[靠谱杨阅读人生]回复[电影].整理不易,资源付费,谢谢支持. 代码: 1 import time 2 import traceback 3 import requests ...
- 1 CSS的引入方式
1 CSS的引入方式 CSS样式有三种不同的使用方式,分别是行内样式,嵌入样式以及链接式.我们需要根据不同的场合不同的需求来使用不同的样式. 行内样式 行内样式,就是写在元素的style属性中的样式, ...
- Windows Terminal的资料
Windows Terminal是微软Windows平台难得好用的工具. 由于工作内容的原因,需要打开多个CMD窗口.多个git bash窗口,并且在多个窗口间切换,因此命令行窗口支持多TAB的特性, ...
- 王莉:将开发文档英文化和本地化,我们努力让OpenHarmony走向全球
编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 王莉 华为技术有限 ...
- Java 包和 API 深度解析:组织代码,避免命名冲突
Java 包和 API Java 中的包 用于将相关的类分组在一起.可以将其视为文件目录中的一个文件夹.我们使用包来避免名称冲突,并编写更易于维护的代码. 包分为两类: 内置包(来自 Java API ...
- Seaborn分布数据可视化---散点分布图
散点分布图 综合表示散点图和直方分布图. Jointplot() 绘制二变量或单变量的图形,底层是JointGrid(). sns.jointplot( x, y, data=None, kind=' ...
- Zookeeper+dubbo学习笔记
举个例子 你需要打车 那么会使用滴滴软件,而滴滴软件就类似于Zookeeper, 你和汽车司机都需要在滴滴公司注册(留下联系方式方便联系), 当你需要打车时Zookeeper会帮你找到你需要的汽车司 ...
- opencv实现数据增强(图片+标签)平移,翻转,缩放,旋转
面试问到了,让手撕数据增强,图片+标签.这里整理一下,直接上代码. import math import cv2 import numpy as np def pan(img, anns, size= ...
- 微信小程序三种授权登录的方式
经过一段时间对微信小程序的研发后 总结出以下三种授权登录的方式,我给他们命名为'一次性授权''永久授权''不授权' 1.一次性授权常规写法,需要获取用户公开信息(头像,昵称等)时,判断调取授权登录接口 ...